一、 表计算是什么?
表计算是指不通过数据源进行直接计算,而是借助中间表计算得出结果的计算,其基本特征是基于视图中聚合数据的二次聚合计算。
二、 分区与寻址的概念
要了解表计算,必须先了解——分区与寻址
分区 partitioning:分区规定了表计算的范围。每个分区就是一个单独的”表”,每个计算都是在独立的表中进行的。各个表在计算时没有关系,互不影响。
寻址 addressing:寻址规定了每个分区的源(锚点)(读mao),它定义了表计算的根节点,指明了计算的方向。
举个栗子<
- 制作中间表(视图)
视图中的每一个值表示:各个类别在不同季度的销售额之和。
- 添加表计算
两者任选其一, 进行合计百分比。
合计百分比是指某一部分占总体的比重是多少。
计算公式:sum([销售额])/total(sum([销售额]))
分子:是每一个 单元格的值
分母:每一个 分区的总和
最终视图如下:
- 修改分区和寻址的方式
3.1 表(横穿)table across
意义:在每个季度中,各类别销售额占比情况
3.2 表(向下)table down
意义:各类别的销售额在各季度占比情况。
3.3 表 across then down
意义:各类别的各季度在总销售额的占比情况
3.4 区(横穿)pane across
3.5 区向下 pane down
3.6 区 pane (across then down)
3.7 单元格(cell)
3.8 特定维度
四、 表计算的分类
表计算可以分为快速表分类和手动表分类。
1.索引排序函数:
index()、size()、first()、last()。这四个函数不需要参数;
rank()以及延伸函数。如rank_dense()、rank_modified()等。
2.移动计算函数:
running_x。比如running_sum、running_avg、running_max等。
3.范围计算函数:
window_x。比如window_sum、window_avg、window_max等。
4.1 手动表计算
- total(expression)计算
total()是为每一个分区返回同一个结果,也就是说,total为各个分区求和,每个分区返回同一个数值。
- running_sum(expression) 递归计算
对于同一个分区的不同行,running_sum()返回不同的数值
- 索引排序函数
first():返回当前行到第一行的偏移行数
last():返回当前行到分区最后一行的偏移行数
size():返回分区的行数
index():返回分区的当前行索引
- window_sum(expression,[start,end])
在手动表计算中,window_x函数是使用最多的。
total(expression)=window_sum(expression)
running(expression)=window_sum(expression,first(),0)
移动平均=window_sum(expression,start,end)
- previous_value(expression) 返回前一个值
- lookup(expression,[offset]) 返回目标行的值
4.2 快速表计算
tableau内置了部分常用的表计算,称之为”快速表计算”,这些快速表计算视为预设好的表计算表达式,使用了上面介绍的lookup、first等快速表计算。
比如:总额百分比=sum([销售额])/total(sum([销售额]))
A 常见快速表计算
第一类的快速表计算与日期无关,常见的七种快速表计算的基本对应关系如下:
1.汇总=running_sum(sum([销售额]))
2.差异=zn(sum([销售额]))-lookup(zn(sum([销售额])),-1)
3.差异百分比=(zn(sum([销售额]))-lookup(zn(sum([销售额])),-1))/abs(lookup(zn(sum([销售额])),-1))
4.总额百分比=sum([销售额])/total(sum([销售额]))
5.排序=rank(sum([销售额]))
6.百分位=rank_percentile(sum([销售额]))
7.移动平均=window_avg(sum([销售额]),-2,0) (前两位到当前)
B 日期类快速表计算
另外四个快速表计算是基于连续时间的,其中前三个需要详细级别至少到”年”,当存在多个日期维度时,分区字段默认为最低的详细级别的字段,比如有年、季度,则以季度为计算。
使用日期类表计算有一个前提: 视图中必须有相应的日期字段
年度累计、年度同比:详细级别必须是 年
YTD累计、YTD同比:详细级别必须是想表达的D, 比如month或者day,不能是年
1.年度累计=running_sum(sum([销售额]))
2.复合增长率=power(zn(sum([销售额])) /lookup(zn(sum([销售额])),first)),zn(1/(index(-1)))-1
3.年度同比
C 特殊类—二次表计算
在表计算中,比较特殊的是最后一个”年度累计增长率”,YTD Growth,当我们添加这个表计算,并拖入到度量中时,会发现度量中出现了两个计算字段。中文下是”计算10″和”计算10 1″(10代表的是第10次通过拖动生成的计算字段)。为什么?因为年度累计增长率是二次表计算,虽然也可以在一个公式中表明,但这样更有助于用户看清楚。我们将两个表计算改成YTD SUM计算累计绝对值和YTD GROWTH累计增长率
累计绝对值=running_sum(sum([销售额]))
累计增长率=(zn([累计绝对值])-lookup(zn(累计绝对值)),-1))/abs(lookup(zn(累计绝对值)),-1))
五、总结
表计算是一种高效而快速的tableau计算,它有几个显而易见的好处:
-
不需要读取数据源,因此计算更快,真正的所见即所得
-
可以一个计算字段返回多个数值,因此在执行移动运算、递归运算、自身运算等情形下,是其他计算不可替代的
-
预设的快速计算和二次计算方法,基本满足大多数需求,无需代码开发,学习成本低
使用表计算,需要注意的地方:
-
表计算在操作顺序中的优先级低于所有的筛选器,因此调整筛选器后,表计算都会根据新的视图数据重新计算,因此要特别注意数据的详细级别,如果视图中没有了去年的数据,表计算的YTD就无法运行
-
编辑表计算时需要理解分区和寻址这两个概念,这是表计算的逻辑基础,分区隔离了表计算,寻址确定了运行的顺序。
Original: https://blog.csdn.net/weixin_48364917/article/details/124064132
Author: 李扬洋
Title: tableau计算之(三)表计算——分区/寻址——手动计算/快速计算
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694159/
转载文章受原作者版权保护。转载请注明原作者出处!