DAX查询返回不符合Plant No重复过滤条件的行问题求助
问题排查与解决办法
根因分析
原代码中的COUNT('WO'[Plant No]) >=2是计算整个日期过滤范围内所有Plant No的总条目数,而非每个Plant No单独的出现次数。只要日期范围内总条目数≥2,所有符合日期条件的行都会被返回,这就是为什么大部分结果仅满足日期过滤,未达到Plant No重复≥2次的要求。
解决思路
先筛选出在目标日期范围内出现≥2次的Plant No,再提取这些Plant No对应的所有符合日期条件的记录。
修正后的DAX代码
使用变量预计算符合条件的Plant No,性能更优:
EVALUATE VAR ValidPlantNos = SUMMARIZE( FILTER( 'WO', 'WO'[Raised Date] >= NOW() - 365 && 'WO'[Raised Date] <= NOW() + TIME(10, 0, 0) ), 'WO'[Plant No], "TotalEntries", COUNTROWS('WO') ) VAR FilteredPlantNos = SELECTCOLUMNS( FILTER(ValidPlantNos, [TotalEntries] >= 2), "Plant No", 'WO'[Plant No] ) RETURN CALCULATETABLE( SELECTCOLUMNS( 'WO', "Raised Date", 'WO'[Raised Date], "Address", 'WO'[WO Address], "Plant No", 'WO'[Plant No], "Work Order", 'WO'[WO] ), 'WO'[Raised Date] >= NOW() - 365, 'WO'[Raised Date] <= NOW() + TIME(10, 0, 0), 'WO'[Plant No] IN FilteredPlantNos )
替代写法(行级计算)
如果不需要优先考虑性能,也可以直接在过滤条件中计算每个Plant No的出现次数:
EVALUATE CALCULATETABLE( SELECTCOLUMNS( 'WO', "Raised Date", 'WO'[Raised Date], "Address", 'WO'[WO Address], "Plant No", 'WO'[Plant No], "Work Order", 'WO'[WO] ), 'WO'[Raised Date] >= NOW() - 365, 'WO'[Raised Date] <= NOW() + TIME(10, 0, 0), CALCULATE( COUNTROWS('WO'), ALLEXCEPT('WO', 'WO'[Plant No]), 'WO'[Raised Date] >= NOW() - 365, 'WO'[Raised Date] <= NOW() + TIME(10, 0, 0) ) >= 2 )
验证方式
运行修正后的代码后,可将结果导出到Excel,按Plant No分组统计出现次数,确认所有返回的Plant No出现次数均≥2。
内容的提问来源于stack exchange,提问作者Jack_Johnson
相关产品推荐
相关产品推荐

