表计算进阶指南
表计算是Tableau中最强大的分析工具之一,它能够执行行与行之间、列与列之间的计算,帮助您发现数据中的关系和趋势。本教程将从基础到高级,全面讲解表计算的使用方法。
表计算基础
表计算与普通计算的最大区别在于:普通计算在数据库层面进行,而表计算在可视化结果中进行,对已经检索到的数据进行二次计算。
理解表计算的核心概念
表计算有三个关键要素:
- 计算类型:您要执行的计算(如累计求和、移动平均等)
- 计算方向:计算的执行路径(按行、按列等)
- 计算范围:计算应用的数据范围(表、窗格、特定维度等)
这三个要素共同决定了表计算的结果,理解它们是掌握表计算的关键。
常见表计算类型
Tableau提供了多种内置的表计算功能:
- 运行总计:累积计算度量值的总和
- 差异:当前值与其他值(如前一个值)的差异
- 百分比差异:以百分比形式显示差异
- 百分比:部分占总体的比例
- 百分位:数值在整体分布中的位置
- 移动计算:如移动平均、移动总和等
- 年初至今:从年初到当前日期的累计
- 复合增长率:一段时间内的平均增长率
- 排名:基于特定度量的排序位置
- 百分比排名:排名的百分比形式
快速表计算
Tableau提供了"快速表计算"功能,让您无需编写公式就能应用常见的表计算。
使用快速表计算的步骤
- 右键点击视图中的度量值
- 选择"添加表计算"
- 从菜单中选择所需的计算类型
- 在弹出的对话框中设置计算方向和范围
实用的快速表计算场景
场景1:销售同比增长
- 创建按季度显示销售额的视图
- 右键点击度量值 > 添加表计算 > 百分比差异
- 设置计算方向为"按表向下"或"在日期维度上计算"
场景2:销售占比分析
- 创建按产品类别显示销售额的视图
- 右键点击度量值 > 添加表计算 > 占总计百分比
- 设置计算方向为"表(向下)"
场景3:识别热门产品
- 创建产品销售额视图
- 右键点击度量值 > 添加表计算 > 排名
- 设置计算方向为"表(向下)"
了解计算方向
计算方向是表计算中最容易混淆的概念,但它对于获得正确的结果至关重要。
不同的计算方向选项
- 表(横穿):从左到右计算每一行
- 表(向下):从上到下计算每一列
- 表(横穿后向下):先横穿再向下计算
- 表(向下后横穿):先向下再横穿计算
- 特定维度:沿着特定维度计算
如何选择正确的计算方向
选择计算方向的简单方法:
- 思考您希望比较什么(如跨时间、跨区域等)
- 确定这些比较项在视图中的排列方式(行还是列)
- 选择与排列方向一致的计算方向
示例说明:
- 如果您想比较不同时间点的数据,而时间维度在列架上,应选择"表(横穿)"
- 如果您想比较不同产品的数据,而产品维度在行架上,应选择"表(向下)"
自定义表计算
当快速表计算无法满足需求时,可以创建自定义表计算表达式。
常用的表计算函数
-
LOOKUP(): 获取相对于当前行的其他行的值
LOOKUP(SUM([销售额]), -1) // 返回前一行的销售额
-
WINDOW_AVG(): 计算窗口内值的平均值
WINDOW_AVG(SUM([销售额]), -2, 2) // 计算当前行及前后各2行的平均值
-
RUNNING_SUM(): 计算累计总和
RUNNING_SUM(SUM([销售额])) // 从第一行到当前行的累计销售额
-
INDEX(): 返回当前行的索引值
INDEX() // 返回当前行的序号,从1开始
-
FIRST() 和 LAST(): 返回分区中的第一个或最后一个值
SUM([销售额]) / FIRST(SUM([销售额])) // 计算相对于第一个值的比率
-
TOTAL(): 返回整个表或分区的总和
SUM([销售额]) / TOTAL(SUM([销售额])) // 计算占总体的百分比
自定义表计算示例
示例1:两年前的同期比较
(SUM([销售额]) - LOOKUP(SUM([销售额]), -24)) / LOOKUP(SUM([销售额]), -24)
此计算假设每月有一个数据点,比较当前月与两年前同月的销售差异。
示例2:滚动12月总和
WINDOW_SUM(SUM([销售额]), -11, 0)
此计算返回包括当前月在内的过去12个月的总销售额。
示例3:市场份额变化
SUM([销售额]) / TOTAL(SUM([销售额])) - LOOKUP(SUM([销售额]) / TOTAL(SUM([销售额])), -1)
此计算显示市场份额相比上期的变化。
高级表计算技巧
嵌套表计算
表计算可以嵌套使用,解决更复杂的分析问题。
示例:季度环比增长的年度平均值
WINDOW_AVG((SUM([销售额]) - LOOKUP(SUM([销售额]), -1)) / LOOKUP(SUM([销售额]), -1), 0, 3)
此计算先计算环比增长率,然后计算四个季度的平均值。
二次过滤
有时您可能需要基于表计算结果进行筛选,这称为二次过滤。
实现方法:
- 创建表计算字段
- 右键点击字段 > 创建计算字段
- 在新字段中引用表计算结果
- 使用新字段作为筛选器
固定起点参考
某些分析需要固定一个参考点,如基准年份。
示例:相比基准年的增长
SUM([销售额]) / LOOKUP(SUM([销售额]), FIRST()+0) - 1
此计算显示相比第一年的增长百分比。
常见应用场景
同环比分析
年同比增长:比较当前年份与去年同期的差异
(SUM([销售额]) - LOOKUP(SUM([销售额]), -4)) / LOOKUP(SUM([销售额]), -4)
假设按季度显示,-4表示去年同季度。
环比增长:比较当前期间与上一期间的差异
(SUM([销售额]) - LOOKUP(SUM([销售额]), -1)) / LOOKUP(SUM([销售额]), -1)
累计分析
年累计:从年初到当前日期的累计值
RUNNING_SUM(IF DATEPART('year', [订单日期]) = DATEPART('year', TODAY()) THEN SUM([销售额]) END)
累计贡献占比:展示项目价值累积到总体的百分比
RUNNING_SUM(SUM([销售额])) / TOTAL(SUM([销售额]))
贡献分析
帕累托分析(80/20法则):
- 按销售额对产品进行排序
- 计算累计百分比
- 标识贡献了80%销售的产品
RUNNING_SUM(SUM([销售额])) / TOTAL(SUM([销售额]))
表计算故障排除
常见问题和解决方案
-
计算结果不符合预期
- 检查计算方向是否正确
- 验证分区设置(计算范围)
- 检查数据排序
-
表计算返回空值
- 检查LOOKUP()函数的偏移值是否超出范围
- 确认没有空分区
-
性能问题
- 减少使用嵌套表计算
- 考虑使用Level of Detail (LOD)表达式代替某些表计算
- 优化视图中的维度数量
表计算与LOD表达式的选择
- 使用表计算的情况:需要在可视化结果中进行行间计算,如同比增长
- 使用LOD表达式的情况:需要在不同粒度级别计算,而不依赖于视图结构