本文是对include、exclude、fix函数的简单总结,示例使用的是Tableau自带的“超市-示例”数据。
include函数
include函数的作用是“维度增强”,类似于数据库中常用的 GROUP BY 函数,起到一个分组的作用。
首先解释一下表格,第一行是对include函数返回的结果取均值,第二行是直接拖拽对利润取均值,第三行是直接拖拽对利润求和。
为方便理解,首先看最简单的第三行,直接把“地区”拖拽到列上,把“利润”拖拽到行上就是第三行的结果。对Tableau自动进行的操作解释下就是把全部数据按“地区”分为六个组,再对每个组内的数据进行求和,也就求得了每个地区的利润的和。以“东北”地区为例,按地区分组后,有1685条数据是属于“东北”地区,这1685条数据中利润字段的和就是249240.
再看第二行,只需要再将“利润”拖到行上,将聚合方式切换为平均值即可。Tableau进行的操作和上一步基本相同,唯一不同的是在组内进行的是取均值运算。同样以“东北”地区为例,对东北地区的1685条数据取均值,即249240/1685 = 148.
最后是第一行,首先要创建计算书字段,在计算字段里输入以下代码{INCLUDE [类别]:SUM([利润])}
,创建成功后拖到行上,并将聚合方式切换为平均值即可,实现功能为先对利润按类别分组求和后再取均值。解释一下Tableau自动进行的操作:“类别”字段共有三个值,分别是“办公用品”、“技术”、“家具”。与直接取均值不同的是,Tableau首先将属于东北地区的1685条数据按着三个类别分成对应的三个组,对每个组求出一个和值,再对三个和值取平均,即进行以下运算(SUM(办公用品)+SUM(技术)+SUM(家具))/3 = SUM(东北地区)/3 = 249240/3 = 83080.
通过对比三部分,可以看到,include函数的作用是像数据库中的 GROUP BY 函数那样对数据先进行一次分组 ,再依次执行各级运算,就相当于在视图里增加了一级运算,即对视图进行了“维度增强”。假如你是一名老师,想计算班级所有学生的平均分,直接拖上去切换聚合方式为平均值即可,但如果你想计算的是以小组为单位,组与组之间的平均值,就需要用include函数指定“小组”维度,以小组为单位先执行一次SUM运算,得到每个组的总和,再对每个组的总分按平均值进行聚合。
exclude函数
exclude函数的作用是“维度削弱”,通俗讲就是从视图中减去指定的维度。
第一行表示的是东北地区不同类别下采用不同邮寄方式的订单的总利润。第二行表示的是对exclude函数的返回结果求和,exclude函数表达式为:{EXCLUDE [类别]: SUM([利润])}
。
通过对比两行可以看到exclude函数那一行忽视了“类别”维度,只考虑“地区-邮寄方式”这两个维度的组合。因为忽视了“类别”维度,所以可以看到第二行按类别划分的三个区域实际是完全相同的,后两个区域只是对第一个区域的复制。并且,将第一行每个类别符合“东北地区-标准级”这一维度组合的数据加起来,也就是45605+63042+34077 = 142723,恰好等于第二行每个类别下“东北地区-标准级”的数值,再次验证了exclude函数将“类别”维度排除的效果。
需要注意的是,使用exclude函数时,聚合的方式是由函数表达式中的聚合方式决定的,例如上个例子中表达式中写的是SUM([利润]),所以只能按总和来聚合,在标签上切换聚合方式是无效的(实际上是有效的,只不过每个最细级别下exclude函数只返回一个值,所以不管求和还是取平均,都还是那个值,聚合方式切换到计数,可以看到全部为1,说明确实只有一个值)。
fixed函数
fixed函数的作用是“指定维度”,能够明确指定按那个维度进行聚合,完全独立于视图中的可视化维度级别。
这次互换了下“地区”和“类别”的顺序,先按类别分类,再按地区分类。为方便看清数字,只保留了“办公用品”和“家具”两个类别。
同样的,第一行是不同类别下不同地区的总利润,第二行是对fixed函数的返回值求和,fixed函数表达式为:{FIXED [类别]:SUM([利润])}
。
在这个视图中,第二行通过fixed函数指定了根据“类别”维度聚合,其他字段都对本行的聚合结果没有影响,也就是“地区”维度对于fixed函数来说相当于不存在。所以在这一行中,“类别”字段是有效的,于是两个类别间的数值是不同的,但“地区”字段没有被指定,是无效的,于是在类别内部不同地区之间的数值是相同的,而且等于此类别下不同地区的和,也就是对应类别的第一行数值的和值。
可以把“地区”标签拖走,可以看到上下两行的数值是相同的,而且办公用品还是752143,证明了通过fixed可以仅根据指定的维度进行聚合,而未指定字段对聚合无影响(只是会在视图上添加几个复制值而已)。