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

如何用DAX筛选指定Campaign下所有Range均为NO的产品?

DAX实现筛选指定Campaign下所有Range均为NO的产品

原始数据

CampaignProductRange
AAppleYES
ABananaNO
ABananaNO
ABananaYES
AGrapesNO
AGrapesNO

需求说明

筛选指定Campaign期间,所有Range记录均为NO的产品(即该产品在对应Campaign下从未出现过Range=YES的记录)。例如Campaign A下,仅Grapes符合要求(Banana存在YES记录,不符合)。

问题现状

使用普通Filter函数会返回所有包含Range=NO的产品(如Banana、Grapes),无法精准筛选出全部记录均为NO的产品。


DAX解决方案

1. 创建计算列标记符合条件的产品

在数据模型中添加计算列,直接标记每个产品-Campaign组合是否符合要求:

IsAllNo = 
VAR CurrentCampaign = [Campaign]
VAR CurrentProduct = [Product]
// 统计当前产品在当前Campaign下的YES记录数
VAR HasYesRecord = 
    CALCULATE(
        COUNTROWS('YourTableName'), // 替换为你的实际表名
        FILTER(
            ALL('YourTableName'),
            'YourTableName'[Campaign] = CurrentCampaign && 
            'YourTableName'[Product] = CurrentProduct && 
            'YourTableName'[Range] = "YES"
        )
    )
// 无YES记录则返回TRUE,否则返回FALSE
RETURN
    IF(HasYesRecord = 0, TRUE(), FALSE())

添加完成后,筛选IsAllNo = TRUE即可得到目标产品。

2. 直接在视觉对象筛选器中使用表达式

无需创建计算列,直接在Power BI视觉对象的高级筛选器中使用以下DAX表达式作为筛选条件,设置为“等于True”:

CALCULATE(
    COUNTROWS('YourTableName'),
    ALLEXCEPT('YourTableName', 'YourTableName'[Campaign], 'YourTableName'[Product]),
    'YourTableName'[Range] = "YES"
) = 0

3. 创建度量值用于动态交互筛选

如果需要配合切片器(如选择不同Campaign)实现动态筛选,创建如下度量值:

AllRangeNo = 
VAR SelectedCampaign = SELECTEDVALUE('YourTableName'[Campaign])
VAR CurrentProduct = SELECTEDVALUE('YourTableName'[Product])
VAR YesRecordCount = 
    CALCULATE(
        COUNTROWS('YourTableName'),
        'YourTableName'[Campaign] = SelectedCampaign,
        'YourTableName'[Product] = CurrentProduct,
        'YourTableName'[Range] = "YES"
    )
RETURN
    IF(YesRecordCount = 0, 1, 0)

使用时,将该度量值添加到视觉对象的筛选器中,设置筛选条件为AllRangeNo = 1即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:55:14