数据结构:
日期维度表,有date, month, year, year-month, quarter, startofmonth(每月的第一天)等维度,时间相关的都与其有关。
业务数据表,有YEAR-MONTH,有每月的平均人头
业务表与日期维度发生多对一的关系(YEAR-MONT--STARTOFMONTH)
但由于每月的平均人头波动比较大,想看一个前十二个月(包括当月)的月平均人头加入对比。
用了DATESINPERIOD函数,有数据出来,但与EXCEL计算的不一致,怀疑是这个生成的数据,是按天,不是按月,也是日期维度的结构有关。
经过思考,在日期维度中加入一列,计算每月第一天对应的前一年的日期:
YTD = DATEADD(V_Dim_Time[StartOfMonth],-12,MONTH)
在业务表中新增计算列,计算HC:
TTHC=SUM(HC);
新增一计算列计算移动平均值:
avg hc =
var CurrentDate=max(V_Dim_Time[StartOfMonth])
var minDate=max(V_Dim_Time[YTD])
var Period = FILTER(ALL(V_Dim_Time[StartOfMonth]),V_Dim_Time[StartOfMonth]>minDate && V_Dim_Time[StartOfMonth]<=CurrentDate)
var Result=AVERAGEX(Period,TTHC)
return Result
搞定收工