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