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

DAX实现计划与执行生产汇总表的合并问题求助

问题描述

需要合并tbPlan(计划生产表)与tbExecuted(实际执行表),生成包含Date、SKU、Shift、Plan、Executed的汇总表,无对应数据时显示0。

表结构与示例数据

  • tbPlan字段:Date、SKU、Shift、Qty

    DateSKUShiftQty
    1/1/2023A110
    1/1/2023A25
    1/1/2023B110
  • tbExecuted字段:Date、SKU、Shift、Qty

    DateSKUShiftQty
    1/1/2023A110
    2/1/2023A15
    1/1/2023B15
    1/1/2023B25

尝试过的方法

使用NATURALLEFTOUTERJOIN和NATURALINNERJOIN均无法满足需求:

  • NATURALLEFTOUTERJOIN仅保留左表的所有行,右表独有的行(比如2/1/2023 A 1)无法纳入结果
  • NATURALINNERJOIN只保留两表交集的行,过滤掉所有单边存在的行

尝试的DAX代码:

FACT-TabelaAderencia =        
VAR A = 
    SELECTCOLUMNS(
        summProducao
       ;"Data"; summProducao[DataProducao]+0
       ;"SKU"; Upper(summProducao[SKU])
       ;"Turno"; summProducao[Turno]*1
       ;"Produzido"; summProducao[Cargas Produzidas]
    )       
VAR B = 
    SELECTCOLUMNS(
        summPlanejamento
        ;"Data"; summPlanejamento[DataProgramada1]+0
        ;"SKU"; UPPER(summPlanejamento[SKU])
        ;"Turno"; summPlanejamento[Turno]*1
        ;"Planejado"; summPlanejamento[Planejadas] 
    )
VAR Result = NATURALLEFTOUTERJOIN(A; B)  
Return Result  

解决方案

DAX没有直接的全外连接函数,所以需要先构建包含所有唯一Date/SKU/Shift组合的基础键表,再分别关联计划和实际数据,用COALESCE把空值替换为0。

方法一:基于原始表的通用实现

FACT-TabelaAderencia =
// 1. 生成两表所有唯一的Date/SKU/Shift组合
VAR AllKeys =
    DISTINCT(
        UNION(
            SELECTCOLUMNS(tbPlan, "Date", tbPlan[Date], "SKU", tbPlan[SKU], "Shift", tbPlan[Shift]),
            SELECTCOLUMNS(tbExecuted, "Date", tbExecuted[Date], "SKU", tbExecuted[SKU], "Shift", tbExecuted[Shift])
        )
    )
// 2. 关联计划数据,无对应值填0
VAR WithPlan =
    ADDCOLUMNS(
        AllKeys,
        "Plan",
        COALESCE(
            CALCULATE(SUM(tbPlan[Qty]),
                tbPlan[Date] = [Date],
                tbPlan[SKU] = [SKU],
                tbPlan[Shift] = [Shift]
            ),
            0
        )
    )
// 3. 关联实际执行数据,无对应值填0
VAR FinalResult =
    ADDCOLUMNS(
        WithPlan,
        "Executed",
        COALESCE(
            CALCULATE(SUM(tbExecuted[Qty]),
                tbExecuted[Date] = [Date],
                tbExecuted[SKU] = [SKU],
                tbExecuted[Shift] = [Shift]
            ),
            0
        )
    )
RETURN FinalResult

方法二:适配你现有变量的修改版本

如果要沿用你原代码中对summProducao(实际)和summPlanejamento(计划)的字段转换逻辑:

FACT-TabelaAderencia =
// 统一格式化两表的键字段和数值字段
VAR ExecutedClean =
    SELECTCOLUMNS(
        summProducao,
        "Data", summProducao[DataProducao] + 0,
        "SKU", UPPER(summProducao[SKU]),
        "Turno", summProducao[Turno] * 1,
        "Produzido", summProducao[Cargas Produzidas]
    )
VAR PlanClean =
    SELECTCOLUMNS(
        summPlanejamento,
        "Data", summPlanejamento[DataProgramada1] + 0,
        "SKU", UPPER(summPlanejamento[SKU]),
        "Turno", summPlanejamento[Turno] * 1,
        "Planejado", summPlanejamento[Planejadas]
    )
// 生成所有唯一的键组合
VAR AllKeys =
    DISTINCT(
        UNION(
            SELECTCOLUMNS(ExecutedClean, "Data", [Data], "SKU", [SKU], "Turno", [Turno]),
            SELECTCOLUMNS(PlanClean, "Data", [Data], "SKU", [SKU], "Turno", [Turno])
        )
    )
// 关联计划数据
VAR WithPlan =
    ADDCOLUMNS(
        AllKeys,
        "Planejado",
        COALESCE(
            CALCULATE(SUM(PlanClean[Planejado]),
                PlanClean[Data] = [Data],
                PlanClean[SKU] = [SKU],
                PlanClean[Turno] = [Turno]
            ),
            0
        )
    )
// 关联实际数据
VAR FinalResult =
    ADDCOLUMNS(
        WithPlan,
        "Produzido",
        COALESCE(
            CALCULATE(SUM(ExecutedClean[Produzido]),
                ExecutedClean[Data] = [Data],
                ExecutedClean[SKU] = [SKU],
                ExecutedClean[Turno] = [Turno]
            ),
            0
        )
    )
RETURN FinalResult

核心逻辑说明

  • UNION + DISTINCT确保不会遗漏任何单边存在的行,生成完整的键组合表
  • COALESCE直接把无对应数据时的空值替换为0
  • CALCULATE + SUM可以处理同一键有多行数据的情况,自动汇总数量

内容的提问来源于stack exchange,提问作者Paulo Maciel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:25:53