Power BI中创建复杂聚合度量:首检与总合格率看板实现
解决方案:使用DAX度量值实现动态合格率计算
由于PowerQuery属于数据预处理环节,无法动态响应切片器的多选平均需求,推荐使用DAX度量值来实现,以下是具体实现步骤:
假设前提
TestData表中PassFail字段为数值型:1表示合格,0表示不合格;若为布尔型(True/False),可将代码中的MIN(TestData[PassFail])替换为MIN(INT(TestData[PassFail]))。
1. 首检合格率(1stPassYield)
该度量值先按WorkOrder+TaskID分组判断每组是否合格(组内只要有不合格则整组不合格),再根据切片器状态返回对应结果:单选工单时显示该工单的首检合格率,多选时返回多个工单的合格率平均值。
1stPassYield = VAR TaskLevelResults = SUMMARIZE( TestData, TestData[WorkOrder], TestData[TaskID], "TaskPass", MIN(TestData[PassFail]) // 取组内最低值,存在不合格则标记为0 ) VAR WorkOrderLevelYield = ADDCOLUMNS( VALUES(TestData[WorkOrder]), "WOYield", DIVIDE( CALCULATE(COUNTROWS(FILTER(TaskLevelResults, [TaskPass] = 1))), CALCULATE(COUNTROWS(TaskLevelResults)), 0 // 除数为0时返回0 ) ) RETURN IF( HASONEVALUE(TestData[WorkOrder]), MAXX(WorkOrderLevelYield, [WOYield]), // 单选时返回当前工单的合格率 AVERAGEX(WorkOrderLevelYield, [WOYield]) // 多选时返回合格率平均值 )
2. 总合格率(TotalPassYield)
该度量值先判断每个WorkOrder下所有TaskID组是否全合格(只要有一组不合格则工单不合格),再根据切片器状态返回结果:单选时显示该工单的合格状态(100%或0%),多选时返回合格工单的占比(即多个工单合格率的平均值)。
TotalPassYield = VAR TaskLevelResults = SUMMARIZE( TestData, TestData[WorkOrder], TestData[TaskID], "TaskPass", MIN(TestData[PassFail]) ) VAR WorkOrderPassStatus = ADDCOLUMNS( VALUES(TestData[WorkOrder]), "WOIsPass", IF( CALCULATE(MIN(TaskLevelResults[TaskPass])) = 1, 1, 0 ) ) RETURN IF( HASONEVALUE(TestData[WorkOrder]), MAXX(WorkOrderPassStatus, [WOIsPass]), // 单选时返回工单是否全合格 AVERAGEX(WorkOrderPassStatus, [WOIsPass]) // 多选时返回合格工单占比 )
使用说明
- 将上述两个度量值添加到Power BI模型中;
- 拖入卡片视觉对象,选择对应的度量值,设置格式为百分比;
- 添加
WorkOrder字段作为切片器,即可实现单选显示对应工单数值、多选取平均值的需求。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

