[]
我们先来看下面这张报表,这张报表中除了展示数据明细外,还展示了各大区和省份的总销售额以及不同级别销售额的占比情况,包括各大区在全国的占比、各省份在所属大区的占比以及单个订单在全省的占比。
那么在数据集中仅有“ 订单金额 ”字段的情况下,怎样才能得到这些计算结果呢?
我们稍加分析:
大区或省份的总销售额 = 大区或省份范围内所有订单金额的求和
大区/全国 = 大区内的订单金额求和 / 全国的订单金额求和
省份/大区 = 各省份内的订单金额求和 / 各大区订单金额求和
订单/省份 = 各订单金额 / 各省份订单金额求和
不难发现,实现示例效果的关键在于计算出各区域范围内的订单金额求和。
我们已知“ 订单金额 ”数据字段和 Sum 求和函数,欠缺的正是本节即将为您介绍的“ 计算范围 ”。在使用Sum函数对“ 订单金额 ”求和时,增加“ 计算范围 ”参数,即可得到指定范围内的运算结果。
在报表中不仅是Sum函数,其他所有集合函数以及带Scope参数的函数,都可以指定计算范围,从而使函数仅在指定的范围内进行运算。这也就是“ 计算范围 ”的含义。
报表中的计算范围有三种,分别为: 数据集 、 数据区域 和 分组 。实际应用时,将这三种范围对象的名称作为scope参数添加到函数表达式中即可。
数据集和分组的概念之前已经介绍过,那么 数据区域 指的是哪个范围呢?
所谓 数据区域 ,简言之就是在报表当中用于展示数据集数据的区域性组件,具体包含使用表格组件设计报表、使用矩表组件设计报表、使用图表组件设计报表和列表这四种组件。
通过之前对这四种组件的了解,可以看出数据区域组件与普通组件的关键区别在于:数据区域展示的条目数会随着数据集中记录数的变化而变化;而其他普通组件展示的仅是一个结果,当数据集中的记录数发生变化时,结果的值可能会改变但结果本身的个数不会发生变化。
现在我们对这三种计算范围的概念都有了一定的了解,接下来就以开篇的报表为例为您介绍计算范围的具体应用方法。
1. 新建报表,添加基于WynDemoData的数据集。然后添加表格组件,并将“ 销售大区 ”和“ 销售省份 ”拖拽到分组窗格中添加两级分组。
2. 表格明细行绑定数据,为了显示层级更为明显,我们将二级分组头第一列默认绑定的字段删除,在第二列重新绑定“ 销售省份 ”。
3. 删除一级分组尾和二级分组尾,删除后效果如下图所示。
4. 添加省份和大区的订单金额汇总。如下图所示,分别选中第三列对应的一级分组单元格和二级分组单元格,添加表达式 {Sum(订单金额)} 。
当函数用于分组中时,默认的计算范围是当前所在的分组。
比如在二级分组的单元格中添加 {Sum(订单金额)} 时,因此它的计算范围是二级分组也即“ 销售省份 ”。
此时预览报表,可以看到已经得到了各销售大区和销售省份的销售总额。
5. 在表格右侧添加两列,并将标题行合并,输入“ 占比情况 ”。在一级分组、二级分组以及明细行分别输入“ 大区/全国 ”、“ 省份/大区 ”、“ 订单/省份 ”。
6. 添加计算表达式。
(1)单击分组列表中的二级分组,然后复制分组名称待用。
(2)单击明细单元格,输入表达式 {订单金额 / Sum(订单金额, "表格1_销售省份1")}。
其中“ 表格1_销售省份1 ”即上一步中复制的分组名称,用来指定sum函数的计算范围为二级分组也就是计算销售省份范围内的求和。
(3)同理,为二级分组单元格添加表达式。
将一级分组的分组名称作为二级分组表达式中分母的计算范围。表达式为 {Sum(订单金额) / Sum(订单金额, "表格1_销售大区1")}
其中“ 表格1_销售大区1 ” 为一级分组的名称,指定Sum 函数的计算范围为一级分组也就是计算销售大区内的求和。
(4)接下来,为一级分组添加表达式。此时要计算的是大区的总销售额在全国范围内的占比。此时没有全国这个分组概念,我们使用数据集的名称或者当前数据区域的名称作为计算范围,来计算全国的数据。
表达式为: {sum(订单金额) / Sum(订单金额, "表格1")} 或者 {sum(订单金额) / Sum(订单金额, "销售数据")}
表达式中数据集和数据区域的名称来源如下图所示。
type=info
提示
此时也可以使用nothing作为函数的计算范围。在数据区域内,scope参数为nothing时,函数计算范围为当前所属的最外层数据区域(本例中为整个表格区域)。表达式即为:{sum(订单金额)/Sum(订单金额,nothing)}
7. 调整数据格式。选中各占比单元格,在右侧的属性设置面板中设置其数据格式为百分比。
8. 预览报表。可见经过为函数指定计算范围,我们已经得到了需要的数据。
注意
只有直接或间接包含表达式的分组(或数据区域)才能作为计算范围。
如果表达式位于数据区域内(如本例中用到的所有表达式都在表格组件内),则对于所有集合函数,计算范围都是可选参数。如果省略计算范围,则聚合的范围就是表达式所在的分组。如果将计算范围指定为Nothing,则表示计算范围是表达式所在的数据区域。
如果表达式位于数据区域外(比如在表格组件外的文本框中添加的表达式),Scope参数仅能使用数据集而不能使用数据区域和分组。如果报表中只包含一个数据集,Scope参数可以省略,此时默认计算范围即为该数据集。如果报表中包含多个数据集,则必须使用Scope参数指定计算范围。并且此时不能使用Nothing关键字作为计算范围。
在页眉或页脚中不能使用Scope参数。