Power Pivot 24 小时维度:累计、同比、环比相关

传送门:https://jiaopengzi.com/244.html

一、背景

今天有朋友讨论怎么做每天24小时纬度的工作量计算(运营类企业,每天24小时都在运营)需求如下:

  1. 从0时到23时每小时工作量;
  2. 从0时到23时每小时工作量占比全天工作量的百分比;
  3. 从0时到23时每小时累计工作量;
  4. 从0时到23时每小时累计工作量占比全天工作量的百分比;
  5. 从0时到23时每小时的环比;
  6. 从0时到23时昨日每小时工作量及同比。

动态结果(只有功能,美化不会)
由于demo中就11月7日及8日两天的数据,所以切片11月7日时,昨日total,同比%,0时环比%为空。
file

二、数据源

file
为了方便写demo,就不用加入日期表了,数据量大的时候还是日期表管理会更好。
file
新建hour列,用于小时纬度建立关系,在pq中处理会更好。
file
实际项目中是用日期表管理,为了方便起见就新建date列用于切片器

关系建立
file

三、上DAX
1、total

total:=SUM('data'[value])

2、占比%:
从0时到23时每小时工作量占比全天工作量的百分比

占比%:=DIVIDE('data'[total],CALCULATE('data'[total],ALL(h[hour])))

3、htd:
从0时到23时每小时累计工作量

htd:=
VAR HMAX =
    MAX ( 'h'[hour] )
VAR HMIN =
    CALCULATE ( MIN ( 'h'[hour] ), ALL ( h[hour] ) )
VAR T =
    CALCULATETABLE ( VALUES ( h[hour] ), 'h'[hour] >= HMIN && 'h'[hour] <= HMAX )
RETURN
    CALCULATE ( 'data'[total], T )

4、累计%:
从0时到23时每小时累计工作量占比全天工作量的百分比

累计%:=DIVIDE('data'[htd],CALCULATE('data'[total],ALL(h[hour])))

5、环比%:
从0时到23时每小时的环比(注意环比中,0时的上一小时是前一天的23时【注意黄色单元格】)

环比%:=
VAR HMAX =
    MAX ( 'h'[hour] )
VAR PH =
    IF (
        HMAX = 0,
        CALCULATE ( 'data'[total], 'h'[hour] = 23, DATEADD ( 'data'[date], -1, DAY ) ),
        CALCULATE ( 'data'[total], 'h'[hour] = HMAX - 1 )
    )
RETURN
    IF ( ISFILTERED ( h[hour] ), DIVIDE ( 'data'[total] - PH, PH ) )

6、昨日total:
从0时到23时昨日每小时工作量

昨日total:=CALCULATE('data'[total],DATEADD('data'[date],-1,DAY))

7、同比%:
从0时到23时昨日每小时工作量的同比

同比%:=
VAR HMAX =
    MAX ( 'h'[hour] )
VAR YH =
    IF (
        ISFILTERED ( 'h'[hour] ),
        CALCULATE ( 'data'[total], 'h'[hour] = HMAX, DATEADD ( 'data'[date], -1, DAY ) ),
        'data'[昨日total]
    )
RETURN
    DIVIDE ( 'data'[total] - YH, YH )

四、总结

  1. 建立适当的模型及关系;
  2. 构建需求的上下文;
  3. 特殊纬度的度量值,特殊处理(如0时的环比)

by 焦棚子