如何用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
相关产品推荐
相关产品推荐

