DAX度量求助:忽略关系的计数方法及机器状态与维保统计需求
嘿,这个需求我刚好处理过类似的场景,给你整理两个DAX度量的实现方案,完全支持按日期和Branch分组统计:
1. ActiveMachineCount(统计状态为"ON"的机器数量)
这个度量的核心是要在指定日期范围内,统计有"ON"状态记录的唯一机器数量,同时支持按Branch筛选。
ActiveMachineCount = CALCULATE( DISTINCTCOUNT(MachineHistory[MachID]), -- 锁定状态为ON的记录 MachineHistory[Status] = "ON", -- 将Calendar表的日期上下文映射到MachineHistory的状态日期 TREATAS(VALUES(Calendar[Date]), MachineHistory[StatusDate]) )
关键逻辑说明:
DISTINCTCOUNT(MachineHistory[MachID]):确保同一台机器即使多次切换为ON状态,也只会被统计一次MachineHistory[Status] = "ON":筛选出状态为运行中的机器记录TREATAS(...):把Calendar表的日期筛选上下文(比如选中的年份/月份)同步到MachineHistory的StatusDate字段,保证日期分组统计的正确性- 关于Branch分组:因为Branch字段本身就在MachineHistory表中,当你把Branch拖到视觉对象的行/列标签时,CALCULATE会自动继承Branch的筛选上下文,无需额外处理
2. ServicedMachineCount(统计有维保记录的机器数量)
这个度量需要关联ServiceHistory和MachineHistory来获取Branch信息,同时在指定日期范围内统计有维保记录的唯一机器数量。
ServicedMachineCount = CALCULATE( DISTINCTCOUNT(ServiceHistory[MachID]), -- 将Calendar表的日期上下文映射到ServiceHistory的维保日期 TREATAS(VALUES(Calendar[Date]), ServiceHistory[ServiceDate]), -- 筛选出当前Branch下的机器(利用MachID的表间关系) ServiceHistory[MachID] IN VALUES(MachineHistory[MachID]) )
关键逻辑说明:
DISTINCTCOUNT(ServiceHistory[MachID]):避免同一台机器多次维保被重复统计TREATAS(...):同步Calendar的日期筛选到维保日期,确保只统计指定时间段内有维保记录的机器ServiceHistory[MachID] IN VALUES(MachineHistory[MachID]):因为ServiceHistory没有Branch字段,这里通过MachID的关联关系,只保留当前Branch筛选下的机器维保记录,完美支持Branch分组
使用提示
把这两个度量拖到Power BI的卡片图、柱状图等视觉对象中,再配合Calendar表的Year/Month字段或者MachineHistory表的Branch字段作为行/列标签,就能自动实现按日期或Branch的分组统计了,切片器筛选也能直接生效~
内容的提问来源于stack exchange,提问作者sherifffruitfly
相关产品推荐
相关产品推荐

