表计算进阶指南

表计算是Tableau中最强大的分析工具之一,它能够执行行与行之间、列与列之间的计算,帮助您发现数据中的关系和趋势。本教程将从基础到高级,全面讲解表计算的使用方法。

表计算基础

表计算与普通计算的最大区别在于:普通计算在数据库层面进行,而表计算在可视化结果中进行,对已经检索到的数据进行二次计算。

理解表计算的核心概念

表计算有三个关键要素:

  1. 计算类型:您要执行的计算(如累计求和、移动平均等)
  2. 计算方向:计算的执行路径(按行、按列等)
  3. 计算范围:计算应用的数据范围(表、窗格、特定维度等)

这三个要素共同决定了表计算的结果,理解它们是掌握表计算的关键。

常见表计算类型

Tableau提供了多种内置的表计算功能:

  1. 运行总计:累积计算度量值的总和
  2. 差异:当前值与其他值(如前一个值)的差异
  3. 百分比差异:以百分比形式显示差异
  4. 百分比:部分占总体的比例
  5. 百分位:数值在整体分布中的位置
  6. 移动计算:如移动平均、移动总和等
  7. 年初至今:从年初到当前日期的累计
  8. 复合增长率:一段时间内的平均增长率
  9. 排名:基于特定度量的排序位置
  10. 百分比排名:排名的百分比形式

快速表计算

Tableau提供了"快速表计算"功能,让您无需编写公式就能应用常见的表计算。

使用快速表计算的步骤

  1. 右键点击视图中的度量值
  2. 选择"添加表计算"
  3. 从菜单中选择所需的计算类型
  4. 在弹出的对话框中设置计算方向和范围

实用的快速表计算场景

场景1:销售同比增长

  1. 创建按季度显示销售额的视图
  2. 右键点击度量值 > 添加表计算 > 百分比差异
  3. 设置计算方向为"按表向下"或"在日期维度上计算"

场景2:销售占比分析

  1. 创建按产品类别显示销售额的视图
  2. 右键点击度量值 > 添加表计算 > 占总计百分比
  3. 设置计算方向为"表(向下)"

场景3:识别热门产品

  1. 创建产品销售额视图
  2. 右键点击度量值 > 添加表计算 > 排名
  3. 设置计算方向为"表(向下)"

了解计算方向

计算方向是表计算中最容易混淆的概念,但它对于获得正确的结果至关重要。

不同的计算方向选项

  1. 表(横穿):从左到右计算每一行
  2. 表(向下):从上到下计算每一列
  3. 表(横穿后向下):先横穿再向下计算
  4. 表(向下后横穿):先向下再横穿计算
  5. 特定维度:沿着特定维度计算

如何选择正确的计算方向

选择计算方向的简单方法:

  1. 思考您希望比较什么(如跨时间、跨区域等)
  2. 确定这些比较项在视图中的排列方式(行还是列)
  3. 选择与排列方向一致的计算方向

示例说明

  • 如果您想比较不同时间点的数据,而时间维度在列架上,应选择"表(横穿)"
  • 如果您想比较不同产品的数据,而产品维度在行架上,应选择"表(向下)"

自定义表计算

当快速表计算无法满足需求时,可以创建自定义表计算表达式。

常用的表计算函数

  1. LOOKUP(): 获取相对于当前行的其他行的值

    LOOKUP(SUM([销售额]), -1) // 返回前一行的销售额
    
  2. WINDOW_AVG(): 计算窗口内值的平均值

    WINDOW_AVG(SUM([销售额]), -2, 2) // 计算当前行及前后各2行的平均值
    
  3. RUNNING_SUM(): 计算累计总和

    RUNNING_SUM(SUM([销售额])) // 从第一行到当前行的累计销售额
    
  4. INDEX(): 返回当前行的索引值

    INDEX() // 返回当前行的序号,从1开始
    
  5. FIRST()LAST(): 返回分区中的第一个或最后一个值

    SUM([销售额]) / FIRST(SUM([销售额])) // 计算相对于第一个值的比率
    
  6. 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)

此计算先计算环比增长率,然后计算四个季度的平均值。

二次过滤

有时您可能需要基于表计算结果进行筛选,这称为二次过滤。

实现方法

  1. 创建表计算字段
  2. 右键点击字段 > 创建计算字段
  3. 在新字段中引用表计算结果
  4. 使用新字段作为筛选器

固定起点参考

某些分析需要固定一个参考点,如基准年份。

示例:相比基准年的增长

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法则)

  1. 按销售额对产品进行排序
  2. 计算累计百分比
  3. 标识贡献了80%销售的产品
RUNNING_SUM(SUM([销售额])) / TOTAL(SUM([销售额]))

表计算故障排除

常见问题和解决方案

  1. 计算结果不符合预期

    • 检查计算方向是否正确
    • 验证分区设置(计算范围)
    • 检查数据排序
  2. 表计算返回空值

    • 检查LOOKUP()函数的偏移值是否超出范围
    • 确认没有空分区
  3. 性能问题

    • 减少使用嵌套表计算
    • 考虑使用Level of Detail (LOD)表达式代替某些表计算
    • 优化视图中的维度数量

表计算与LOD表达式的选择

  • 使用表计算的情况:需要在可视化结果中进行行间计算,如同比增长
  • 使用LOD表达式的情况:需要在不同粒度级别计算,而不依赖于视图结构

相关内容