复杂报表织布式拼接
什么是织布式拼接报表
观察图 1 的 Excel 报表,该报表可以认为是多块内容的拼接。
图1 - 报表需求:
首先,报表内容分为 [当月] 和 [当年累计] 两大块,两大块表头相同,指标雷同且仅指标取数日期口径不同。可以理解为 [当月报表] 和 [当年累计] 报表左右拼接为一张大报表。
其次,因指标太多,指标层级也比较混杂,客户在 Excel 里就用空白行做了区分。截图中就有 销量与销售额、销售成本、毛利、渠道促销活动 4 个大块。这四大块在纵向上上下拼接为报表。
也就是说,这张 Excel 报表,单独裁切出一小块,语义都是完整的。这种报表,既可以认为是一张面幅巨大的报表,也可以认为是多张小报表的拼接报表。
-
对于拼接报表,如果行表头简单,可能可以直接通过 [维度组 - 指标名 - 指标值] 这种形式的数据集,在普通表格卡片里完成制作。
-
如果行表头复杂,则同时存在多种计算模式,则可能只能采用复杂报表卡片制作完成。
行表头分析:
-
可直接分组聚合的表头:这是最喜闻乐见的表头,例如销售成本部分,分细项行(有文本缩进)和汇总行(即加粗字体的销售成本行)。复杂报表的纵向展开可以完成制作。细项展开可能在汇总行的上方,也可能在汇总行的下方。汇总行因为有自己的行表头,所以实现时未使用复杂报表的小计功能,通过 excel 的 sum 函数完成计算。
-
占比值:占比值的存在使得报表不能直接用表格卡片完成。图里的占比值有:销售折扣率、毛利率、运费%。都是可以通过 细项指标/总指标 的方式计算得到,分子也可能是多个细项的加减运算。复杂报表里也是通过 excel 的格间计算实现。
-
增长率:与占比值不同,增长率的计算跨列了。量增长 = 本月实际/去年同期 - 1。也需要 excel 的格间计算来实现。
由此可见,这个报表并不是每一行的指标计算方式都是一样的,意味着报表的实现需要逐行逐个指标地实现。制作这份报表就像织布一样,纵向上指标确定(实际、预算、预测、差异等),横向上要逐行编织每个指标,所以可以叫做织布式报表。
图1 中的报表就是织布式拼接报表。
报表的实现
分析清楚报表的构成后,即可逐块完成报表。
实现要点:
-
单元格指标
-
多个视图数据集:因为指标分块实现,计算模式不同,每个视图数据集采用统一计算模式处理这一块的指标,有效降低实现难度。图2中实现的部分就用了 5 个视图数据集(见图3)。
图2 - 已实现的样例部分
单元格指标的实现
复杂报表公式目前(2020-08-20)还不能方便地在某个单元格上直接呈现一个指标,这里介绍一种实现方式。
- 复杂报表卡片里新建一个视图,视图仅包含需展示的指标。如下图,仅保留销售额的几种指标。这样在 excel 模板中写 &=View!实际值 时,纵向扩展为 1 行,值等于图中的 2100。
图3:
剩余部分
单元格指标实现后,采用 Excel 的格间计算能力。所有的指标都可以被计算出来了。这里直接贴 Excel 的公式,作为参考。不再赘述复杂报表的计算功能。
图4 - Excel 模板中的公式:(线下模板公式参考)
注意:
-
灰色底的格子需隐藏后再上传 Excel
-
使用 Excel 的格间计算是不需要用 sum 的,图4里有几处多此一举了。但对纵向展开的公式 &= 做聚合时必须使用 sum。