快速创建表计算
在你使用Table Calculation的绝大部分时间, 你不是通过先创建Calculated Field, 拖拽到右侧然后才创建Table Calculation的. Tableau提供了一种快速创建Table Calculation的方法. 你必须先了解这种创建方式才能更好的掌握Quick Table Calculation.
快速创建Running Total Sales 累计销售额
首先我在左侧创建一个最最简单的表, 基于Order Date订单日期的年份, 我的每年总销售额是多少钱. 然后接下来我想知道从2021年起, 我累计的销售额是多少.
从左边的这个截图我们可以知道, 2021年销售额是494,040, 2022年销售额是472,993 那么累计到2022年, 我的总销售额就是494,040 + 472,993= 967,033
那么右边的这个截图就是表计算创建成功之后所得到的结果.
在下边的这个动图中, 我将展示创建quick table calculation的全过程. 这个过程非常的快. Tableau的快速表计算极大的简化了创建的过程

Quick Table Calcultion的种类
在上边的动图当中, 你会发现当我选中Quick Table Calculation之后, 右侧会出现很多种选项, 我只是选了第一个, 但是你肯定想知道其他选项都代表什么, 那么在这个部分我来一一解释
左侧的这个截图里包含了你能使用Quick Table Calculation所能创建的所有的表计算类型.
第一 请注意, 我们现在所讲的叫快速表计算, 但是这不代表这里包含了所有的表计算类型
如果你想要学习所有的表计算类型, 打开我们前边提到过的搜索引擎, 然后选择Table Calculation. 那里会列出所有你能使用的表计算函数
第二 快速表计算依据你的表格中的数据不同, 能够激活的类型是不同的
在下边这个截图里, 当我把年份替换成Customer Name. 我再打开菜单, 选择Quick Table Calculation的时候, Compound Growth Rate和Year Over Year Growth这两个选项变灰了, 无法选择. 这就是因为我们的数据当中不再有年份这个概念
Difference: 与上一行的差值
Percent Difference: 与上一行同比
Percent Difference是一种非常重要的Table Calculation, 对应到报表上就是与去年相比我们提高了多少多少百分比. Percent Differnce是在Difference的基础上进一步计算.
2022年的Percent Difference是-4.26%. 它的计算方法就是先计算(2021 - 2022 ) / 2021. 这里需要注意的是我们除以的是前一年的销售额.
你的2022年的-4.26%是与前一年的494,040相比降低了4.26%, 因此你不能用-21,047除以472,993, 你除的是494,040 这里你一定要记住.
Percent of Total: 占总体百分比
这是一个非常好理解同时又非常常用的表计算, 通常配合Grand Total来使用. 下边的这个截图里第二列就是Percent of Total. 四年的销售额加起来是2.3个Million, 2022年占比最低20%左右,2024年最高, 贡献了超过32%
为了直观的展示Difference结果, 我把Sales和Difference的结果并列显示, 这样你能更直观的看到Difference返回的结果
2021年的Difference是空白的, 这是因为2021年是第一年, 它前边没有数据了, 它没有比较的对象所以是空值
2022年返回的-21,047是用2022年的销售额减去2021年的销售额
以此类推, 2023年的Difference是2023年的销售额减去2022年的销售额
注意⚠️ Distinct Count在计算Percent of Total的特殊性
接下来老师要给你看一个你不理解的Percent of Total
乍一眼看左边的这个表计算你是不是以为Tableau出错了. 在你使用Tableau的很多时候, 你都会有这样的疑问. Tableau的脑子是不是瓦塔了. 然而并没有. 不是所有的Percent of Total加起来都是百分百. 有一些计算的结果就是反直觉, 但是确实是正确的.
如果我把Difference转化为图表, 我们就可以直观的看到销售额的增长力度
为什么加起来不是100%? 理解Distinct Count的特殊性
首先我们看一下我们所创建的这个Table Calculation是什么意思. 但是在这之前, 我们先看看Distinct Count of Customer Name 这一列.
2021年 605人, 2022年577人, 四年总计800人.
那么最重要的一个问题就是为什么四年总计不是605 + 577 + 650 + 700 = 2532人呢?
Distinct Count就是数一数有多少不重复的customer. 假设一个消费者Adam连续四年在我们这里有订单, 2021年Adam会被记为1人, 2022年Adam还是会被记为1人.
到了总计的时候, 如果我们看从2021年到2024年加起来, 我们有多少个独特的消费者, Adam并不会被记为4人, 而还是1人, 这就是Distinct Count的Grand Total独特的地方.
回到数据中, 在2021年到2024年这四年中, 我们一共有过800位独特的消费者, 但是这些消费者可能每年都在我们这里消费过. 总计的时候,我们只能把回头客记成1次. 就是根本原因
因此Distinct Count不适合用Percent of Total来计算
Rank 排名
Rank是表计算当中非常重要的一种. 它的设置也很复杂. 这里我不想去过多的讨论Rank的设置, 在下一课我会着重提到.
下边的截图里就是最简单的一种. 我把销售额从高到低排列的花, 那么显然2024年的销售额排第一.
Rank 与 Top/Bottom N
在这里我要着重讲一下Rank的一个重要使用场景, 通常管这个叫做top/bottom N.
简单的说, 你的老板会经常说, 我先看看Top 10, Bottom 10 Customer都是谁, 谁在我们在买的最多, 谁在我们在买的最少.
或者看班级成绩, 谁是班里的前3名, 谁是倒数3名. 这些类型的需求通通都可以归类为top/bottom N需求. 那么在这个时候, Rank函数就要上场了, 通过给Rank函数加一个filter, 让rank小于等于3, 你就可以只保留列表的前三或者倒数前三
LOD计算不支持RANK, LOD计算里不支持RANK. RANK是一个Table Calculation
刚开始学习Tableau的同学可能暂时还不太理解这个标题的含义, 或者不太理解老师为什么把这一条单独拎出来讲.
想象一下, 如果我问你下面这个问题你会怎么办.
在整个数据集中, 每个category的销售额排名第三的顾客名字. 那么你是不是很想创建一个{Fixed [Category], [Customer]: RANK(SUM(Sales))} 这样的LOD, 这样我一filter这个值等于3就行了.
但是请记住, RANK是不能用在LOD里的. 根本原因是LOD只能聚合, 不考虑顺序
Percentile 百分位数
Percentile是一个统计学的测量值, 它是把所有的数值从小到大排列, 最小值就是0%, 最大值就是100%.
假设我们在人口统计当中可以得到每个人的收入, 那么首富的Percentile就是100%, 身无分文就是0%, 然后第二富有就是99.999%.
我们经常在新闻当中看到比如人口中前5%的人群收入在多少钱以上, 那么卡在这个线上的那个人的percentile就是95%. 在这个95%前边的都是比他富的
Percentile对于理解数据分布具有很重大的意义. 有一些图表是专门围绕着理解数据分布的, 而显示Percentile就非常的有帮助
Moving Average 移动平均值
移动平均值的概念算不上复杂, 但是这里肯定有同学第一次听说这个概念, 所以我先简单的介绍一下移动平均值的计算方法.
左边的这张截图里是2021年的一月份到2022年二月份的销售额. 我们现在想要计算三个月的移动平均销售额. 让我们来看看怎么算. 在移动平均值的这个名字当中, 最重要的就是这个moving移动的概念.
移动是指我们所计算平均值的取值范围是一直移动的. 我们以2021年2月份为例, 以这一月为基准, 我们有在这个月份前边的月份, 有在这个月份后边的月份. 假如我们在2月份前边取一个月,在2月份的后边取一个月,再加上2月份本月的销售额,我们就能得到一个3个月的Moving Average Sales.
以此类推
2021年二月的 3 Month Moving Average Sales = (14,518 + 4,520 + 56,934)/3 = 25,324
2021年三月的 3 Month Moving Average Sales = (4,520 + 56,934 + 28,295)/3 = 29,916
到了这里, 看上去好像都没什么问题. 那么接下来如果我说要计算四个月的moving average sales要怎么算呢? 你要取哪几个月呢?
这就涉及到了Moving Average最核心的问题, Date Range问题. 也就是说你在准备创建Moving Average的时候, 必须要清晰的知道相对于每一个月份, 你要计算的平均值是从哪开始, 从哪结束.
如果是四个月的话, 其实有非常多的可能性. 如果我管当前的月份叫做M0也就是Month Zero. 当前月份前边的月份我管它叫M-1, 再往前两个我叫M-2也就是当前月份减去两个月, M+1 就是当前月份加一个月的话. 那么相对于当前的月份, 你有从M-4到M+4一个巨大的范围供你选择.
在Tableau当中, 其实你是可以随意的去定义你想要计算的Moving Average所包含的日期范围. 在上边的这个截图当中, 每一种颜色就代表了一种可能的日期组合.
Moving Average的意义
Moving Average是股票中一种非常常见的统计方法, 它的主要作用是剔除那些已经离当前比较远的数据对今天的影响. 在一个较长的时间段内, 往往离今天已经比较远的日期的数据已经不如离今天近的数据所代表的意义大了, 那么我们单纯用整体的平均值不太能代表近期的情况了.
Moving Average在可视化层面还有另外一个作用就是平滑曲线
下面的这个截图,就是我把Monthly Sales和Moving Average Monthly Sales放在一个图中进行对比的效果. 如果我们仔细看, 下边的Moving Average这个曲线的陡峭程度比上边的原来的曲线平缓的多. 这主要是因为不管是最高值, 还是最低值, 都被取代为平均值, 那么自然数值只会变的更小.
小结
这一课呢我们就先讲到这里. 我们首先从概念上了解通用表计算是干什么用的, 大概长什么样. 有哪些需要注意的地方. 而下一课我们将开始介绍跟时间相关的四个表计算.