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

PowerBI中如何判断每个ID是否存在于所有财年(FY)

解决PowerBI中标记ID是否覆盖所有FY的问题

嘿,我来帮你搞定这个Marker列的需求!你的思路方向是对的,但Summarize更多是用来生成汇总表的,直接做计算列的话,用DAX的上下文函数会更直接。

核心思路

我们需要判断每个ID是否包含了表中所有不同的FY值:

  1. 先算出整个数据集里一共有多少种唯一的FY(这里是2种:TY和LY)
  2. 再算出每个ID对应的唯一FY数量
  3. 对比这两个数值,相等就标记"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判断两个数值是否相等,返回对应的标记

验证结果

用你的示例数据测试,结果会完全符合预期:

IDMonthFYMarker
A1TYy
A2TYy
A1LYy
B1TYn
B2TYn

补充:用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:58:10