如何判断是否仅Campaign切片器被过滤并切换DAX度量值
DAX度量值动态切换解决方案
需求说明
现有两张表:Campaigns和RangeCampaigns,已定义两个度量值:
- Measure 1:基于
Campaigns表计算总计 - Measure 2:基于
RangeCampaigns表计算总计
需实现逻辑:
- 仅当仅过滤Campaign切片器(无其他筛选器生效)时,显示Measure 1
- 未过滤Campaign切片器,或同时过滤Campaign与其他筛选器时,显示Measure 2
现有代码问题
当前代码仅判断Campaign列是否被过滤,未检测是否存在其他筛选器。因此过滤range_group等列时,无法触发切换到Measure 2,不符合需求。
现有代码:
testCode = IF ( ISFILTERED('Campaign Table'[campaign]) = TRUE(), SUMX ( SUMMARIZE ( range_plans, range_plans[branch] ,range_plans[range_name], range_plans[number_bays]), range_plans[number_bays] ), [Total Avg Bays])
解决方案
通过动态获取当前所有被筛选的列,判断是否仅Campaign列被过滤,以此决定显示对应度量值。修改后的DAX代码如下:
testCode = VAR FilteredColumns = COLUMNS(ALLSELECTED()) VAR OnlyCampaignFiltered = ISFILTERED('Campaign Table'[campaign]) && COUNTROWS(FilteredColumns) = 1 && CONTAINS(FilteredColumns, [Value], "'Campaign Table'[campaign]") RETURN IF(OnlyCampaignFiltered, -- Measure 1:基于Campaigns表的总计逻辑 SUMX ( SUMMARIZE ( range_plans, range_plans[branch] ,range_plans[range_name], range_plans[number_bays]), range_plans[number_bays] ), -- Measure 2:基于RangeCampaigns表的总计逻辑 [Total Avg Bays] )
代码逻辑说明
FilteredColumns:通过COLUMNS(ALLSELECTED())获取当前筛选上下文中所有被筛选的列名列表OnlyCampaignFiltered:同时满足三个条件才触发Measure 1:ISFILTERED('Campaign Table'[campaign]):确认Campaign列已被过滤COUNTROWS(FilteredColumns) = 1:当前仅存在1个被筛选的列CONTAINS(FilteredColumns, [Value], "'Campaign Table'[campaign]"):这个唯一被筛选的列就是Campaign列
- 最终根据
OnlyCampaignFiltered的布尔值,切换显示对应的度量值
内容的提问来源于stack exchange,提问作者jcoke
相关产品推荐
相关产品推荐

