Power BI 写rolling12,但是日期每天更新怎么办

场景需求:

  1. 求完整月的rolling 12
  2. 设置切片器,动态选择财年、Rolling12 month,图表发生对应改变。
  3. 比如今天2021.02.09,那么rolling12就是2020.02.01-2021.01.31.
    因为2月份数据不是整月,所以既不显示在图表上,也不纳入计算
  4. 报表每天刷新至昨天的数据,因为报表中有需要每天监控的部分。所以不能设置报表每月月初刷新。

实现:

1. 构建切片器维度表,将rolling12和财年结合起来
Temp_table_timeperiod = UNION(
DATATABLE (
    "period", STRING,
    {
        { "Rolling 12 Months" }
    }
),
DISTINCT(CalendarTable[Financial Year])
)
Power BI 写rolling12,但是日期每天更新怎么办_第1张图片
slicer
2. 求measure

整体思路是:
先求完整月的日期,然后rolling的话就往前推12个月即可;
以及,显示上不显示最后一个非完整月,所以还需要判断是否完整月,否的话blank()
1) 准备工作

--报表刷新时间,这个值是在pq里写的 现在将其作为度量值
RefreshDate = SELECTEDVALUE(DataRefreshTime[DataRefreshTIme])

--求报表刷新时间的月底
RefreshDate.Eomonth = EOMONTH([RefreshDate],0)

--求完整月的月底,思路是如果刷新时间小于刷新时间月底,则返回刷新时间上个月的月底;否则返回刷新时间月底
Eomonth.fullmonth = 
IF (
    [RefreshDate] < [RefreshDate.Eomonth],
    EOMONTH('Measure'[RefreshDate],-1),
    [RefreshDate.Eomonth]
)

除了刷新时间的度量值准备,还应准备基础度量值,如

Sales = Calculate(sum('table[column]))

2)然后我们开始写最后的度量值

Measure = 
//如果选择rolling,则月份往前推12个月;如果选择fy,则建立period表和日期表关系,进行筛选
VAR Vslicer =
    SELECTEDVALUE ( Temp_table_timeperiod[period] )
VAR Vrelation =
    TREATAS (
        VALUES ( Temp_table_timeperiod[period] ),
        CalendarTable[Financial Year]
    )
var is_LastNotfullMonth = SELECTEDVALUE ( CalendarTable[YearMonth] )
            > YEAR ( [Eomonth.fullmonth] ) * 100
                + MONTH ( [Eomonth.fullmonth] )
VAR VresultofFY =
    IF(is_LastNotfullMonth,BLANK(),CALCULATE ( [Sales], Vrelation ))
--意思是,如果非完整月,显示为空,否则计算sales
VAR Vresultofrolling1 =
    CALCULATE (
        [Sales],
        FILTER (
            ALL ( table[SalesDate] ),
            table[SalesDate]  - 1
                >= EDATE ( [Eomonth.fullmonth], -12 )
        )
    )
--此处减一,是因为1.31往前推12个月是上年的1.31,加一后就是2.1了,也就是我们要求的日期
VAR Vresultofrolling2 =
    IF (
        is_LastNotfullMonth,
        BLANK (),
        Vresultofrolling1
    )
--先求了rolling12个月的值,然后做了不显示完整月数据的可视化处理
RETURN
    SWITCH (
        TRUE (),
        Vslicer = "Rolling 12 Months", Vresultofrolling2,
        VresultofFY
    )

你可能感兴趣的:(Power BI 写rolling12,但是日期每天更新怎么办)