中国式报表Pro使用技巧
1. 中国式报表(复杂报表)新旧版本对比
中国式报表(原复杂报表) | 中国式报表Pro(5.9版本上线) | |
特点 | 跨视图查询方便;但是公式难用、样式不丰富 | 1. 完美适配Excel |
解决了派生表、格间计算-位移坐标等使用难点
操作简单,手动输入量减少 |
切换Pro注意事项:
-
启用中国式报表Pro需要更新license;
-
可以正常使用的旧版复杂报表不要切换为Pro版本,仅建议新的报表、以及旧版本无法实现的场景改用新版本。
2. 三种上下文对比
父单元格对子单元格有约束作用:
1)跟随:子格跟随父格的扩展方向进行分组扩展。
2)过滤:子格使用父格的数据作为过滤条件进行计算。
上下文 | 优先级 | 功能特点 | 优点 | 缺点 |
显式上下文(C属性) | 高 | 可设置2个父格(左、上各一个),多维度相邻(多层表头)时可继承约束作用。 | 父子关系简单明了。 | 单元格需逐个设置,单元格多时较麻烦。 |
默认上下文 | 中 | 左、上紧邻的模板单元格自动成为父格 | 自动生效,方便高效。 | 覆盖范围小,易被忽略。 |
回退上下文(R属性) | 低 | 1.Range允许嵌套(完全包含)。2.扩展方向相同的单元格的Range不允许相交(部分包含)。3.如一个单元格位于多个Range内,按方向分成两组,每组中最小的Range对它起作用。 | 仅用于个别表头单元格,即可实现批量设置父格的效果。 | 范围交叉较复杂的时候要小心互相冲突;优先级低,不建议和C属性混合使用。 |
注意:
-
空单元格、常量单元格、(双)等号公式,由于本身不能主动扩展,不能成为其它单元格的有效父格。
-
父单元格对子单元格的约束作用,仅限于同一视图。跨视图时,上下文关系(父子关系)不生效;如需要跨视图查询,则需要把视图关联起来。
2.1. 示例一:
下图中设置C3父格为B3C2,B3、C2的父格默认为相邻的A3、C1,那么C3其实是按照A3、B3、C1、C2四个维度来过滤并计算的,相当于原来的G_VLOOKUP 有多个查询条件的效果;同时,C3也适用于默认上下文,不设置父格时默认父格为B3C2,受A3、B3、C1、C2四个维度约束。
但是D3单元格就不适用于默认上下文,需要手动设置父格。当父格为B2,计算结果为每个物料的出库总计,相当于行总计,仅纵向扩展;当父格为B2*C1,计算结果为每个物料、每周的出库小计,纵向扩展同时跟随周横向扩展;当不设置父格,计算结果为整个视图的出库数总计,无任何扩展。效果如下图。
2.2. 示例二:
下图中,C2里的城市是固定文本,跟随C1横向扩展,但是作为C3的父格是不生效的,有效的父格只有B3 ,C3得到的是每个物料最近4周的出库总计。这个计算结果是不符合预期的,建议需要参与计算的单元格尽量使用视图里的字段,即示例一的用法。
如果确实遇到需要用固定文本当做查询条件的场景,建议使用复杂报表旧版来实现(G_LOOKUP公式),或者Pro里使用Excel里LOOKUP/XLOOKUP等函数来实现(可参考下图公式写法)。具体操作步骤请参考 正确使用Excel Lookup函数。
3. 格间计算
没有旧版复杂报表偏移坐标的概念,完全遵循Excel计算方式。
1)同一个单元格扩展出来的多列、多行之间,旧版复杂报表可以使用 =G_CELLCALCEXP({-2}{r}/{-1}{r}), 在新版报表里可以使用Excel原生函数(例如OFFSET)来计算。
例如下图公式里,OFFSET(D3,0,-2)/OFFSET(D3,0,-1) 代表当前单元格D3左移2列的单元格除以D3左移1列的单元格,IFERROR用来替换无有效数据导致计算错误的报错,设置父格保证该单元格跟随父格扩展。
2)参与计算的多个单元格之间位置需要相对固定。以两个单元格相除为例,能正确计算的场景为:分子分母至少有一方行或列固定不变,例如 =B4/3,=D4/D$3;分子分母按照同样方式同步扩展,例如下面G列。红框内的计算结果错误,需要通过其他方式实现(例如在视图里计算)。
上图实际计算逻辑:
小技巧:点击「公式--显示公式」,然后再预览,可以校验Excel公式引用的单元格是否符合预期。
3)==后跟Excel原生函数或者表达式,需要在数据都铺展开后才开始计算,相比起=(边铺展边计算),计算具有滞后性,即先计算=,再计算==。如果=引用的单元格的计算方式为==,无法计算,预览会报错。
示例:下图中第一行格间计算里分子用的=,分母用的==,用=D4/E4无法计算,模板单元格里需要改为==D4/E4;或者参考第二行三列单元格都用=。
4. 多视图关联注意事项
-
非必要不使用多视图,尽量都在ETL里关联好。适合场景:直连数据集和非直连数据集同时参与计算。
-
多视图关联时,非主键字段避免重名,重名时返回左表数据。目前一个视图只能在 「独立使用」 和 「参与关联」 之间选择一个,不能同时存在。一旦参与关联,所有使用的地方都是关联后的表。
-
视图关联时,要确保各视图都已经聚合到合适的颗粒度,尽量选用主键齐全的视图作为主表(左侧第一个视图),以免关联后数据膨胀或者数据缺失。
-
同一组关联仅支持5个关联字段, 同一个视图只能用于一组关联。必要时可以在视图里把多个主键合并为一个新的主键用于关联。
-
缺点:不能预览关联后的数据,不方便验证数据准确性。
-
替代方案:
a. 把多视图的数据放到隐藏Sheet或者隐藏的行列,使用Excel Lookup类函数(推荐XLOOKUP)进行查询。
b. 把多视图合并为单一视图。
示例:
下图关联的风险点:以「昨日」为主表,这个视图只筛选了一天的数据,如果主键为商品,很容易出现有些商品在一天内未售出的情况,那么关联后主键商品会不完整,数据缺失。
5. FAQ:
5.1. 扩展字段怎么拼接固定文本?
参考模板单元格格式:外部文本{{数据(属性1=value1,属性2=value2,…)}}外部文本
示例: {{视图.物料名称(S=None)}}小计
5.2. 固定文本怎么动态合并单元格?
场景一:固定文本在扩展单元格上侧/左侧:设置固定文本为模板单元格、扩展方向跟相邻单元格一致。
场景二:固定文本在扩展单元格下侧/右侧:设置固定文本为模板单元格、扩展方向跟相邻单元格一致、Range范围覆盖相邻扩展单元格。
5.3. 维度字段默认从左到右、从上到下逐层扩展,怎么能实现从右到左、从下到上的反向扩展?
示例:下图中,横向扩展的多层表头是按照「餐厅编码」扩展的,所以「是否自营」、「区域品牌」、「公司」的公式虽然设置了「分组--归类合并」,但是这几行相邻的重复数据并不会合并。如何在不改变表头结构的前提下实现「公司」、「区域品牌」、「是否自营」分组--归类合并呢?
解决方案:使用回退上下文R属性来逆转父子关系的方向。
5.4. 如何合并数值单元格(例如总计小计)?
模板里的数值字段是跟随父格扩展的,父格合并了子格才能合并,总计一般没有父格,如果需要跟随维度扩展行列数合并单元格,可以在模板里创造一个临时父格来实现合并。
实现方法:
1)在表格最前面插入一列,创建一个常量的模板单元格,扩展方向和旁边维度保持一致;
2)把总计单元格的父格设置为上一步的常量模板单元格;
3)隐藏A列即可。
注意:表格中间非总计小计的相同数值(例如聚合计算结果)不支持合并。