在Power BI中这样进行周分析,你见过吗?

零售、电商、教育等领域的诸多业务场景中需要按周进行分析,然而Power BI并未提供周粒度的时间智能函数,这让很多人想分析时感觉佷困惑。

在Power BI中这样进行周分析,你见过吗?


今天就来说一说按周分析的几个思路,希望能够帮各位打开思想的束缚,发挥更大的创造力,更好地助力业务发展。


首先创建一个日期表(关于日期表创建的多种方式可参考这篇文章:),或者在已有日期表中新建列“WEEKDAY”和“WEEKNUM”:

在Power BI中这样进行周分析,你见过吗?


有了周的信息,我们就可以按周进行分析了,先拖一个矩阵看看:

在Power BI中这样进行周分析,你见过吗?

大概有了初步的样子了。

但是你要做成这样直接给老板,估计老板一巴掌就能拍死你,啥玩意儿这是。所以我们来稍微美化一下。先看行上,光秃秃的数字不好看,添加一下说明:

在Power BI中这样进行周分析,你见过吗?

如果你还想显示这个周到底是哪些日期:

在Power BI中这样进行周分析,你见过吗?

你可以写一个这样的度量值:

周数日期 = VAR thisweeknum='日期'[年周数]

VAR firstdayofthisweek=CALCULATE(MIN('日期'[Date]),FILTER(ALLEXCEPT('日期','日期'[年度]),'日期'[年周数]=thisweeknum))

VAR monthday1=CALCULATE(MAX('日期'[月份]),FILTER(ALL('日期'),'日期'[Date]=firstdayofthisweek))&"."&CALCULATE(MAX('日期'[日]),FILTER(ALL('日期'),'日期'[Date]=firstdayofthisweek))

VAR lastdayofthisweek=CALCULATE(MAX('日期'[Date]),FILTER(ALLEXCEPT('日期','日期'[年度]),'日期'[年周数]=thisweeknum))

VAR monthday2=CALCULATE(MAX('日期'[月份]),FILTER(ALL('日期'),'日期'[Date]=lastdayofthisweek))&"."&CALCULATE(MAX('日期'[日]),FILTER(ALL('日期'),'日期'[Date]=lastdayofthisweek))

RETURN "("&monthday1&"-"&monthday2&")"

然后在把两列合为一列,或者干脆直接一列搞定也可以。

再看列,按照习惯我们一般用汉字,所以:

周几 = SWITCH('日期'[周几.数字], 1,"周一", 2,"周二", 3,"周三", 4,"周四", 5,"周五", 6,"周六", 7,"周日")

这样是不是就好多了:

在Power BI中这样进行周分析,你见过吗?

不过,细心的你已经发现了,列的排序是乱的,并不是按照周一到周日或者周日到周六的顺序排的。很明显,此时要排序,结果发现列是不支持直接排序的:

在Power BI中这样进行周分析,你见过吗?


所以我们需要用到一个初学者经常会问的【按列排序】了。选中“周几”,点击按列排序,按WEEKDAY进行排列,是不是符合你的要求了:


再经过一些恰当的修饰,就得到了一个比较美观的按周展示的矩阵了:

在Power BI中这样进行周分析,你见过吗?


当然,仅看销售额数据自然是不够的,中国式复杂报表要求我们必须同时查看大量的信息,比如:

在Power BI中这样进行周分析,你见过吗?


你也可以通过柱状图和折线图的方式进行同比环比分析:

在Power BI中这样进行周分析,你见过吗?

这样你就可以从容应对中国式复杂报告的周分析了。

再多说一点,如果你嫌上表第一列的宽度太大,而又想同时包含这些信息,那么你可以通过手动调整列宽的方式将其分为两行:

在Power BI中这样进行周分析,你见过吗?

不过,我们一般是不建议这么做的。自动调整列宽对于绝大部分矩阵来说是很必要的,否则经常会出现下图的情况:

在Power BI中这样进行周分析,你见过吗?


那有没有办法既让矩阵自动调整列宽,又让首列自动分为两行呢?

答案是肯定的:

在Power BI中这样进行周分析,你见过吗?


如何实现呢?敬请关注学谦数据运营,下回分解。


分享到:


相關文章: