不包括周末和节假日的移动平均线
Moving average excluding weekends and holidays
我目前在 PowerPivot 中有一个 table,它通过我们的销售渠道跟踪客户数量。从(按销售地点)第一次互动到收费销售。到目前为止,我已经创建了一个 5 天移动平均值来对每个任务进行平均。下面是我迄今为止创建的 DAX 公式和示例 table.
=
CALCULATE (
SUM ( [Daily Count] ),
DATESINPERIOD ( Table1[Date], LASTDATE ( Table1[Date] ), -7, DAY ),
ALLEXCEPT ( Table1, Table1[Sales Location], Table1[Group] )
)
/ 5
我苦苦挣扎的地方是能够想出一种方法来排除周末和公司规定的假期。此外,如果假期恰逢工作日,我想将其从平均值中删除并再返回一天(以平滑趋势)。
例如,在 2018 年 11 月 26 日(感恩节和黑色星期五之后的星期一),我想对之前的五个工作日(11/26/18、11/21-11/19 和 11)取平均值/16).在上面的示例中,前 5 天的移动总数和平均值应为 Intake = 41(总计)8.2(平均),Appointment = 30(总计)6(平均),Sale = 13(总计)和 2.6(平均) ).
根据目前的公式,这些数字中的每一个都不准确。这些天有没有简单的方法可以排除?
旁注:我创建了一个辅助 table,其中包含与我拥有的销售数据相关的所有假期。
感谢您的帮助!
为此,我建议在 Date
列上使用与 Table1
相关的日历 table,该列还有 IsWorkday
和 1
如果那天是工作日,0
否则。
完成设置后,您可以编写如下度量:
Moving Avg =
VAR Last5Workdays =
SELECTCOLUMNS (
TOPN (
5,
FILTER (
DateTable,
DateTable[Date] <= EARLIER ( Table1[Date] )
&& DateTable[IsWorkday] = 1
),
DateTable[Date], DESC
),
"Workday", DateTable[Date]
)
RETURN
CALCULATE (
SUM ( Table1[Daily Count] ),
Table1[Date] IN Last5Workdays
ALLEXCEPT ( Table1, Table1[Sales Location], Table1[Group] ),
)
/ 5
此处的 TOPN
函数 returns DateTable
的前 5 行,其中每一行必须是小于或等于您当前 Table1
行(EARLIER
函数引用定义当前行的较早的行上下文)。
然后我使用 SELECTCOLUMNS
通过选择单个列(我将其命名为 Workday
)将此 table 变成一个列表。从那里开始,这基本上是您对日期过滤器进行了一些更改的度量。
@alexisolson 感谢您的回复。实际上,我在周末就能解决这个问题,但忘了关闭线程(对此感到抱歉!无论如何都要感谢您的帮助)。但我做了一些与你上面提到的非常相似的事情。
我创建了一个只包含工作日的日期 table (CorpCalendar)。然后我在 CorpCalendar table 中创建了一个索引列,以按升序为每一行提供一个唯一的数字。从那里,我通过相关日期将 CorpCalendar table 链接到我的 SalesData table 并使用 LOOKUPVALUE 函数将索引值从 CorpCalendar table 带到 SalesData table .在一个单独的列中,我从日期索引值中减去 4 以获得索引调整列(从实际日期索引和调整开始的五天范围......如果有意义的话)。然后,我添加了一个额外的 LOOKUPVALUE 辅助列,以将调整后的日期索引列与适当的工作相匹配 day.Lastly,然后我使用以下函数获取 5 天滚动平均值。
=CALCULATE(sum(Combined[Daily Count]),DATESBETWEEN(Combined[Date - Adjusted],Combined[Date - Adjusted (-5)],Combined[Date - Adjusted]),ALLEXCEPT(Combined,Combined[Group]))/5
这可能比必要的更复杂,但是,它让我找到了我正在寻找的答案。让我知道这是否有意义,如果您对类似的未来场景有任何建议。
再次感谢!
我目前在 PowerPivot 中有一个 table,它通过我们的销售渠道跟踪客户数量。从(按销售地点)第一次互动到收费销售。到目前为止,我已经创建了一个 5 天移动平均值来对每个任务进行平均。下面是我迄今为止创建的 DAX 公式和示例 table.
=
CALCULATE (
SUM ( [Daily Count] ),
DATESINPERIOD ( Table1[Date], LASTDATE ( Table1[Date] ), -7, DAY ),
ALLEXCEPT ( Table1, Table1[Sales Location], Table1[Group] )
)
/ 5
我苦苦挣扎的地方是能够想出一种方法来排除周末和公司规定的假期。此外,如果假期恰逢工作日,我想将其从平均值中删除并再返回一天(以平滑趋势)。
例如,在 2018 年 11 月 26 日(感恩节和黑色星期五之后的星期一),我想对之前的五个工作日(11/26/18、11/21-11/19 和 11)取平均值/16).在上面的示例中,前 5 天的移动总数和平均值应为 Intake = 41(总计)8.2(平均),Appointment = 30(总计)6(平均),Sale = 13(总计)和 2.6(平均) ).
根据目前的公式,这些数字中的每一个都不准确。这些天有没有简单的方法可以排除?
旁注:我创建了一个辅助 table,其中包含与我拥有的销售数据相关的所有假期。
感谢您的帮助!
为此,我建议在 Date
列上使用与 Table1
相关的日历 table,该列还有 IsWorkday
和 1
如果那天是工作日,0
否则。
完成设置后,您可以编写如下度量:
Moving Avg =
VAR Last5Workdays =
SELECTCOLUMNS (
TOPN (
5,
FILTER (
DateTable,
DateTable[Date] <= EARLIER ( Table1[Date] )
&& DateTable[IsWorkday] = 1
),
DateTable[Date], DESC
),
"Workday", DateTable[Date]
)
RETURN
CALCULATE (
SUM ( Table1[Daily Count] ),
Table1[Date] IN Last5Workdays
ALLEXCEPT ( Table1, Table1[Sales Location], Table1[Group] ),
)
/ 5
此处的 TOPN
函数 returns DateTable
的前 5 行,其中每一行必须是小于或等于您当前 Table1
行(EARLIER
函数引用定义当前行的较早的行上下文)。
然后我使用 SELECTCOLUMNS
通过选择单个列(我将其命名为 Workday
)将此 table 变成一个列表。从那里开始,这基本上是您对日期过滤器进行了一些更改的度量。
@alexisolson 感谢您的回复。实际上,我在周末就能解决这个问题,但忘了关闭线程(对此感到抱歉!无论如何都要感谢您的帮助)。但我做了一些与你上面提到的非常相似的事情。
我创建了一个只包含工作日的日期 table (CorpCalendar)。然后我在 CorpCalendar table 中创建了一个索引列,以按升序为每一行提供一个唯一的数字。从那里,我通过相关日期将 CorpCalendar table 链接到我的 SalesData table 并使用 LOOKUPVALUE 函数将索引值从 CorpCalendar table 带到 SalesData table .在一个单独的列中,我从日期索引值中减去 4 以获得索引调整列(从实际日期索引和调整开始的五天范围......如果有意义的话)。然后,我添加了一个额外的 LOOKUPVALUE 辅助列,以将调整后的日期索引列与适当的工作相匹配 day.Lastly,然后我使用以下函数获取 5 天滚动平均值。
=CALCULATE(sum(Combined[Daily Count]),DATESBETWEEN(Combined[Date - Adjusted],Combined[Date - Adjusted (-5)],Combined[Date - Adjusted]),ALLEXCEPT(Combined,Combined[Group]))/5
这可能比必要的更复杂,但是,它让我找到了我正在寻找的答案。让我知道这是否有意义,如果您对类似的未来场景有任何建议。
再次感谢!