按月平均变化来进行季节性预测

问题描述 投票:0回答:1

我有一个看起来像这样的数据表,只不过它持续了大约 3-4 年并且大约有 40,000 行:

卡西德 月年 呼叫已接受 总通话次数
1 2023 年 12 月 1 1
2 2023 年 12 月 0 1
3 2023 年 11 月 1 1
4 2023 年 11 月 1 1
5 2023 年 11 月 1 1
6 2023 年 10 月 0 1
7 2023 年 10 月 0 1
8 2023 年 10 月 0 1
9 2023 年 10 月 1 1
10 2023 年 10 月 0 1

我制定了以下措施:

[% accepted] = DIVIDE(SUM(table1[call_accepted]), SUM(table1[total_call_count])

[% accepted PM] = Calculate([% accepted], DATEADD(datetable[date], -1, MONTH)

[% MoM change] = [% accepted] - [% accepted PM]

有了这些,我可以创建一个看起来像这样的表格:

月年 环比变化百分比
2024 年 1 月 32%
2023 年 12 月 1.03%
2023 年 11 月 5.3%
2023 年 10 月 7%
2023 年 9 月 3.1%
2023 年 8 月 -6%
2023 年 7 月 0.5%
2023 年 6 月 2.23%
2023 年 5 月 8%
2023 年 4 月 10%
2023 年 3 月 1.24%
2023 年 2 月 5.21%
2023 年 1 月 -6.7%
2022 年 12 月 -5.03%
2022 年 11 月 7.3%
2022 年 10 月 3.2%
2022 年 9 月 2.1%
2022 年 8 月 1.4%
2022 年 7 月 2.5%
2022 年 6 月 -5.23%
2022 年 5 月 1.9%
2022 年 4 月 3.6%
2022 年 3 月 4%
2022 年 2 月 9%
2022 年 1 月 3%
2021 年 12 月 3.43%
2021 年 11 月 -1.3%
2021 年 10 月 -2.2%
2021 年 9 月 1.77%
2021 年 8 月 -2.11%
2021 年 7 月 3.1%
2021 年 6 月 -7.25%
2021 年 5 月 4.3%
2021 年 4 月 3.4%
2021 年 3 月 5.1%
2021 年 2 月 3.09%
2021 年 1 月 56%
755f

我的目标是创建一个度量或列来计算每个月的平均 MoM 变化,

例如,对于 2023 年 10 月,它会显示 2021 年 10 月 = -2.2%、2022 年 10 月 = 3.2%、2023 年 10 月 = 7%

(-2.2% + 3.2% + 7%)/3 = 2.67%

我希望它对每个月份名称执行此操作,并根据之前的月份数量进行调整。

另一个问题是,如果您查看图表上的第一个月和最后一个月,对于 2021 年 1 月,没有上个月,对于 2024 年 1 月,没有当前接受的百分比,因此我将返回完整的一个月,而不是更改。我想从计算中排除第一个月和最后一个月。

我一直在使用很多不同的方法来创建变量,甚至成功创建了接受百分比度量的计算列版本,但这是我能够得到的最接近的结果:

% avg MoM change = AVERAGEX(VALUES('Datetable'[MonthYear]), [% MoM change])

如果我只要求月份名称,那么它基本上可以工作并且看起来像这样:

平均环比变化百分比
一月 21.08%
二月 5.77%
三月 3.45%
四月 5.67%
五月 4.73%
六月 -3.41%
七月 2.03%
八月 -2.24%
九月 2.32%
十月 2.67%
十一月 3.77%
十二月 -0.19

问题是,如果我将 Month 更改为 MonthYear,则 [% avg MoM change] 与 [% MoM change] 相同

我需要能够获得每个月的运行平均值,因为我想使用该数字乘以每个月和每年的各种指标,看看季节性结果与实际结果相比如何,并尝试预测未来。

我还需要清除第一个月和最后一个月的计算,因此无论哪个月是数据集当前的第一个月或最后一个月,它们的平均值都是正确的

更新:

在提交之前,Stack Overflow 帮助我发现这两个响应放在一起有可能解决我的问题,但到目前为止我仍然遇到问题。

  1. 可能解决计算问题的回复
  2. 可能解决列表中第一个月和最后一个月问题的回复

我使用第一个链接来创建此度量,但我不断收到错误“调用函数“DATESINPERIOD”时指定的列不是 DATE 类型。不支持此操作”,尽管它的格式非常像日期,而且我从使用 Table1 上的日期切换到使用 DateTable 来尝试缓解空值问题

% real Avg MoM Change = 
VAR _currentMonth = MAX('DateTable'[Month Number])
RETURN
CALCULATE([% Accepted MoM change], DATESINPERIOD('DateTable'[Date].[Year], 
MIN('DateTable'[Date].[Year]), 
(FORMAT(MIN('DateTable'[Date].[Year]),"#") - FORMAT(MAX('DateTable'[Date].[Year]),"#")),
YEAR), 
FILTER(VALUES('DateTable'[Month Number]), 
'DateTable'[Month Number] = _currentMonth))

更新: 我已经修复了年份间隔和错误,但现在它只是返回空白单元格:

% real Avg MoM Change = 
VAR MinYear = CALCULATE(MIN('Table1'[Year]), ALLEXCEPT('Table1','Table1'[Month Year])) 
VAR _currentMonth = MAX('DateTable'[Month Number])
VAR _YrIntervals = MinYear - MAX('Table1'[Year])
VAR _EarliestDate = MIN('Table1'[Created_date])
RETURN
CALCULATE([% Accepted MoM change], DATESINPERIOD('DateTable'[Month], MinYear , _YrIntervals,YEAR), FILTER(VALUES('DateTable'[Month Number]), 'DateTable'[Month Number] = _currentMonth)
powerbi dax powerbi-desktop
1个回答
0
投票

看看这是否适合您:

% avg MoM change = 
  var thisMonths = 
    FILTER(
      ALL('DateTable'),
      'DateTable'[Month Number] = SELECTEDVALUE('DateTable'[Month Number])
    )

  return
    AVERAGEX(
      SUMMARIZE(
         thisMonths,
        'Datetable'[MonthYear],
        "MoM", [% MoM change]
      ),
      [MoM]
    )
© www.soinside.com 2019 - 2024. All rights reserved.