PowerBI DAX实现:按位置与领域求和仅计算重复阶段首行得分
DAX实现按Location+Domain求和,重复Phase仅计首行Domain score
原始数据
| Location | Domain | Phase | Answer | Domain score |
|---|---|---|---|---|
| loc1 | A | 1 | 1 | 1 |
| loc1 | A | 2 | 1 | 0.5 |
| loc1 | A | 2 | 0 | 0.5 |
| loc1 | A | 3 | 0 | 0 |
| loc1 | A | 4 | 0 | 0 |
| loc2 | A | 1 | 1 | 1 |
| loc2 | A | 2 | 1 | 1 |
| loc2 | A | 2 | 1 | 1 |
| loc2 | A | 3 | 0 | 0 |
| loc2 | A | 4 | 0 | 0 |
预期输出
| Location | Domain | Phase | Answer | Domain score | End score |
|---|---|---|---|---|---|
| loc1 | A | 1 | 1 | 1 | 1.5 |
| loc1 | A | 2 | 1 | 0.5 | 1.5 |
| loc1 | A | 2 | 0 | 0.5 | 1.5 |
| loc1 | A | 3 | 0 | 0 | 1.5 |
| loc1 | A | 4 | 0 | 0 | 1.5 |
| loc2 | A | 1 | 1 | 1 | 2 |
| loc2 | A | 2 | 1 | 1 | 2 |
| loc2 | A | 2 | 1 | 1 | 2 |
| loc2 | A | 3 | 0 | 0 | 2 |
| loc2 | A | 4 | 0 | 0 | 2 |
DAX实现方案
可以通过以下两种方式实现需求:
方式1:分步计算(易理解)
步骤1:标记每个Phase分组的首行
创建计算列IsFirstRowInPhase,识别每个Location+Domain+Phase分组中的第一行:
IsFirstRowInPhase = VAR CurrentGroup = [Location] & "|" & [Domain] & "|" & [Phase] VAR RowNumber = RANKX( FILTER('YourTableName', [Location] & "|" & [Domain] & "|" & [Phase] = CurrentGroup), [Answer], -- 若Answer不唯一,替换为表中唯一标识行的列即可 , ASC, DENSE ) RETURN IF(RowNumber = 1, 1, 0)
步骤2:计算最终End score
创建计算列End score,按Location+Domain分组,仅对每个Phase首行的Domain score求和:
End score = CALCULATE( SUMX( FILTER('YourTableName', [IsFirstRowInPhase] = 1), [Domain score] ), ALLEXCEPT('YourTableName', 'YourTableName'[Location], 'YourTableName'[Domain]) )
方式2:单公式合并写法
无需额外标记列,直接用一个计算列完成逻辑:
End score = VAR CurrentLocation = [Location] VAR CurrentDomain = [Domain] RETURN CALCULATE( SUM('YourTableName'[Domain score]), FILTER( ALL('YourTableName'), 'YourTableName'[Location] = CurrentLocation && 'YourTableName'[Domain] = CurrentDomain && RANKX( FILTER( 'YourTableName', 'YourTableName'[Location] = 'YourTableName'[Location] && 'YourTableName'[Domain] = 'YourTableName'[Domain] && 'YourTableName'[Phase] = 'YourTableName'[Phase] ), 'YourTableName'[Answer], , ASC, DENSE ) = 1 ) )
关键逻辑说明
- 使用
RANKX为每个Location+Domain+Phase分组的行生成序号,确保仅首行被纳入求和范围。 - 通过
ALLEXCEPT或上下文筛选,限定求和范围为当前行对应的Location+Domain分组。 - 若表中无唯一标识行的列(如示例中的
Answer),可添加索引列作为RANKX的排序依据。
内容的提问来源于stack exchange,提问作者Mark Wekking
相关产品推荐
相关产品推荐

