DAX 聚合和动态过滤器
DAX Aggregation and dynamic filter
我正在尝试计算响应切片器选择(第 2 级)的聚合数据(第 1 级)
具体示例:
数据
Level1 Level2 Level3 Data
A z q 1
A zz q 2
A zzz r 3
A zzzz r 4
B z q 10
B zz q 20
B zzz r 30
B zzzz r 40
按 Level1 聚合数据
选项 1。
使用 GroupBy 创建 table 并使用 Level1 加入它(在关系选项卡中)
Table1_agg =
GROUPBY(
Table1,
Table1[Level1],
"AggL1_Data",sumx(CURRENTGROUP(),Table1[Data])
)
选项 2. 在表 1 中使用过滤器
AggL1_Filter =
Calculate(
sum(Table1[Data]),
FILTER(
Table1,
Table1[Level1]= EARLIER(Table1[Level1])
)
)
结果 - 聚合有效
但是,使用 Level2 切片器进行过滤不起作用。
聚合数据 "AggL1_" 仍然显示 10 和 100,而我希望看到 5(对于 A)和 50(对于 B)
非常感谢您的帮助,我已经坚持了很长时间,
提前致谢,
dusiod
我想你只需要使用 ALLSELECTED function.
AggMeasure = CALCULATE(SUM(Table1[Data]), ALLSELECTED(Table1[Level2]))
编辑: 如果您只需要按 Level1
分组(忽略其他可能级别的筛选上下文),则需要进行调整。
AggMeasure = CALCULATE(SUM(Table1[Data]),
FILTER(ALLSELECTED(Table1),
Table1[Level1] IN VALUES(Table1[Level1])))
这像以前一样使用 ALLSELECTED
函数来保留切片器选择,但添加了一个条件,即我们只考虑与当前 Level1
匹配的行。对于 A
行中的任何内容,VALUES(Table1[Level1])
仅 returns A
因为这就是它在其过滤器上下文中看到的全部内容。 (总计行删除了所有筛选器上下文,因此 returns 两者的总和。)
您可以使用 = MAX(...)
或 = MIN(...)
或 = LASTNONBLANK(...)
.
而不是 IN VALUES(...)
我想这就解决了,
0Measure =
CALCULATE(
SUM(Table1[Data]),
FILTER(ALLSELECTED(Table1),Table1[Level1]=MAX(Table1[Level1]))
)
但是谁能解释为什么 FILTER
条件有效
Table1[Level1]=MAX(Table1[Level1])
特别是 MAX 的文档指出该函数忽略逻辑值和文本...
我正在尝试计算响应切片器选择(第 2 级)的聚合数据(第 1 级)
具体示例:
数据
Level1 Level2 Level3 Data
A z q 1
A zz q 2
A zzz r 3
A zzzz r 4
B z q 10
B zz q 20
B zzz r 30
B zzzz r 40
按 Level1 聚合数据
选项 1。 使用 GroupBy 创建 table 并使用 Level1 加入它(在关系选项卡中)
Table1_agg =
GROUPBY(
Table1,
Table1[Level1],
"AggL1_Data",sumx(CURRENTGROUP(),Table1[Data])
)
选项 2. 在表 1 中使用过滤器
AggL1_Filter =
Calculate(
sum(Table1[Data]),
FILTER(
Table1,
Table1[Level1]= EARLIER(Table1[Level1])
)
)
结果 - 聚合有效
但是,使用 Level2 切片器进行过滤不起作用。
聚合数据 "AggL1_" 仍然显示 10 和 100,而我希望看到 5(对于 A)和 50(对于 B)
非常感谢您的帮助,我已经坚持了很长时间,
提前致谢,
dusiod
我想你只需要使用 ALLSELECTED function.
AggMeasure = CALCULATE(SUM(Table1[Data]), ALLSELECTED(Table1[Level2]))
编辑: 如果您只需要按 Level1
分组(忽略其他可能级别的筛选上下文),则需要进行调整。
AggMeasure = CALCULATE(SUM(Table1[Data]),
FILTER(ALLSELECTED(Table1),
Table1[Level1] IN VALUES(Table1[Level1])))
这像以前一样使用 ALLSELECTED
函数来保留切片器选择,但添加了一个条件,即我们只考虑与当前 Level1
匹配的行。对于 A
行中的任何内容,VALUES(Table1[Level1])
仅 returns A
因为这就是它在其过滤器上下文中看到的全部内容。 (总计行删除了所有筛选器上下文,因此 returns 两者的总和。)
您可以使用 = MAX(...)
或 = MIN(...)
或 = LASTNONBLANK(...)
.
IN VALUES(...)
我想这就解决了,
0Measure =
CALCULATE(
SUM(Table1[Data]),
FILTER(ALLSELECTED(Table1),Table1[Level1]=MAX(Table1[Level1]))
)
但是谁能解释为什么 FILTER
条件有效
Table1[Level1]=MAX(Table1[Level1])
特别是 MAX 的文档指出该函数忽略逻辑值和文本...