温馨提醒
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]
)
)
建立了这样的维度后,就可以愉快地在财年上做周分析啦。