我目前在PowerPivot中有一个表,该表通过我们的销售渠道跟踪客户数量。从(按销售地点)首次互动到收费销售。到目前为止,我已经创建了一个为期5天的移动平均值,用于平均每个任务。以下是我到目前为止创建的DAX公式和示例表格。
=
CALCULATE (
SUM ( [Daily Count] ),
DATESINPERIOD ( Table1[Date], LASTDATE ( Table1[Date] ), -7, DAY ),
ALLEXCEPT ( Table1, Table1[Sales Location], Table1[Group] )
)
/ 5
在我苦苦挣扎的地方,我想出了一种排除周末和公司假期的方法。此外,如果假日是平日,我想将其从平均值中删除,然后再返回一天(以平滑趋势)。
例如,在11/26/18(感恩节后的星期一和黑色星期五),我想对之前五个工作日(11/26 / 18、11 / 21-11 / 19和11/16)进行平均)。在上面的示例中,前5天的移动总数和平均值应为Intake = 41(总数),8.2(平均值),约会= 30(总数),6(平均值)和Sale = 13(总数)和2.6(平均值) )。
根据当前公式,这些数字中的每一个都不准确。有什么简单的方法可以排除这些天?
旁注:我创建了一个辅助表,其中包含与我的销售数据相关的所有假期。
谢谢您的帮助!
答案 0 :(得分:1)
为此,我建议您在Table1
列上使用与Date
相关的日历表,如果当天是工作日,否则为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
的前5行,其中每行必须是一个工作日,该工作日小于或等于当前TOPN
行中的日期( DateTable
函数引用定义当前行的较早的行上下文。
然后我使用Table1
通过选择单列(我将其命名为EARLIER
)将此表转换为列表。从那里开始,基本上是您对日期过滤器进行了一些更改的度量。
答案 1 :(得分:0)
@alexisolson谢谢您的答复。我实际上能够在周末解决这个问题,但忘了关闭线程(很抱歉!无论如何都要感谢您的帮助)。但是我所做的事情与您上面提到的非常相似。
我创建了一个仅包含工作日的日期表(CorpCalendar)。然后,我在CorpCalendar表中创建了一个索引列,以给每一行一个升序的唯一编号。从那里,我按相关日期将CorpCalendar表链接到我的SalesData表,并使用LOOKUPVALUE函数将索引值从CorpCalendar表移到SalesData表。在单独的列中,我从日期索引值中减去4得到一个索引调整列(从实际日期索引和调整起5天的范围内……如果有意义)。然后,我添加了一个额外的LOOKUPVALUE帮助器列,以将调整后的日期索引列与相应的工作日进行匹配。最后,我使用以下函数获取5天的滚动平均值。
=CALCULATE(sum(Combined[Daily Count]),DATESBETWEEN(Combined[Date - Adjusted],Combined[Date - Adjusted (-5)],Combined[Date - Adjusted]),ALLEXCEPT(Combined,Combined[Group]))/5
这可能比需要的要复杂得多,但是,它使我得到了我一直在寻找的答案。让我知道这是否有意义,以及您是否对此类未来情况有任何建议。
再次感谢!