PowerBI动态计算WERKS&MATNR维度日期过滤下的平均值度量
实现PowerBI动态计算WERKS&MATNR组合平均值的方法
你当前使用的度量是静态计算全表中WERKS和MATNR维度的平均值,代码如下:
CALCULATE( AVERAGEX( SUMMARIZE( LieferscheineUnique, LieferscheineUnique[WERKS], LieferscheineUnique[MATNR] ), CALCULATE( AVERAGE(LieferscheineUnique[fci_zu_PA] ) ) ), ALLEXCEPT( LieferscheineUnique, LieferscheineUnique[WERKS], LieferscheineUnique[MATNR] ) )
现在需要实现动态计算需求:根据页面上的日期过滤条件(比如切片器、筛选器),计算每个WERKS+MATNR组合的平均值,并将该值显示在对应组合的每一行中,预期输出表格如下:
| DATUM | WERKS | ID | MATNR | fci_zu_PA | Average_fci_per_Werks&MATNR |
|---|---|---|---|---|---|
| 08.04.2021 | H006 | 1 | 10009 | 41,7 | 42,83 |
| 12.04.2021 | H006 | 2 | 10009 | 43,3 | 42,83 |
| 14.04.2021 | H006 | 3 | 10009 | 43,5 | 42,83 |
| 08.04.2021 | H100 | 4 | 10009 | 43,7 | 43,50 |
| 22.04.2021 | H100 | 5 | 10009 | 43,3 | 43,50 |
| 22.04.2021 | H100 | 6 | 10010 | 24,5 | 24,50 |
解决方案
情况1:日期筛选直接基于事实表的DATUM列
使用以下DAX度量即可实现需求:
Average_fci_per_Werks&MATNR = CALCULATE( AVERAGE(LieferscheineUnique[fci_zu_PA]), ALLEXCEPT( LieferscheineUnique, LieferscheineUnique[WERKS], LieferscheineUnique[MATNR], LieferscheineUnique[DATUM] ) )
情况2:日期筛选基于单独的日期维度表(推荐模型设计)
如果你的数据模型中使用了独立的日期维度表(比如命名为DateTable),建议使用以下写法,避免事实表日期列的重复值影响筛选逻辑:
Average_fci_per_Werks&MATNR = CALCULATE( AVERAGE(LieferscheineUnique[fci_zu_PA]), ALLEXCEPT( LieferscheineUnique, LieferscheineUnique[WERKS], LieferscheineUnique[MATNR] ), ALLSELECTED('DateTable'[DATUM]) )
逻辑说明
- 两种写法核心都是通过
CALCULATE修改筛选上下文:ALLEXCEPT保留当前行的WERKS和MATNR维度,确保只计算当前组合的平均值;- 同时保留外部的日期筛选条件(切片器、页面筛选等),实现动态响应日期过滤;
- 最终直接用
AVERAGE计算该组合在筛选日期范围内的fci_zu_PA平均值,无需嵌套AVERAGEX和SUMMARIZE,简化了代码逻辑。
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

