[]
        
(Showing Draft Content)

函数计算范围

我们先来看下面这张报表,这张报表中除了展示数据明细外,还展示了各大区和省份的总销售额以及不同级别销售额的占比情况,包括各大区在全国的占比、各省份在所属大区的占比以及单个订单在全省的占比。

image2019-6-4_12-27-29.png


那么在数据集中仅有“ 订单金额 ”字段的情况下,怎样才能得到这些计算结果呢?

我们稍加分析:

  • 大区或省份的总销售额 = 大区或省份范围内所有订单金额的求和

  • 大区/全国 = 大区内的订单金额求和 / 全国的订单金额求和

  • 省份/大区 = 各省份内的订单金额求和 / 各大区订单金额求和

  • 订单/省份 = 各订单金额 / 各省份订单金额求和

不难发现,实现示例效果的关键在于计算出各区域范围内的订单金额求和。

我们已知“ 订单金额 ”数据字段和 Sum 求和函数,欠缺的正是本节即将为您介绍的“ 计算范围 ”。在使用Sum函数对“ 订单金额 ”求和时,增加“ 计算范围 ”参数,即可得到指定范围内的运算结果。

计算范围

在报表中不仅是Sum函数,其他所有集合函数以及带Scope参数的函数,都可以指定计算范围,从而使函数仅在指定的范围内进行运算。这也就是“ 计算范围 ”的含义。

报表中的计算范围有三种,分别为: 数据集数据区域分组 。实际应用时,将这三种范围对象的名称作为scope参数添加到函数表达式中即可。

数据集和分组的概念之前已经介绍过,那么 数据区域 指的是哪个范围呢?

所谓 数据区域 ,简言之就是在报表当中用于展示数据集数据的区域性组件,具体包含使用表格组件设计报表使用矩表组件设计报表使用图表组件设计报表列表这四种组件。

通过之前对这四种组件的了解,可以看出数据区域组件与普通组件的关键区别在于:数据区域展示的条目数会随着数据集中记录数的变化而变化;而其他普通组件展示的仅是一个结果,当数据集中的记录数发生变化时,结果的值可能会改变但结果本身的个数不会发生变化。

现在我们对这三种计算范围的概念都有了一定的了解,接下来就以开篇的报表为例为您介绍计算范围的具体应用方法。

操作介绍

1. 新建报表,添加基于WynDemoData的数据集。然后添加表格组件,并将“ 销售大区 ”和“ 销售省份 ”拖拽到分组窗格中添加两级分组。

image2020-10-14_10-56-31.png


2. 表格明细行绑定数据,为了显示层级更为明显,我们将二级分组头第一列默认绑定的字段删除,在第二列重新绑定“ 销售省份 ”。

image2020-10-14_10-57-41.png


3. 删除一级分组尾和二级分组尾,删除后效果如下图所示。

image2020-10-14_10-58-32.png


4. 添加省份和大区的订单金额汇总。如下图所示,分别选中第三列对应的一级分组单元格和二级分组单元格,添加表达式 {Sum(订单金额)}

当函数用于分组中时,默认的计算范围是当前所在的分组。

比如在二级分组的单元格中添加 {Sum(订单金额)} 时,因此它的计算范围是二级分组也即“ 销售省份 ”。

image2020-10-14_10-59-47.png


此时预览报表,可以看到已经得到了各销售大区和销售省份的销售总额。

image2020-10-14_11-2-27.png


5. 在表格右侧添加两列,并将标题行合并,输入“ 占比情况 ”。在一级分组、二级分组以及明细行分别输入“ 大区/全国 ”、“ 省份/大区 ”、“ 订单/省份 ”。

image2020-10-14_11-4-0.png


6. 添加计算表达式。

(1)单击分组列表中的二级分组,然后复制分组名称待用。

image2020-10-14_11-13-39.png

(2)单击明细单元格,输入表达式 {订单金额 / Sum(订单金额, "表格1_销售省份1")}。

其中“ 表格1_销售省份1 ”即上一步中复制的分组名称,用来指定sum函数的计算范围为二级分组也就是计算销售省份范围内的求和。

image2020-10-14_11-19-18.png

(3)同理,为二级分组单元格添加表达式。

将一级分组的分组名称作为二级分组表达式中分母的计算范围。表达式为 {Sum(订单金额) / Sum(订单金额, "表格1_销售大区1")}

其中“ 表格1_销售大区1 ” 为一级分组的名称,指定Sum 函数的计算范围为一级分组也就是计算销售大区内的求和。

image2020-10-14_11-27-54.png

(4)接下来,为一级分组添加表达式。此时要计算的是大区的总销售额在全国范围内的占比。此时没有全国这个分组概念,我们使用数据集的名称或者当前数据区域的名称作为计算范围,来计算全国的数据。

表达式为: {sum(订单金额) / Sum(订单金额, "表格1")} 或者 {sum(订单金额) / Sum(订单金额, "销售数据")}

image2020-10-14_11-29-1.png

表达式中数据集和数据区域的名称来源如下图所示。

image2020-10-14_11-31-56.png

image2020-10-14_11-31-26.png

type=info

提示

此时也可以使用nothing作为函数的计算范围。在数据区域内,scope参数为nothing时,函数计算范围为当前所属的最外层数据区域(本例中为整个表格区域)。表达式即为:{sum(订单金额)/Sum(订单金额,nothing)}

7. 调整数据格式。选中各占比单元格,在右侧的属性设置面板中设置其数据格式为百分比。

image2020-10-14_11-34-45.png


8. 预览报表。可见经过为函数指定计算范围,我们已经得到了需要的数据。

image2020-10-14_11-35-18.png

注意

只有直接或间接包含表达式的分组(或数据区域)才能作为计算范围。

如果表达式位于数据区域内(如本例中用到的所有表达式都在表格组件内),则对于所有集合函数,计算范围都是可选参数。如果省略计算范围,则聚合的范围就是表达式所在的分组。如果将计算范围指定为Nothing,则表示计算范围是表达式所在的数据区域。

如果表达式位于数据区域外(比如在表格组件外的文本框中添加的表达式),Scope参数仅能使用数据集而不能使用数据区域和分组。如果报表中只包含一个数据集,Scope参数可以省略,此时默认计算范围即为该数据集。如果报表中包含多个数据集,则必须使用Scope参数指定计算范围。并且此时不能使用Nothing关键字作为计算范围。

在页眉或页脚中不能使用Scope参数。