Power BI使用UNION/SUMMARIZE/FILTER生成新表时Last Month字段汇总错误求助
问题分析与解决方案
你的DAX表达式中,ADDCOLUMNS里的COUNT('Users'[Name])没有针对当前行的Account做筛选,因此返回的是整个Users表的用户总数,而非对应Account的上月用户数。同时UNION后的两个汇总表字段不匹配(第一部分无Last Month,第二部分无Total Units),导致后续补全字段时无法关联上下文。
以下是两种可行的修正方案:
方案一:在ADDCOLUMNS中添加上下文筛选
New Table = ADDCOLUMNS( UNION( // 从Purchased表汇总符合条件的Account与Total Units SUMMARIZE( FILTER('Purchased', 'Purchased'[Units] > 1), 'Purchased'[Account], "Total Units", SUM('Purchased'[Units]) ), // 从Users表汇总上月的Account与对应用户数 SUMMARIZE( FILTER('Users', 'Users'[Start Time].[MonthNo] = EOMONTH(TODAY(), -1)), 'Users'[Account], "Last Month", COUNT('Users'[Name]) ) ), // 针对当前Account计算上月用户数 "Last Month", CALCULATE( COUNT('Users'[Name]), FILTER( 'Users', 'Users'[Account] = EARLIER([Account]) && 'Users'[Start Time].[MonthNo] = EOMONTH(TODAY(), -1) ) ), // 补全Total Units的缺失值(无对应数据时返回空) "Total Units", CALCULATE( SUM('Purchased'[Units]), FILTER( 'Purchased', 'Purchased'[Account] = EARLIER([Account]) && 'Purchased'[Units] > 1 ) ) )
方案二:先提取所有Account再分别计算指标(逻辑更清晰)
New Table = VAR AllAccounts = DISTINCT( UNION( SELECTCOLUMNS(FILTER('Purchased', 'Purchased'[Units] > 1), "Account", 'Purchased'[Account]), SELECTCOLUMNS(FILTER('Users', 'Users'[Start Time].[MonthNo] = EOMONTH(TODAY(), -1)), "Account", 'Users'[Account]) ) ) RETURN ADDCOLUMNS( AllAccounts, "Total Units", CALCULATE( SUM('Purchased'[Units]), 'Purchased'[Account] = EARLIER([Account]), 'Purchased'[Units] > 1 ), "Last Month", CALCULATE( COUNT('Users'[Name]), 'Users'[Account] = EARLIER([Account]), 'Users'[Start Time].[MonthNo] = EOMONTH(TODAY(), -1) ) )
关键说明
- 使用
EARLIER([Account])获取当前行的Account值,作为筛选条件,确保计算范围限定在当前Account。 CALCULATE会修改筛选上下文,结合筛选条件精准提取对应Account的目标数据。
内容的提问来源于stack exchange,提问作者MicrobicTiger
相关产品推荐
相关产品推荐

