PowerBI 实现中国式复杂报表设计

什么是中国式报表

中国式报表,是不是像中国特色一样特别的,搜索了一下,发现这里的解释比较贴切,粘贴如下:

PowerBI 实现中国式复杂报表设计_第1张图片

可以看出:中国式报表,已经成了一个专有名词。它的特点是:

  • 结构复杂
  • 制作困难
  • 需要专用的工具软件才能开发

或者只要你遇到Excel透视表或PowerBI表格/矩阵无法默认实现的报表,那都可以归类为结构复杂,制作困难,需要专用的工具才能开发。

那太好了,我们今天就是来证明 PowerBI 就是这种专业工具。

中国式报表的复杂之处

我们从一个案例来看看中国式报表可能有怎样的复杂:

PowerBI 实现中国式复杂报表设计_第2张图片

很明显这个例子已经证明 PowerBI 可以制作中国式报表,但依然要明确下它到底复杂在什么地方:

  • 列头是自定义的:列头一旦是可以自定的,那么什么都有可以能发生了。一般软件也就招架不住了。除非该软件能自定义列头并且完成行列交叉点的自定义计算。
  • 列头元素是可以自定义排序的:例如小计应该在本栏目的所有列之后。
  • 列头是可以决定是否小计的:例如有的可以小计,有的不要小计。
  • 行列可以是多层次的:行可以多级展开,列也可以多级展开。
  • 不同栏目层次可以有不同的层级数:行列多级展开,且可以有不同的曾次数。

以上从技术层面描述了这些需求,并且上述案例也正是在PowerBI中实现了这些需求。所以,可以看出中国式报表很大的复杂来自于列头的复杂和不规则

值得强调的是,要实现对中国式报表的支撑,报表工具必须能够:

  • 自定义列头
  • 自定义在行列交叉处的计算

在PowerBI中:

  • 由 计算表 完成自定义列头
  • 由PowerBI特有的筛选上下文机制保证 度量值 完成在行列交叉处的计算

用DAX计算表构建列头

因为这样的列头,默认是不存在的,那就需要根据需求来使用 DAX函数 拼出这个列头表,如下:

PowerBI 实现中国式复杂报表设计_第3张图片

其结果如下:

PowerBI 实现中国式复杂报表设计_第4张图片
  • 这里用 GENERATE函数 创建了类别的父子结构,这里只随机了选取了3个子类别作为示例。
  • 对此进行排序设置。
  • 对此全部归为同一列头下面。
  • 以类别为例,创建了2个级别的列头。
  • 以年份为例,创建了1个级别的猎头。
  • 列头中含有小计,且小计用按列排序的方式排在同栏目所有元素的最后面。

这样,用构造出来的列头表置于矩阵的列上,就可以实现复杂的列头效果,接下来就看是否能在行列交叉处完成自定义的预期运算。

用DAX度量值构建行列交叉处的计算

由于PowerBI中有神奇的筛选上下文,所以正好满足这里的自定义计算所可能需要的筛选环境。这样,我们的思路就有了:在度量值中动态判断当前的筛选上下文以决定计算的业务逻辑。如下:

PowerBI 实现中国式复杂报表设计_第5张图片

这里用SWITCH结构来判断当前的栏位,然后动态的调整筛选上下文来完成计算。例如,在计算小计的时候就要使用DAX高阶技巧:

  • 取消当前级别(L2级别)的筛选
  • 保持当前栏目级别(L1级别)的筛选
  • 用TREATAS创建虚拟关系以完成动态计算

总结

中国式报表是复杂报表的代名词,它反映了具有特别列表头或行表头以及在行列交叉处完成自定义计算的报表。如果充分利用PowerBI的筛选上下文和度量值的配合是可以实现大部分复杂报表设计需求的。

你可能感兴趣的:(PowerBI 实现中国式复杂报表设计)