Tableau 核心功能
问题
Tableau 的核心分析能力是什么?计算字段和 LOD 表达式怎么用?
答案
Tableau 基础概念
| 概念 | 说明 |
|---|---|
| 维度(Dimension) | 分类字段(地区、产品线),用于分组 |
| 度量(Measure) | 数值字段(收入、数量),用于聚合计算 |
| 工作表(Sheet) | 单个图表 |
| 仪表板(Dashboard) | 多个工作表组合成看板 |
| 故事(Story) | 按顺序组织的多个仪表板 |
计算字段
Tableau 计算字段示例
-- 利润率
[利润] / [收入]
-- 同比增长率
(SUM([本期收入]) - LOOKUP(SUM([收入]), -1)) / LOOKUP(SUM([收入]), -1)
-- 条件判断
IF [利润率] >= 0.3 THEN "高利润"
ELSEIF [利润率] >= 0.1 THEN "中利润"
ELSE "低利润"
END
-- 日期截断
DATETRUNC('month', [订单日期])
-- 字符串拼接
[城市] + " - " + [区域]
LOD 表达式(Level of Detail)
LOD 是 Tableau 的核心高级功能,允许在不同粒度计算聚合。
| 类型 | 语法 | 作用 |
|---|---|---|
FIXED | {FIXED [维度] : AGG([度量])} | 忽略视图粒度,按指定维度聚合 |
INCLUDE | {INCLUDE [维度] : AGG([度量])} | 在视图粒度基础上增加维度 |
EXCLUDE | {EXCLUDE [维度] : AGG([度量])} | 在视图粒度基础上去掉维度 |
LOD 表达式示例
-- 每个客户的总消费(FIXED 到客户粒度)
{FIXED [客户名称] : SUM([销售额])}
-- 每个客户的首次购买日期
{FIXED [客户ID] : MIN([订单日期])}
-- 留存分析:首次购买月份
DATETRUNC('month', {FIXED [客户ID] : MIN([订单日期])})
-- 各区域中每个产品的占比
SUM([销售额]) / {FIXED [区域] : SUM([销售额])}
LOD 应用场景
- 客户分析:客户首次购买、LTV、购买频次
- 留存分析:按首次购买月分群
- 占比计算:品类占总收入的比例
- 对比分析:各门店 vs 全国平均
表计算
| 函数 | 作用 | 示例 |
|---|---|---|
RUNNING_SUM | 累计求和 | 累计收入 |
LOOKUP | 前后值引用 | 同比/环比 |
RANK | 排名 | 产品排名 |
WINDOW_AVG | 窗口平均 | 移动平均 |
INDEX | 行号 | Top N 筛选 |
Tableau 最佳实践
| 实践 | 说明 |
|---|---|
| Extract 而非 Live | 大数据量用 Extract 提升性能 |
| 善用参数 | 让用户动态切换维度/度量 |
| 集(Sets) | 用于 Top N、交叉对比 |
| 操作(Action) | 实现图表联动和下钻 |
| 布局容器 | 水平/垂直容器控制仪表板布局 |
常见面试问题
Q1: LOD 表达式中 FIXED/INCLUDE/EXCLUDE 有什么区别?
答案:
- FIXED:完全忽略视图中的维度,只按指定维度聚合(最常用)
- INCLUDE:在视图维度的基础上额外按指定维度聚合
- EXCLUDE:在视图维度中去掉指定维度后聚合
- 经验:90% 以上场景用 FIXED 就够了
Q2: Tableau 如何实现同比/环比?
答案:
- 快速方式:右键度量 → 快速表计算 → 年同比增长(YoY)
- 计算字段:
LOOKUP(SUM([收入]), -1)引用前一个值 - 日期计算:
DATEADD('year', -1, [日期])获取去年同期
Q3: Tableau 性能优化有哪些方法?
答案:
- 用 Extract 替代 Live 连接
- 减少工作表中的标记数(< 10 万个点)
- 避免在高基数字段上使用 LOD
- 用上下文筛选器(Context Filter)提前过滤
- 减少仪表板中的工作表数量(< 10 个)