如何将指定SQL转换为DAX?请求修正DAX过滤逻辑错误
SQL转DAX过滤逻辑修正需求
我已经实现了SUM求和的自定义度量值[Total Outstanding],但将以下SQL语句转换为DAX时,过滤逻辑无法正确生效,请求协助修正:
SQL原代码
select SUM(amount) from TABLE where BusinessDate = '2023-02-11' OR (Segment = 'General' and Days_Without_Payments < 210) OR (Segment = 'Enterprise' and Days_Without_Payments < 1215) OR (Segment = 'House' and Days_Without_Payments < 1945)
我尝试编写的DAX代码
Measure = CALCULATE([Total Outstanding], FILTER(VALUES(BILBL_WO[Date]),BILBL_WO[Date]=MAX(BILBL_WO[Date])), AND(BILBL_WO[Days_Without_Payments] < 210, BILBL_WO[Segment] = "General") || AND(BILBL_WO[Days_Without_Payments] < 1215, BILBL_WO[Segment] = "Enterprise") || AND(BILBL_WO[Days_Without_Payments] < 1945, BILBL_WO[Segment] = "House") )
修正后的DAX代码及说明
你的DAX核心问题是:CALCULATE的多筛选参数默认是AND逻辑,但你需要的是OR组合,必须把所有OR条件整合到同一个筛选容器中;另外原SQL的固定日期条件和你用MAX(BILBL_WO[Date])的动态逻辑需要明确对齐。
方案1:严格匹配SQL固定日期逻辑
修正后的度量值 = CALCULATE( [Total Outstanding], FILTER( ALL(BILBL_WO), -- 若要保留部分上下文筛选,可替换为ALLSELECTED(BILBL_WO) BILBL_WO[BusinessDate] = DATE(2023,2,11) || (BILBL_WO[Segment] = "General" && BILBL_WO[Days_Without_Payments] < 210) || (BILBL_WO[Segment] = "Enterprise" && BILBL_WO[Days_Without_Payments] < 1215) || (BILBL_WO[Segment] = "House" && BILBL_WO[Days_Without_Payments] < 1945) ) )
方案2:保留原DAX的动态最大日期逻辑
修正后的度量值 = CALCULATE( [Total Outstanding], FILTER( ALL(BILBL_WO), BILBL_WO[Date] = MAX(BILBL_WO[Date]) || (BILBL_WO[Segment] = "General" && BILBL_WO[Days_Without_Payments] < 210) || (BILBL_WO[Segment] = "Enterprise" && BILBL_WO[Days_Without_Payments] < 1215) || (BILBL_WO[Segment] = "House" && BILBL_WO[Days_Without_Payments] < 1945) ) )
关键提示
- 用
FILTER包裹所有OR条件,确保逻辑和SQL完全一致 ALL(BILBL_WO)用于清除表的上下文筛选,如果你需要保留切片器等外部筛选,可替换为ALLSELECTED(BILBL_WO)或仅清除特定列的筛选(如ALL(BILBL_WO[BusinessDate], BILBL_WO[Segment]))
内容的提问来源于stack exchange,提问作者Nauman Khan
相关产品推荐
相关产品推荐

