基于DAX实现生产计划与实际产量匹配率计算求助
DAX计算计划与生产执行的匹配率解决方案
1. 先处理表格关联逻辑
两个表的关联维度是「日期(DateProg/DateProduction)、Shift、SKU」,先确保这三个字段的格式完全一致(比如日期格式统一、Shift的文本大小写一致、SKU编码无空格)。如果不想在模型里建硬关联(避免多对多冲突),直接在DAX计算里做动态关联即可。
2. 计算实际执行产量(QtyExecuted)
如果生产执行表是明细行(每一行对应一个产出),用COUNTROWS统计;如果表本身有产量字段,直接用SUM求和。下面是动态关联的DAX代码:
QtyExecuted = CALCULATE( COUNTROWS('Production Table'), -- 若有产量字段,替换为SUM('Production Table'[实际产量字段]) FILTER( 'Production Table', 'Production Table'[DateProduction] = 'Planning Table'[DateProg] && 'Production Table'[Shift] = 'Planning Table'[Shift] && 'Production Table'[SKU] = 'Planning Table'[SKU] ) )
3. 计算匹配率(%Adherency)
核心逻辑是实际产量除以计划产量,必须处理计划产量为0的情况,避免报错:
%Adherency = VAR 实际产量 = [QtyExecuted] VAR 计划产量 = 'Planning Table'[QtyProg] RETURN IF( 计划产量 = 0, BLANK(), -- 若需求要求计划产量为0时显示0%,可替换为0 DIVIDE(实际产量, 计划产量, 0) * 100 )
4. 应对全维度汇总场景(如矩阵报表)
如果要展示所有维度组合(包括计划有但实际无产出、实际有但无计划的情况),需先建立独立的维度表:日期维度、班次维度、SKU维度,再将计划和生产表关联到这些维度表。之后用以下DAX计算全量数据:
全量实际产量
Total QtyExecuted = CALCULATE( COUNTROWS('Production Table'), TREATAS( SUMMARIZE('Planning Table', 'Planning Table'[DateProg], 'Planning Table'[Shift], 'Planning Table'[SKU]), 'Production Table'[DateProduction], 'Production Table'[Shift], 'Production Table'[SKU] ) )
全量匹配率
Total %Adherency = VAR 全量实际 = [Total QtyExecuted] VAR 全量计划 = SUM('Planning Table'[QtyProg]) RETURN IF( 全量计划 = 0, BLANK(), DIVIDE(全量实际, 全量计划, 0) * 100 )
样本数据验证示例
举个简单测试场景:
计划表数据:
DateProg Shift SKU QtyProg 2024-05-01 Day A123 100 2024-05-01 Night B456 50 生产执行表数据:A123对应95条明细,B456对应50条明细
用上述DAX计算后,A123的实际产量为95、匹配率95%;B456的实际产量为50、匹配率100%,完全符合期望输出。
内容的提问来源于stack exchange,提问作者Paulo Maciel
相关产品推荐
相关产品推荐

