如何使用Power BI在财年上做周分析?

2020-05-14 16:13:36 浏览数 (1)

温馨提醒

1.如果您的企业需要在财年上做分析,那么这些代码可以直接拿来参考;

2.如果您并不需要在财年上做分析,这篇文章会教你如何处理一些复杂的、时间智能函数无法解决的问题;

3.不同企业的财年定义不同,需要适当修改。

之前写过一篇周分析的文章:

这样的Power BI周分析你见过吗?

得到的是如下的效果:

有朋友询问,如果是财年,从财年第一天算第一周,又该如何做:

这问题确实值得思考,有不少实际业务场景的确会用到。

首先,还是一样,按周进行分析,需要创建一个基础的日期表(关于日期表创建的多种方式可参考这篇文章:Power BI创建日期表的几种方式概览):

以上列信息可以适当减少,只留下有用的即可。

接着,我们需要定义一下财年:

第一个问题,不同的单位财年的起始结束日是不同的, 有的是以6月30日为财年末,有的以5-30,有的以11-30;

第二个问题,如果以5月30日为财年末,那么2019年6月1日是2019年财年还是2020年财年,这个界定也不相同,假设我们以后者为准。

写出度量值:

代码语言:javascript复制
fiscal year = 
IF(
  DATEDIFF(YEAR([Date])&"-6-1",[Date],DAY)>=0,
  YEAR([Date]) 1,
  YEAR([Date])
)

如果某个日期晚于该日期的自然年的6月1日,那么它的财年就是该日期自然年的次年,否则为本年。

比如2019年1月1日,早于2019年6月1日,那么它就是2019财年;而2019年10月1日晚于2019年6月1日,那么它就是2020财年:

这一步还是非常简单的。

接下来我们要计算从2019年6月1日起的周数fiscal weeknum:

代码语言:javascript复制
fiscal weeknum =
var firstdayoffiscalyear=[fiscal year]-1&"-6-1"
//第一步,获取本财年第一天的日期。由于本财年的所有日期都小于财年数的6月1日,比如2020财年的所有日期都小于2020年6月1日,所以财年需要减1
var weekdayoffirstday=WEEKDAY(firstdayoffiscalyear,2)
//第二步,获取本财年第一天的星期数,比如2020财年的第一天2019年6月1日是周6
var daysinterval= DATEDIFF(firstdayoffiscalyear,[Date],DAY) weekdayoffirstday 6
//第三步,本来DATEDIFF(firstdayoffiscalyear,[Date],DAY)就是本财年第一天到选定日期的时间间隔,
//因为我们要计算周数,所以后面加上了weekdayoffirstday 6,这样实际上2019年6月1日的数是12,6月2日是13,6月3日是14
var weeknumoffiscalyear=ROUNDDOWN(daysinterval/7,0)
//第四步,将daysinterval/7向下取整,这样12/7和13/7取整就是第一周,14/7取整是第二周
return weeknumoffiscalyear
//最后返回财年的周数即可

然后我们再添加一列:

代码语言:javascript复制
财年周数 = [fiscal year]&"财年-第"&[fiscal weeknum]&"周"

同样我们也可以在后面加上这一周的日期范围:

度量值:

代码语言:javascript复制
firstandlastdayofthisweek =
CALCULATE(
    FORMAT(MIN([Date]),"m.d")&"-"&FORMAT(MAX([Date]),"m.d"),
    ALLEXCEPT(
        '日期表',
        '日期表'[fiscal year],
        '日期表'[fiscal weeknum]
    )
)

建立了这样的维度后,就可以愉快地在财年上做周分析啦。

bi

0 人点赞