基于最大时间戳计算各状态下唯一CDI的DAX度量实现
按CDI最新时间戳状态统计唯一CDI数量的DAX实现
示例数据
假设有如下Power BI表格(字段依次为:CDI、时间戳、创建日期、状态):
| CDI | 时间戳 | 创建日期 | 状态 |
|---|---|---|---|
| CDI1 | 2023-06-08 09:00:00 | 2023-06-08 | A |
| CDI1 | 2023-06-08 14:45:00 | 2023-06-08 | A |
| CDI2 | 2023-06-08 10:30:00 | 2023-06-08 | A |
| CDI2 | 2023-06-08 13:15:00 | 2023-06-08 | A |
| CDI3 | 2023-06-08 11:20:00 | 2023-06-08 | B |
| CDI3 | 2023-06-08 16:30:00 | 2023-06-08 | A |
| CDI4 | 2023-06-08 12:05:00 | 2023-06-08 | A |
| CDI4 | 2023-06-08 15:45:00 | 2023-06-08 | A |
| CDI5 | 2023-06-08 13:50:00 | 2023-06-08 | A |
| CDI5 | 2023-06-08 17:00:00 | 2023-06-08 | B |
业务需求
计算各状态下的唯一CDI数量,规则为:每个CDI仅取其最大时间戳对应的状态参与统计。
DAX度量实现
注意:原代码中直接取MAX('YourTable'[Status])的逻辑有误(会取状态文本的最大值,而非最新时间戳对应的状态),以下是修正后的正确DAX度量:
DistinctCDIByMaxStatus = VAR SelectedDate = SELECTEDVALUE('YourTable'[CreatedDate]) RETURN CALCULATE( DISTINCTCOUNT('YourTable'[CDI]), FILTER( ALL('YourTable'), 'YourTable'[CreatedDate] = SelectedDate && 'YourTable'[时间戳] = CALCULATE(MAX('YourTable'[时间戳]), ALLEXCEPT('YourTable', 'YourTable'[CDI])) ) )
代码逻辑说明
- SelectedDate变量:捕获当前上下文选中的创建日期,确保统计范围限定在指定日期内。
- 核心统计逻辑:通过
CALCULATE包裹DISTINCTCOUNT,统计符合筛选条件的唯一CDI数量。 - 筛选规则:
- 用
ALL('YourTable')清除当前表的上下文筛选,遍历全表数据; - 筛选出「创建日期等于选中日期」且「该行时间戳为对应CDI的最大时间戳」的记录——其中
ALLEXCEPT('YourTable', 'YourTable'[CDI])会保留CDI的上下文,单独计算每个CDI的最大时间戳。
- 用
将该度量与「状态」字段搭配使用(如放入矩阵视觉对象的「值」区域,将「状态」拖入行/列区域),即可得到各状态下符合规则的唯一CDI统计结果。
内容的提问来源于stack exchange,提问作者thomas
相关产品推荐
相关产品推荐

