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

DIVIDE(DAX)跨表计算结果异常的技术求助

DAX写法修正方案

问题根源

你的DAX直接对两个事实表做SUM后除法,会因为Date一对多关系下的筛选上下文不匹配,导致数据被重复累加——两个表都按Date关联,但每个Date对应5个Building,跨表聚合时无法自动对齐Building维度,最终计算出的比率偏差极大。

修正后的DAX写法

方案1:按Date+Building粒度聚合后关联计算

Avg Allocated Utilization % = 
VAR UtilizationByBuilding = 
    SUMMARIZE(
        'Utilization Report',
        'Utilization Report'[Date],
        'Utilization Report'[Building],
        "Total_People", SUM('Utilization Report'[Average Person Count])
    )
VAR CapacityByBuilding = 
    SUMMARIZE(
        'Capacity and Allocation',
        'Capacity and Allocation'[Date],
        'Capacity and Allocation'[Building],
        "Total_Allocated", SUM('Capacity and Allocation'[Allocated])
    )
VAR CombinedData = 
    NATURALLEFTOUTERJOIN(UtilizationByBuilding, CapacityByBuilding)
RETURN
    DIVIDE(
        SUMX(CombinedData, [Total_People]),
        SUMX(CombinedData, [Total_Allocated]),
        0
    )
  • 逻辑:先分别在两个表中按「日期+建筑」分组聚合数据,再将两组数据按相同维度关联,最后计算总人数与总分配量的比率,彻底避免跨表直接SUM的重复计算问题。

方案2:用ALLEXCEPT锁定筛选上下文(适用于有独立Building维度表的星型模型)

Avg Allocated Utilization % = 
DIVIDE(
    CALCULATE(SUM('Utilization Report'[Average Person Count]), ALLEXCEPT('Utilization Report', 'Building'[Building], 'Date'[Date])),
    CALCULATE(SUM('Capacity and Allocation'[Allocated]), ALLEXCEPT('Capacity and Allocation', 'Building'[Building], 'Date'[Date])),
    0
)
  • 逻辑:通过ALLEXCEPT强制保留「建筑+日期」的筛选上下文,让两个表的聚合都严格按每个建筑每天的粒度计算,确保分子分母的统计维度完全匹配。

额外调整说明

如果你的需求是每日每个建筑利用率的平均值(而非总人数/总分配量的整体比率),将方案1的最后一步改为:

RETURN
    AVERAGEX(
        CombinedData,
        DIVIDE([Total_People], [Total_Allocated], 0)
    )

前置检查

确保两个事实表中的Building字段值完全一致(包括大小写、空格、特殊字符),否则维度关联会失效,导致数据缺失或计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:25:18