矩阵中DAX度量值Daily Turnover总计计算异常求助
DAX度量值矩阵总计不符合预期的解决方法
当前使用以下DAX度量值计算每日 turnover:
Daily Turnover = VAR applNos = CALCULATETABLE( DISTINCT(combined_apps[appl_appl_no]), combined_apps[table_type] = "TRAN", combined_apps[appl_decision_date] IN VALUES ('calendar'[cal_posted_date]) ) RETURN CALCULATE( SUM(combined_apps[tran_amount]), REMOVEFILTERS('calendar'), combined_apps[appl_appl_no] IN applNos, combined_apps[table_type] = "TRAN" )
将其放入以'calendar'[cal_posted_date]为行的矩阵时,各行计算结果正确,但总计结果不符合预期。需求是:针对'calendar'[cal_posted_date]中的每个日期,先获取该日期下所有table_type为"TRAN"的appl_appl_no,再计算这些appl_appl_no在全部数据中的tran_amount总和。
问题原因
原度量值计算总计行时,VALUES('calendar'[cal_posted_date])会返回日历表中所有日期,导致applNos包含所有日期的TRAN类appl_appl_no,最终计算的是这些所有appl_no的总金额,而非各行结果的累加(同一appl_no可能在多个日期出现,各行会重复计算,但总计只算一次)。
解决方案
方案1:总计为各行结果累加(常规矩阵预期)
使用SUMX迭代每个日期,单独计算每个日期对应的turnover后求和,确保总计行是各行结果的正确累加:
Daily Turnover = SUMX( VALUES('calendar'[cal_posted_date]), VAR applNos = CALCULATETABLE( DISTINCT(combined_apps[appl_appl_no]), combined_apps[table_type] = "TRAN", combined_apps[appl_decision_date] = EARLIER('calendar'[cal_posted_date]) ) RETURN CALCULATE( SUM(combined_apps[tran_amount]), REMOVEFILTERS('calendar'), combined_apps[appl_appl_no] IN applNos, combined_apps[table_type] = "TRAN" ) )
SUMX遍历每个cal_posted_date,对单个日期独立计算对应的turnover- 用
EARLIER('calendar'[cal_posted_date])替代原IN VALUES(...),确保每个迭代仅取当前日期的appl_no - 总计行自动对所有日期的计算结果求和,符合直观预期
方案2:总计为所有日期合并appl_no的总金额(无重复计算)
如果需求是总计行需要计算所有日期的appl_no合并后的总金额(同一appl_no仅计算一次),可以用以下变体:
Daily Turnover = VAR CurrentDates = VALUES('calendar'[cal_posted_date]) VAR allApplNos = CALCULATETABLE( DISTINCT(combined_apps[appl_appl_no]), combined_apps[table_type] = "TRAN", combined_apps[appl_decision_date] IN CurrentDates ) RETURN IF( HASONEVALUE('calendar'[cal_posted_date]), // 单个日期时计算该日期appl_no的总金额 CALCULATE( SUM(combined_apps[tran_amount]), REMOVEFILTERS('calendar'), combined_apps[appl_appl_no] IN CALCULATETABLE( DISTINCT(combined_apps[appl_appl_no]), combined_apps[table_type] = "TRAN", combined_apps[appl_decision_date] IN CurrentDates ), combined_apps[table_type] = "TRAN" ), // 总计行时计算所有日期合并appl_no的总金额 CALCULATE( SUM(combined_apps[tran_amount]), REMOVEFILTERS('calendar'), combined_apps[appl_appl_no] IN allApplNos, combined_apps[table_type] = "TRAN" ) )
内容的提问来源于stack exchange,提问作者Gray Meiring
相关产品推荐
相关产品推荐

