求助:Power BI中基于Group By、Max及Sum函数的DAX度量编写
解决DAX度量问题的方案
核心思路
- 先定位每个
Answer+Customer_ID组合的最新Activity_Date - 筛选出TEMP_WQ表中符合该最新日期的行,自动去除重复的用户-答案组合记录
- 对筛选后的
TotalAnswer按Answer汇总求和 - 确保度量能响应DimDate的筛选逻辑,支持同期数据对比场景
最终DAX度量
Total Measure = VAR LatestPerCustomerAnswer = ADDCOLUMNS( SUMMARIZE(TEMP_WQ, TEMP_WQ[Answer], TEMP_WQ[Customer_ID]), "@LatestDate", CALCULATE(MAX(TEMP_WQ[Activity_Date])) ) VAR FilteredTable = NATURALINNERJOIN( TEMP_WQ, LatestPerCustomerAnswer ) RETURN SUMX(FilteredTable, FilteredTable[TotalAnswer])
度量细节说明
- LatestPerCustomerAnswer:通过
SUMMARIZE生成所有Answer+Customer_ID的唯一组合,再用CALCULATE(MAX(...))计算每组的最新活动日期,得到包含分组键和对应最新日期的临时表。 - FilteredTable:用
NATURALINNERJOIN关联原表和临时表,只保留每个分组中对应最新日期的行,彻底去除重复的用户-答案记录。 - SUMX:对筛选后的表求和,确保只计算每个用户对应每个Answer的最新记录的TotalAnswer,同时会自动响应DimDate的筛选(比如选择某时间段时,只计算该时间段内的最新记录)。
同期对比适配方案
如果需要基于DimDate做同期对比(如同比),只需确保DimDate与TEMP_WQ的Activity_Date建立单向筛选的日期关系,再搭配标准时间智能函数即可,示例同比度量:
Total Measure (YoY) = CALCULATE( [Total Measure], SAMEPERIODLASTYEAR(DimDate[Date]) )
常见问题排查
- 若结果仍有重复,检查
Activity_Date是否包含时间部分:如果有,需确保MAX计算的是精确到秒的最新时间,或用DATEVALUE(Activity_Date)转换为纯日期格式后再取最大值。 - 确认DimDate与TEMP_WQ的日期关系设置正确,避免筛选逻辑冲突。
内容的提问来源于stack exchange,提问作者kenjang cool
相关产品推荐
相关产品推荐

