如何修改Power BI中的DAX度量值,按最高Period统计活跃客户
问题
在Power BI中,我有一张名为EpiDates的表(包含数千条记录),数据示例如下:
Period ClientID AdmDate DischDate LOS 1 222 5/23/2022 12/31/2050 396 2 222 5/23/2022 12/31/2050 396 3 222 5/23/2022 12/31/2050 396 2 333 3/01/2022 12/31/2050 479 3 333 3/01/2022 12/31/2050 479 0 444 1/23/2023 12/31/2050 151 1 444 1/23/2023 12/31/2050 151 2 555 1/23/2023 2/23/2023 30
我需要创建名为Active Clients的DAX度量值,统计DischDate等于12/31/2050的唯一ClientID数量。
现有DAX代码:
CALCULATE (DISTINCTCOUNT (EpiDates'[ClientID] ), EpiDates'[DischDate]= DATE(2050, 12, 31))
但创建矩阵可视化后得到以下结果:
Period # Active Clients 0 1 1 2 2 2 3 2
当前度量值会按分组的Period分别统计ClientID数量。我的目标是生成如下矩阵:仅统计每个ClientID对应的最高Period值中,DischDate为12/31/2050的唯一客户数:
Period # Active Clients 1 1 3 2
说明:
- Period 1是ClientID=444的最高周期,统计1个活跃客户
- Period 3是ClientID=333、222的最高周期,统计2个活跃客户
- Period 2是ClientID=555的最高周期,但
DischDate不等于12/31/2050,故不统计 - Period 0没有客户将其作为最高周期,故不统计
请求修改现有DAX度量值以实现需求。
解决方案
可以使用以下DAX度量值实现需求:
Active Clients = CALCULATE ( DISTINCTCOUNT ( EpiDates[ClientID] ), // 筛选出当前客户的最高周期记录 FILTER ( ALLEXCEPT ( EpiDates, EpiDates[ClientID] ), EpiDates[Period] = CALCULATE ( MAX ( EpiDates[Period] ), ALLEXCEPT ( EpiDates, EpiDates[ClientID] ) ) ), // 筛选出院日期符合条件的记录 EpiDates[DischDate] = DATE ( 2050, 12, 31 ) )
逻辑说明
ALLEXCEPT ( EpiDates, EpiDates[ClientID] ):保留当前客户的上下文,移除其他列的筛选影响,确保只针对单个客户计算最高周期。CALCULATE ( MAX ( EpiDates[Period] ), ... ):计算当前客户的最高周期值。- 外层筛选:只保留客户最高周期的记录,同时满足出院日期为
2050-12-31的条件,最后统计该条件下的唯一客户数。
如果需要更直观的分步逻辑,也可以使用变量拆分的版本:
Active Clients = // 第一步:为每个客户计算最高周期和是否活跃 VAR ClientInfo = ADDCOLUMNS ( VALUES ( EpiDates[ClientID] ), "@MaxPeriod", CALCULATE ( MAX ( EpiDates[Period] ) ), "@IsActive", CALCULATE ( MAX ( EpiDates[DischDate] ) = DATE ( 2050, 12, 31 ) ) ) // 第二步:筛选出活跃客户,并按最高周期分组计数 VAR PeriodCount = GROUPBY ( FILTER ( ClientInfo, [@IsActive] = TRUE() ), [@MaxPeriod], "@ClientCount", COUNTX ( CURRENTGROUP(), [ClientID] ) ) // 返回当前周期对应的客户数 RETURN SUMX ( FILTER ( PeriodCount, [@MaxPeriod] = SELECTEDVALUE ( EpiDates[Period] ) ), [@ClientCount] )
内容的提问来源于stack exchange,提问作者Hell-1931
相关产品推荐
相关产品推荐

