如何在DAX中仅对首次出现日期的ID进行去重计数?
解决Power BI中仅统计ID首次出现日期的去重计数问题
问题场景
你手头有一张记录ID状态变更的表,同一个ID会随着状态变化出现在不同日期里,原始数据是这样的:
| ID | State | DATE |
|---|---|---|
| A | a | 2022-01-01 |
| A | b | 2022-01-02 |
| A | c | 2022-01-03 |
| B | d | 2022-01-01 |
| B | e | 2022-01-02 |
| C | f | 2022-01-03 |
你需要做一个能适配KPI卡片、折线图和表格的度量值,核心需求是只在ID第一次出现的日期统计这个ID,后续日期不再重复计数。
用基础的DISTINCTCOUNT('Table'[ID])确实能做到去重计数,但按日期拆分时会把每个ID出现的日期都算进去,结果不是你想要的:
| Date | Count |
|---|---|
| 2022-01-01 | 2 |
| 2022-01-02 | 2 |
| 2022-01-03 | 2 |
| Total | 3 |
你期望的是这样的结果:
| Date | Count |
|---|---|
| 2022-01-01 | 2 |
| 2022-01-02 | 0 |
| 2022-01-03 | 1 |
| Total | 3 |
解决方案:自定义DAX度量值
试试这个DAX公式,完全能满足你的需求:
First Occurrence Count = VAR CurrentDate = MAX('Table'[DATE]) VAR FirstOccurrences = ADDCOLUMNS( SUMMARIZE('Table', 'Table'[ID]), "FirstDate", CALCULATE(MIN('Table'[DATE])) ) RETURN COUNTROWS( FILTER(FirstOccurrences, [FirstDate] = CurrentDate) )
公式拆解(为啥这么写)
- CurrentDate:抓取当前视觉上下文里的日期(比如表格中某一行对应的日期),因为是按日期分组展示,所以这里就是当前行的日期值。
- FirstOccurrences:先把所有ID去重,然后给每个ID算出它第一次出现的日期,生成一个包含ID和对应首次日期的临时表。
- 返回结果:从临时表里筛选出首次日期等于当前上下文日期的行,统计这些行的数量——这就是当天新增的首次出现的ID个数。
效果验证
把这个度量值放到表格里,就能得到你想要的结果:
- 2022-01-01:A和B第一次出现,计数2
- 2022-01-02:没有新ID首次出现,计数0
- 2022-01-03:C第一次出现,计数1
- 总计:所有首次出现的ID总数3,完全正确
而且这个度量值也能直接用到KPI卡片(显示总新增ID数)和折线图(展示每日新增趋势)里,完美适配你提到的所有视觉对象。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

