PowerBI中如何判断每个ID是否存在于所有财年(FY)
解决PowerBI中标记ID是否覆盖所有FY的问题
嘿,我来帮你搞定这个Marker列的需求!你的思路方向是对的,但Summarize更多是用来生成汇总表的,直接做计算列的话,用DAX的上下文函数会更直接。
核心思路
我们需要判断每个ID是否包含了表中所有不同的FY值:
- 先算出整个数据集里一共有多少种唯一的FY(这里是2种:TY和LY)
- 再算出每个ID对应的唯一FY数量
- 对比这两个数值,相等就标记"y",否则标记"n"
具体DAX公式(新建计算列)
直接在你的数据表中新建一个计算列,输入以下公式:
Marker = VAR TotalFYCount = CALCULATE(DISTINCTCOUNT('data'[FY]), ALL('data')) VAR ID_FYCount = CALCULATE(DISTINCTCOUNT('data'[FY]), ALLEXCEPT('data', 'data'[ID])) RETURN IF(TotalFYCount = ID_FYCount, "y", "n")
公式解释
TotalFYCount:用ALL('data')清除所有筛选上下文,计算整个表中FY的唯一值数量(这里结果是2)ID_FYCount:用ALLEXCEPT('data', 'data'[ID])保留当前行的ID筛选,清除其他筛选,计算该ID对应的FY唯一值数量- 最后用
IF判断两个数值是否相等,返回对应的标记
验证结果
用你的示例数据测试,结果会完全符合预期:
| ID | Month | FY | Marker |
|---|---|---|---|
| A | 1 | TY | y |
| A | 2 | TY | y |
| A | 1 | LY | y |
| B | 1 | TY | n |
| B | 2 | TY | n |
补充:用Summarize的替代方案
如果你坚持想用Summarize的思路,可以先创建一个汇总表:
ID_FY_Summary = SUMMARIZE( 'data', 'data'[ID], "FY_Count", DISTINCTCOUNT('data'[FY]), "Total_FY", CALCULATE(DISTINCTCOUNT('data'[FY]), ALL('data')) )
然后在原表中新建计算列,用LOOKUPVALUE关联汇总表的结果:
Marker = VAR ID_FYCount = LOOKUPVALUE('ID_FY_Summary'[FY_Count], 'ID_FY_Summary'[ID], 'data'[ID]) VAR TotalFY = LOOKUPVALUE('ID_FY_Summary'[Total_FY], 'ID_FY_Summary'[ID], 'data'[ID]) RETURN IF(ID_FYCount = TotalFY, "y", "n")
不过这种方法需要额外维护一个汇总表,不如直接用第一种计算列的方式简洁。
内容的提问来源于stack exchange,提问作者PV8
相关产品推荐
相关产品推荐

