You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断是否仅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]
    )

代码逻辑说明

  1. FilteredColumns:通过COLUMNS(ALLSELECTED())获取当前筛选上下文中所有被筛选的列名列表
  2. OnlyCampaignFiltered:同时满足三个条件才触发Measure 1:
    • ISFILTERED('Campaign Table'[campaign]):确认Campaign列已被过滤
    • COUNTROWS(FilteredColumns) = 1:当前仅存在1个被筛选的列
    • CONTAINS(FilteredColumns, [Value], "'Campaign Table'[campaign]"):这个唯一被筛选的列就是Campaign列
  3. 最终根据OnlyCampaignFiltered的布尔值,切换显示对应的度量值

内容的提问来源于stack exchange,提问作者jcoke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:40:26