我有一个看起来像这样的数据表,只不过它持续了大约 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% |
我的目标是创建一个度量或列来计算每个月的平均 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 帮助我发现这两个响应放在一起有可能解决我的问题,但到目前为止我仍然遇到问题。
我使用第一个链接来创建此度量,但我不断收到错误“调用函数“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)
看看这是否适合您:
% 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]
)