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

Power BI按小时计算平均误差及总计行修正技术问题

解决Power BI小时级平均误差及总计行计算问题

问题分析

原有度量值存在两个核心问题:

  • 迭代粒度不匹配:VALUES('Fact Table_TIME'[Hour])仅迭代小时维度,但可视化是按日+小时分组,聚合逻辑未适配当前上下文;
  • 总计行逻辑错误:未区分常规行(日/小时分组)和总计行的计算逻辑,导致总计返回的是所有小时的误差率平均,而非列中显示值的平均。

修正后的度量值代码

Measure_1 = 
// 1. 计算当前日+小时上下文下的小时级误差率
VAR HourlyError = 
    CALCULATE(
        VAR AvgActual = AVERAGE(Data_table_A[实际值列名]) // 替换为Data_table_A中分钟级实际值的列名
        VAR AvgForecast = AVERAGE(Data_table_B[预测值列名]) // 替换为Data_table_B中分钟级预测值的列名
        RETURN
            IF(
                OR(AvgActual <= 0, AvgForecast <= 0),
                BLANK(),
                DIVIDE(ABS(AvgActual - AvgForecast), AvgActual)
            ),
        ALLEXCEPT('Fact Table_Date', 'Fact Table_Date'[Date]),
        ALLEXCEPT('Fact Table_TIME', 'Fact Table_TIME'[Hour])
    )

// 2. 获取全局所有有效小时的误差值,用于总计行计算
VAR AllValidHourlyErrors = 
    CALCULATETABLE(
        SELECTCOLUMNS(
            CROSSJOIN(VALUES('Fact Table_Date'[Date]), VALUES('Fact Table_TIME'[Hour])),
            "@Error", HourlyError
        ),
        REMOVEFILTERS()
    )

// 3. 判断是否为总计行,返回对应结果
VAR IsTotalRow = 
    ISINSCOPE('Fact Table_Date'[Date]) = FALSE && ISINSCOPE('Fact Table_TIME'[Hour]) = FALSE

RETURN
    IF(
        IsTotalRow,
        AVERAGEX(FILTER(AllValidHourlyErrors, NOT(ISBLANK([@Error]))), [@Error]),
        HourlyError
    )

代码说明

  • 小时级误差计算:通过CALCULATE结合ALLEXCEPT锁定当前日和小时上下文,先计算该小时内分钟级数据的实际值、预测值平均值,再计算误差率;
  • 总计行处理:用ISINSCOPE判断是否处于总计上下文,若是则计算所有有效(非空)小时误差值的平均,完全匹配“总计显示列的平均值”的要求;
  • 无效数据过滤:当实际值或预测值≤0时返回空值,排除无效数据对计算的干扰。

使用注意事项

  • 替换代码中的Data_table_A[实际值列名]和Data_table_B[预测值列名]为数据表中对应的分钟级数值列;
  • 确保Fact_table_Date、Fact_table_Time与两个数据表的关联关系正确(日期表关联日期字段,时间表关联小时字段)。

内容的提问来源于stack exchange,提问作者Sultry T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:25:06