Power BI DAX实现员工最近4季度信用总额计算(去重季度取最新月索引)
正确DAX解决方案:计算员工最近4个季度的信用总额(保留最新季度记录)
需求说明
- 针对每个唯一
EMP Number,计算最近4个季度的credit总和 - 若同一
credit _ Quarter存在多条记录,仅保留该季度中month_Index最大的最新记录 - 示例员工1104282的目标计算结果为€1575
示例数据
| credit | EMP Number | credit _ Quarter | Quarter_Index | month_Index |
|---|---|---|---|---|
| €300. | 1104282 | Q2 Y1 | 2 | 7 |
| €525. | 1104282 | Q4 Y1 | 4 | 7 |
| €375. | 1104282 | Q1 Y2 | 5 | 7 |
| €375. | 1104282 | Q3 Y1 | 3 | 7 |
| €0. | 1104282 | Q1 Y1 | 1 | 7 |
| €300. | 1104282 | Q2 Y1 | 2 | 4 |
| €375. | 1104282 | Q4 Y1 | 4 | 4 |
| €375. | 1104282 | Q3 Y1 | 3 | 4 |
| €0. | 1104282 | Q1 Y1 | 1 | 4 |
原公式问题分析
你提供的DAX公式存在以下问题:
- 语法错误:
ALL('osds'Quarter_Index])缺少方括号分隔,应为ALL('osds'[Quarter_Index]) - 逻辑错误:未正确筛选每个季度的最新记录,也未按
Quarter_Index降序获取最近4个季度 - 计算逻辑偏差:SUMX的嵌套CALCULATE未正确关联去重后的记录
正确DAX公式
credit_sum = VAR CurrentEMP = SELECTEDVALUE('osds'[EMP Number]) -- 筛选每个员工每个季度的最新记录(取month_Index最大的那条) VAR LatestQuarterRecords = FILTER( 'osds', 'osds'[EMP Number] = CurrentEMP && 'osds'[month_Index] = CALCULATE( MAX('osds'[month_Index]), ALLEXCEPT('osds', 'osds'[EMP Number], 'osds'[credit _ Quarter]) ) ) -- 获取去重后最近的4个季度(按Quarter_Index降序取TOP4) VAR Top4LatestQuarters = TOPN( 4, LatestQuarterRecords, 'osds'[Quarter_Index], DESC ) -- 计算4个季度的credit总和 RETURN SUMX(Top4LatestQuarters, 'osds'[credit])
公式说明
- CurrentEMP:锁定当前上下文的员工编号,确保计算仅针对单个员工生效
- LatestQuarterRecords:通过
ALLEXCEPT保留员工和季度维度,筛选出每个季度中month_Index最大的记录,完成重复季度数据的去重 - Top4LatestQuarters:对去重后的记录按
Quarter_Index降序取前4条,即时间最近的4个季度 - SUMX:遍历筛选后的4条记录,计算
credit总和
验证示例员工1104282:去重后的有效季度为Q1 Y2(375)、Q4 Y1(525)、Q3 Y1(375)、Q2 Y1(300),总和为375+525+375+300=1575,符合目标结果
内容的提问来源于stack exchange,提问作者Sufiyan Shaikh
相关产品推荐
相关产品推荐

