DAX技术支持:按公司和期间汇总值并忽略视觉筛选
解决DAX度量值按公司/期间分组计算固定值并应用到所有行的问题
原始数据表
| 公司 | 项目 | 期间 | Value1 | Value2 |
|---|---|---|---|---|
| A | A | 13 | 10 | 20 |
| A | A | 13 | 10 | 20 |
| A | B | 13 | 20 | |
| A | B | 13 | 20 | |
| A | C | 13 | 10 | 20 |
| A | C | 13 | 20 | 20 |
| A | D | 13 | 20 | |
| A | D | 13 | 10 |
需求
按公司和期间分组,计算非空Value1的总和除以非空Value2的总和,得到固定比率后,将该值应用到每一行(包括Value1为空的行)。
原度量值问题
原编写的度量值如下:
AVERAGEX ( SUMMARIZE ( CALCULATETABLE ( 'Table', 'Table'[Value1] <> BLANK () ), 'Table'[Company], 'Table'[Period], "Result", VAR SumValue1= SUM ( 'Table'[Value1] ) VAR SumValue2 = SUM ( 'Table'[Value2] ) RETURN SumValue1/ SumValue2 ), [Result] )
当前问题:度量值受行上下文(如项目、单条记录的Value1/Value2)影响,导致逐行计算出不同结果,仅总计行显示正确的0.3333。
解决方案
使用以下DAX度量值,确保在公司+期间维度下计算固定比率,并忽略其他细分维度的影响:
固定比率 = VAR 公司期间上下文 = ALLEXCEPT('Table', 'Table'[公司], 'Table'[期间]) VAR 总Value1 = CALCULATE(SUM('Table'[Value1]), 公司期间上下文, NOT(ISBLANK('Table'[Value1]))) VAR 总Value2 = CALCULATE(SUM('Table'[Value2]), 公司期间上下文, NOT(ISBLANK('Table'[Value2]))) RETURN DIVIDE(总Value1, 总Value2, 0)
代码说明
ALLEXCEPT('Table', 'Table'[公司], 'Table'[期间]):保留当前行的公司和期间筛选条件,移除其他所有维度(如项目、行级字段)的筛选影响,确保计算范围是整个公司+期间的数据集。CALCULATE(SUM(...), 公司期间上下文, NOT(ISBLANK(...))):在上述上下文基础上,过滤出非空的Value1/Value2并计算总和。DIVIDE函数:安全处理除法运算,避免除数为0时出现错误,第三个参数为除数为0时的默认返回值(此处设为0)。
最终效果
应用该度量值后,所有行将显示统一的固定比率:
| 公司 | 项目 | 期间 | Value1 | Value2 | 固定比率 |
|---|---|---|---|---|---|
| A | A | 13 | 10 | 20 | 0.3333 |
| A | A | 13 | 10 | 20 | 0.3333 |
| A | B | 13 | 20 | 0.3333 | |
| A | B | 13 | 20 | 0.3333 | |
| A | C | 13 | 10 | 20 | 0.3333 |
| A | C | 13 | 20 | 20 | 0.3333 |
| A | D | 13 | 20 | 0.3333 | |
| A | D | 13 | 10 | 0.3333 | |
| 总计 | 0.3333 |
内容的提问来源于stack exchange,提问作者Rookie12
相关产品推荐
相关产品推荐

