用于MAPE的Power BI表中的总计不正确

时间:2020-01-21 14:22:51

标签: powerbi dax

我对Power BI还是陌生的,并且一直在为表格中的总计问题苦苦挣扎。

我正在尝试使用以下计算方法来计算平均平均百分比误差(MAPE): [ABS(实际-预测)/实际]

下面是我的数据集:

MAPE_Dataset

“ MAPEX”列中的总数实际上是“ AbsErr” /“实际”列中的总数之和:(1457.27 / 2786.27 = 0.52)。

我实际上需要显示的是“ MAPEX”中的值之和,总计为5.88。

“ MAPEX”列是具有以下定义的度量:

MAPEX = DIVIDE([AbsErr], sum(CUBE_PeriodicData[Actuals]),0)

我不需要在表格的“总计”行中显示正确的总计,可以将其作为卡片放置在报表的其他位置,我只想知道DAX中是否有我要的功能不知道哪个会垂直汇总列中的值?

3 个答案:

答案 0 :(得分:1)

Seymour的回答看起来不错,但我想补充一点,在这种情况下粒度很重要。

假设您拥有this之类的星型模式,那么可以很容易地使用以下公式定义度量“总预测”,“总实际”,“绝对误差”和“绝对百分比误差”。

Total Forecast            = SUM ( Forecast[Forecast] )
Total Actual              = SUM ( Actual[Actual] )
Absolute Error            = ABS ( [Total Forecast] - [Total Actual] )
Absolute Percentage Error = DIVIDE ( [Absolute Error], [Total Actual] )

这是到目前为止您会得到的。

Result 1

在这里,您正在询问如何计算绝对百分比误差之和。

根据定义,“绝对百分比误差”显示的是“绝对误差”除以“总实际值”的值。与下钻级别无关。因此,总和显示为0.52,即绝对误差(1,457.27)除以总实际值(2,786.27)。如果希望在总计层次上进行不同的计算,则需要显式实现此逻辑。

您的要求将更明确地陈述如下:

  1. 计算每个项目名称,年份和月份的绝对百分比误差值
  2. 然后添加它们

实现此逻辑所需的功能是SUMX。另外,您可以显式使用SUMMARIZE来确保您要以特定的粒度计算绝对百分比误差。

MAPEX = SUMX (
    SUMMARIZE (
        Forecast,
        'Product'[ItemName],
        'Calendar'[Year],
        'Calendar'[Month]
    ),
    [Absolute Percentage Error]
)

Result 2

到目前为止,我一直在强调粒度。这是因为,如果您不了解粒度,在某些情况下结果可能看起来很奇怪。

在上图中,MAPEX看起来与“绝对百分比误差”相同,除了总计。但是,如果您按季度而不是月份向下钻取,则会发现完全不同。

Result 3

绝对百分比误差显示的是绝对误差与实际总水平在季度之间的商,而MAPEX仍在总结每月的绝对百分比误差值,即使是月份没有显示在表格中。

所以,我的最后一句话是,每当您发明一种新的度量标准(例如MAPEX)时,您总是需要问问自己,对于每种可能的粒度,它是否有意义。

答案 1 :(得分:0)

解决此问题的一种方法是使用标题为MAPEX的自定义列,而不是进行计算的度量。如果出于特殊原因需要使用DAX,请随时告诉我,我也许可以找出解决方法。

列= ABS(([Actuals]-[Forecast])/ [Actuals])

编辑:以防万一,创建新列的方式是在视图标签中使用此按钮。

Add New Column

或者,您可以在看起来对我有用的查询编辑器中创建自定义列。

enter image description here

答案 2 :(得分:0)

一起去

VAR _mytable = SELECTCOLUMNS(事实表,“ MAPE”,ABS(实际-预测)/实际)) 返回 Sumx(_mytable,[MAPE])