如何在Power BI中当子项缺失数据时停止父级数据聚合
问题背景
数据始终在Level 3层级录入,需从子级聚合至父级。当前使用的DAX公式为:
Total1 = Sum(Value1)
原始数据
| 日期 | Level 3 | KPI | Value 1 |
|---|---|---|---|
| 2023.12.04 | E | MIX | 40 |
| 2023.12.04 | F | MIX | 35 |
| 2023.12.04 | G | MIX | 10 |
| 2023.12.04 | H | MIX | |
| 2023.12.03 | E | MIX | 45 |
| 2023.12.03 | F | MIX | |
| 2023.12.03 | G | MIX | 5 |
| 2023.12.03 | H | MIX | 15 |
预期结果
父级需满足:当任一子项缺失数据时,停止聚合并返回空值,预期结果如下:
| 日期 | Level2 | 结果 |
|---|---|---|
| 2023.12.04 | AB(子项'E'和'F') | 75 |
| 2023.12.03 | AB(子项'E'和'F') | |
| 2023.12.04 | AC(子项'G'和'H') | |
| 2023.12.03 | AC(子项'G'和'H') | 20 |
解决方案
要实现需求,需在DAX中加入完整性判断:仅当父级下所有子项数据都非空时,才返回求和结果,否则返回空值。
基础版DAX公式(适用于单表结构)
Total_Valid = VAR CurrentLevel2 = SELECTEDVALUE('Table'[Level2]) // 获取当前父级下所有Level3子项 VAR AllLevel3 = CALCULATETABLE(VALUES('Table'[Level3]), ALL('Table'[日期], 'Table'[Value1]), 'Table'[Level2] = CurrentLevel2) // 统计当前日期下数据非空的子项数量 VAR ValidCount = COUNTROWS(FILTER(AllLevel3, CALCULATE(NOT(ISBLANK(SUM('Table'[Value1])))))) // 统计父级下总子项数量 VAR TotalCount = COUNTROWS(AllLevel3) RETURN // 只有子项全有效时返回求和结果,否则返回空 IF(ValidCount = TotalCount, SUM('Table'[Value1]), BLANK())
简化版DAX公式(适用于带层级维度表的模型)
如果数据模型中存在独立的层级维度表(比如Level2与Level3的关联表),可以直接关联子项表简化逻辑:
Total_Valid = VAR TotalChildren = COUNTROWS(RELATEDTABLE(Level3_Dim)) VAR ValidChildren = COUNTROWS(FILTER(RELATEDTABLE(Level3_Dim), NOT(ISBLANK(SUM('Fact_Table'[Value1]))))) RETURN IF(TotalChildren = ValidChildren, SUM('Fact_Table'[Value1]), BLANK())
内容的提问来源于stack exchange,提问作者Juli
相关产品推荐
相关产品推荐

