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

PowerBI实现商机按包含/排除指定产品筛选的方案咨询

PowerBI实现商机的包含/排除产品筛选

针对你需要让用户按「包含产品」和「排除产品」筛选商机的需求,下面分两种数据源格式给出具体实现方案:


一、使用原始一对多表(Opportunities + Products)

原始表是一个商机对应多个产品的结构,直接用默认筛选会出现逻辑冲突(比如选了排除Product C,默认筛选会把包含C的商机里的其他产品过滤掉,但我们需要完全排除整个商机),所以需要通过独立切片器+DAX度量值实现:

  1. 创建独立的筛选用产品表
    复制现有的Products表,分别命名为IncludeProducts和ExcludeProducts,这两个表不要和Opportunities建立任何关联。

  2. 添加切片器
    分别用IncludeProducts[Product]和ExcludeProducts[Product]创建两个切片器,命名为「包含产品」和「排除产品」。

  3. 编写DAX度量值判断筛选条件
    创建如下度量值:

符合筛选条件 = 
VAR 选中的包含产品 = VALUES(IncludeProducts[Product])
VAR 选中的排除产品 = VALUES(ExcludeProducts[Product])
VAR 当前商机的所有产品 = CALCULATETABLE(VALUES(Opportunities[Product]), ALLEXCEPT(Opportunities, Opportunities[Opp ID]))
RETURN
// 逻辑:包含所有选中的包含产品,且不包含任何选中的排除产品
IF(
    ISBLANK(选中的包含产品) || COUNTROWS(EXCEPT(选中的包含产品, 当前商机的所有产品)) = 0,
    IF(
        ISBLANK(选中的排除产品) || COUNTROWS(INTERSECT(选中的排除产品, 当前商机的所有产品)) = 0,
        1,
        0
    ),
    0
)
  1. 应用筛选
    将「符合筛选条件」度量值拖到报表级筛选器或可视化筛选器中,设置为「等于1」。

  2. 测试需求
    在「包含产品」切片器选Product A,「排除产品」切片器选Product C,即可得到符合要求的商机(Opp ID=1)。


二、使用宽表格式(每行对应一个商机)

这种格式下每个商机的产品状态是布尔值,实现起来更灵活,分两种方式:

方法1:固定需求快速筛选

如果只是针对「包含Product A且不包含Product C」这个固定需求,直接添加可视化筛选器:

  • 设置Product A = True
  • 同时设置Product C = False
    即可直接得到目标商机。

方法2:动态用户自定义筛选

如果要让用户自由选择包含/排除的产品,步骤如下:

  1. 创建独立产品表
    新建一个ProductList表,包含所有产品名称:

    ProductList = DATATABLE("Product", STRING, {{"Product A"}, {"Product B"}, {"Product C"}})
    

    复制这个表得到ExcludeProductList,两个表都不与宽表关联。

  2. 添加切片器
    用ProductList[Product]做「包含产品」切片器,ExcludeProductList[Product]做「排除产品」切片器。

  3. 编写DAX度量值
    创建如下度量值:

符合筛选条件_宽表 = 
VAR 选中的包含产品 = VALUES(ProductList[Product])
VAR 选中的排除产品 = VALUES(ExcludeProductList[Product])
VAR 当前商机 = SELECTEDVALUE('宽表'[Opp ID])
// 检查所有选中的包含产品是否都为True
VAR 包含检查 = 
    IF(
        ISBLANK(选中的包含产品),
        TRUE(),
        COUNTROWS(
            FILTER(
                选中的包含产品,
                SWITCH(
                    [Product],
                    "Product A", SELECTEDVALUE('宽表'[Product A]),
                    "Product B", SELECTEDVALUE('宽表'[Product B]),
                    "Product C", SELECTEDVALUE('宽表'[Product C])
                ) = TRUE()
            )
        ) = COUNTROWS(选中的包含产品)
    )
// 检查所有选中的排除产品是否都为False
VAR 排除检查 = 
    IF(
        ISBLANK(选中的排除产品),
        TRUE(),
        COUNTROWS(
            FILTER(
                选中的排除产品,
                SWITCH(
                    [Product],
                    "Product A", SELECTEDVALUE('宽表'[Product A]),
                    "Product B", SELECTEDVALUE('宽表'[Product B]),
                    "Product C", SELECTEDVALUE('宽表'[Product C])
                ) = FALSE()
            )
        ) = COUNTROWS(选中的排除产品)
    )
RETURN
IF(包含检查 && 排除检查, 1, 0)
  1. 应用筛选
    将度量值拖到筛选器中设置为「等于1」,用户即可通过切片器自由选择包含和排除的产品。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:45:38