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

如何用DAX提取同一ID对应不同Program的行?PowerBI技术求助

解决PowerBI中提取同一ID对应不同Program行的问题

嘿,我明白你要实现的需求——找出那些同一个ID关联了多个不同Program的记录,比如ID1对应Grocery和Supermarket,ID3对应Retail和Supermarket这类情况。先说说你原来的DAX代码为什么没达到预期:

你的dupecounter计算列逻辑是统计当前行Program之外的同一ID记录数,但这个逻辑存在歧义:比如如果一个ID有3个不同Program,每个行的dupecounter会是2;如果ID只有1个Program,值是0。理论上筛选dupecounter > 0能得到目标行,但这个方式不够直观,还容易因为上下文筛选规则出错。

下面给你两种更清晰可靠的解决方案:

方法一:创建计算列标记目标行

直接给每一行添加一个布尔标记,判断该行所属的ID是否关联了多个不同的Program:

HasMultiplePrograms = 
VAR IDProgramCount = CALCULATE(
    DISTINCTCOUNT('Data'[Program]),
    ALLEXCEPT('Data', 'Data'[ID]) // 仅保留当前ID的上下文,忽略其他筛选条件
)
RETURN IDProgramCount > 1

之后你只需要筛选HasMultiplePrograms为TRUE的行,就能得到所有符合条件的记录。

方法二:直接生成筛选后的表(适合创建新表或度量值场景)

如果你需要直接生成包含目标行的独立表,可以用这段DAX:

FilteredRows = 
// 第一步:先找出所有关联了多个Program的ID
VAR IDsWithMultiplePrograms = 
    SELECTCOLUMNS(
        FILTER(
            SUMMARIZE('Data', 'Data'[ID], "ProgramCount", DISTINCTCOUNT('Data'[Program])),
            [ProgramCount] > 1
        ),
        "TargetID", 'Data'[ID]
    )
// 第二步:从原表中筛选出这些ID的所有行
RETURN
    FILTER('Data', 'Data'[ID] IN IDsWithMultiplePrograms)

这个方法先通过SUMMARIZE统计每个ID的Program唯一值数量,筛选出数量大于1的ID,再用这些ID过滤原表,精准得到你需要的记录。

这两种方法逻辑更直接,也更容易维护,你可以根据自己的使用场景选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:37:59