如何将Dim_PERIMETRE筛选条件整合至现有DAX查询?
DAX筛选条件整合方案
要把Dim_PERIMETRE[Périmètre] = "Client"的筛选条件整合到现有代码里,核心是把这个筛选注入到[RATIO]度量值的计算上下文里,下面是两种可行的修改方式:
方式一:直接在计算RATIO时添加筛选(推荐)
这种方式直接控制度量值的计算范围,确保每个日期的RATIO都是基于"Client"维度统计的,修改点在SUMMARIZE的"RATIO"定义部分:
EVALUATE VAR StartDate = TODAY () - 84 VAR EndDate = TODAY () - 3 VAR RATIO_By_Date_Table = FILTER ( SUMMARIZE ( FILTER ( Dim_CALENDRIER, // 优化:日期类型直接比较,无需转字符串 Dim_CALENDRIER[Date] >= StartDate && Dim_CALENDRIER[Date] <= EndDate ), Dim_CALENDRIER[Date], Dim_CALENDRIER[Semaine], 'Dim_CALENDRIER'[Date.Key0], // 用CALCULATE给RATIO添加维度筛选 "RATIO", CALCULATE([RATIO], Dim_PERIMETRE[Périmètre] = "Client") ), [RATIO] <> BLANK () ) RETURN SELECTCOLUMNS ( TOPN ( COUNTROWS ( RATIO_By_Date_Table ), RATIO_By_Date_Table, Dim_CALENDRIER[Date], ASC ), "Date", Dim_CALENDRIER[Date], "Semaine", Dim_CALENDRIER[Semaine], "RATIO_NJSR", ROUND ( [RATIO], 2 ) )
方式二:用CALCULATETABLE包裹整个统计逻辑
如果需要给整个RATIO_By_Date_Table都加上这个维度筛选,可以用CALCULATETABLE来包裹SUMMARIZE部分:
EVALUATE VAR StartDate = TODAY () - 84 VAR EndDate = TODAY () - 3 VAR RATIO_By_Date_Table = FILTER ( CALCULATETABLE( SUMMARIZE ( FILTER ( Dim_CALENDRIER, Dim_CALENDRIER[Date] >= StartDate && Dim_CALENDRIER[Date] <= EndDate ), Dim_CALENDRIER[Date], Dim_CALENDRIER[Semaine], 'Dim_CALENDRIER'[Date.Key0], "RATIO", [RATIO] ), // 在这里添加全局维度筛选 Dim_PERIMETRE[Périmètre] = "Client" ), [RATIO] <> BLANK () ) RETURN SELECTCOLUMNS ( TOPN ( COUNTROWS ( RATIO_By_Date_Table ), RATIO_By_Date_Table, Dim_CALENDRIER[Date], ASC ), "Date", Dim_CALENDRIER[Date], "Semaine", Dim_CALENDRIER[Semaine], "RATIO_NJSR", ROUND ( [RATIO], 2 ) )
额外优化说明
原代码里用FORMAT(StartDate, "YYYY-MM-DD")转字符串后和日期列比较是多余的,因为StartDate和Dim_CALENDRIER[Date]都是日期类型,直接比较性能更好也更准确,上面的代码已经做了这个优化。
内容的提问来源于stack exchange,提问作者K_mns
相关产品推荐
相关产品推荐

