🦄Tableau 教程与入门笔记

1. 快速上手(10 分钟)

  1. 连接数据:打开 Tableau → 连接 Excel/CSV/数据库 → 选中 Orders 表。
  2. 模型选择:

    • Relationships(关系):默认、宽松耦合,保留各表粒度。
    • Joins(联接):行级拼接(内/左/右/全),易产生重复行。
    • Blend(混合):历史产物,尽量少用。
  3. 画出第一张图:把 Sales 拖到Sub-Category 拖到 → 条形图。
  4. 上色与排序:把 Profit 放到颜色;点工具栏排序。
  5. 快速仪表板:新建仪表板 → 拖入工作表 → 添加筛选器(Region、Order Date)。

2. 基础概念(一口气弄明白)

  • 维度 / 度量:切片维度、计算度量。
  • 离散 / 连续:蓝色=离散(分类/刻度),绿色=连续(轴)。
  • 标记卡(Marks):颜色、大小、标签、细节、形状。
  • Show Me:图表建议器,别迷信,学会手搓。

3. 常用图表与场景

  • 条形图:排行、占比、Top-N。
  • 折线图:时间序列、季节性。
  • 散点图:相关性(Sales vs Profit)。
  • 箱线图:异常值。
  • 地图:地区对比、密度热力。
  • 甘特/瀑布:进度与构成变化。
经验:图表越简单,洞察越清晰。避免一次性放太多维度。

4. 实战:高层业绩总览仪表板(Superstore)

目标:面向管理层,1 屏回答:卖得如何、利润如何、哪里好/差、应该做什么。

步骤

  1. KPI 卡:SUM(Sales)SUM(Profit)COUNTD(Order ID)Profit Ratio = SUM([Profit])/SUM([Sales])
  2. 趋势:MONTH(Order Date) → 列,Sales → 行,添加移动平均(表计算→移动平均→窗口=3)。
  3. 类别排行:Sales vs Sub-Category 条形图,颜色映射 Profit
  4. 地图:State → 视图,Sales → 颜色;双轴叠加 Profit 圆点强调亏损州。
  5. 交互:

    • 筛选器:时间、地区、类别。
    • 筛选动作:点击地图筛下方表。
    • 高亮动作:鼠标悬停突出目标州。
  6. 工具提示(Tooltip):

    • 添加 Profit Ratio,并插入一个 Sub-Category 的小型条形 Viz in Tooltip
  7. 导航:添加按钮在仪表板间跳转(概览 ↔ 明细深钻)。

5. 计算字段(Calcs)

基础

IF [Profit] < 0 THEN "亏损" ELSE "盈利" END

日期

DATEDIFF('day',[Order Date],[Ship Date]) // 运输天数

字符串

UPPER([Region])

聚合 vs 非聚合

// 正确(聚合对聚合)
SUM([Profit]) / SUM([Sales])

6. 参数(Parameters)

  • 用途:动态阈值、Top-N、指标切换、场景模拟。
  • 示例:Top N 选择器

    1. 建参数 p.TopN(整数)。
    2. 集合/计算:
INDEX() <= [p.TopN]
  1. 排序后在过滤器/颜色中使用。
  • 示例:指标切换
CASE [p.Metric]
WHEN 'Sales' THEN SUM([Sales])
WHEN 'Profit' THEN SUM([Profit])
ELSE SUM([Quantity])
END

7. 表计算(Table Calculations)

  • 本质:对结果表做二次计算。注意 寻址/分区(Addressing/Partitioning)
  • 常用配方:
// 累计
RUNNING_SUM(SUM([Sales]))

// 同比 YoY
(SUM([Sales]) - LOOKUP(SUM([Sales]), -12)) / LOOKUP(SUM([Sales]), -12)

// 环比 MoM\ n(SUM([Sales]) - LOOKUP(SUM([Sales]), -1)) / LOOKUP(SUM([Sales]), -1)

// 排名
RANK_DENSE(SUM([Sales]))
技巧:右键表计算 → 编辑 → 指定维度,搞清“按什么顺序滚动”。

8. LOD 表达式(Level of Detail)

用来在不同粒度上先聚合再回到当前视图,绕过维度过滤器的影响。

  • FIXED:与视图无关,按指定维度聚合。
// 每个客户的总销售额(与视图无关)
{ FIXED [Customer ID] : SUM([Sales]) }
  • INCLUDE:在当前视图粒度上增加维度再聚合。
// 先到 产品级,再回到视图
{ INCLUDE [Product Name] : SUM([Sales]) }
  • EXCLUDE:从视图粒度移除维度再聚合。
// 忽略子类,计算类别层级的总销售
{ EXCLUDE [Sub-Category] : SUM([Sales]) }
  • 经典题:首单日期
{ FIXED [Customer ID] : MIN([Order Date]) }
  • 与过滤器关系:维度过滤器在 LOD 之后生效;上下文过滤器在 LOD 之前生效。

9. 地图与空间

  • 字段设为地理角色(国家/省/州/邮编/经纬度)。
  • 双轴地图:底层填色州界 + 顶层利润气泡;同步轴。
  • 密度图:高频点位更亮。

10. 动作与可用性

  • 筛选动作:主从联动深钻。
  • 高亮动作:点亮同类。
  • URL 动作:跳业务系统。
  • 集合动作:拖拽即分群,做“选中 vs 其他”。
  • 按钮导航:多页故事化表达。

11. 性能与工程实践

  • 优先 Extract(提取),必要时增量刷新;减少字段与行数。
  • 降低 标记数(Marks),尽量聚合到可读粒度。
  • 少用嵌套表计算与过度 LOD;能在源头算就别在前端算。
  • 大筛选器设置为上下文过滤器,避免每次全表扫描。
  • 使用 Describe、Performance Recording 排查慢点。

12. 发布与协作

  • 发布 数据源工作簿 到 Server/Online。
  • 设定权限、数据刷新计划、订阅与警报。
  • 版本化命名:proj_dashboard_YYYYMMDD_vX

13. 常见坑

  • 维度过多导致重复计算与“爆表”的行数。
  • 混合数据源的度量默认 聚合方式不同(SUM vs AVG)。
  • 时间维度“连续/离散”切换导致轴/粒度变化。
  • 地理角色不对 → 地图打不出来。

14. 练习路线(30 天×20 分钟)

  • 第 1 周:基本图表 + 仪表板;重做官方示例。
  • 第 2 周:表计算 + 参数;做同比/环比 + Top-N 控制。
  • 第 3 周:LOD + 地图;实现首单/复购、利润预警地图。
  • 第 4 周:性能优化 + 发布;做一次从数据到上线的闭环。

15. 速查表(Cheat Sheet)

  • 时间序列同比LOOKUP(SUM([Sales]), -12)
  • 利润率SUM([Profit]) / SUM([Sales])
  • 前 NINDEX() <= [p.TopN]
  • 客单价SUM([Sales]) / COUNTD([Order ID])
  • 客户 LTV(粗略){FIXED [Customer ID]: SUM([Profit])}

16. 实战练习题

  1. 亏损产品清单:找出 Profit < 0Product Name,按亏损额排序,并给出 Top-10。
  2. 州别拉力图:各州 Sales-Profit 双轴图,筛选 Category
  3. 复购漏斗:计算每客户首单到二单的平均间隔,按州比较。
完成上述 3 题,你已经具备 80% 的日常 Tableau 战斗力。剩下的 20%,来自具体业务与审美。

实战题 · 详细解法

1) 亏损产品清单(Top-10)

目标:找出 全年总利润 < 0 的产品,并按亏损额从大到小排序取前 10。

计算字段

  1. Profit per Product (LOD)
{ FIXED [Product Name] : SUM([Profit]) }
  1. Is Loss Product
[Profit per Product (LOD)] < 0
  1. Loss Amount
IF [Profit per Product (LOD)] < 0 THEN -[Profit per Product (LOD)] END

做图步骤

  • Product Name 放到Loss Amount 放到
  • 添加过滤器:Is Loss Product = True
  • 排序:按 Loss Amount 降序
  • 取 Top-10:

    • 方式 A:在 Product Name 维度 → 筛选器 → TopBy Field 选择 Loss AmountTop 10
    • 方式 B:保留排序,直接在标记数上显示前 10(或用集合/参数控制)。
  • 标记卡:颜色 使用 Loss Amount 连续上色;标签 显示 Loss Amount,格式为货币/千分位。
注意:不要用行级 Profit < 0 当过滤器,那样会把同一产品的盈利订单排掉,导致总利润被误算。用 FIXED LOD 才能锁定“产品总利润”的真实亏损。

2) 州别拉力图(Sales–Profit 双轴 + Category 筛选)

目标:各州展示销售额与利润的拉力对比,便于识别“高销售但低利润/亏损”的州;支持按 Category 过滤。

做图步骤(组合双轴)

  1. State
  2. SUM(Sales)(标记类型:条形)。
  3. SUM(Profit) 拖到右侧轴,形成 双轴(Dual Axis),右键 同步轴(Synchronize Axis)。
  4. 把右侧轴的标记类型改为 圆形折线+圆点,并在 颜色 上用分段/发散色强调亏损(或 Profit < 0 的颜色单独指定)。
  5. 筛选器加入 Category(分类),设置为多选并在仪表板上显示。
  6. 排序:按 SUM(Sales)SUM(Profit) 排序,帮助识别头尾州。
  7. 工具提示(Tooltip):显示 SalesProfitProfit Ratio = SUM([Profit])/SUM([Sales]);可加阈值图标(如利润率 < 5% 标红)。

可选美化

  • State标签上显示 Profit,对负值加“▼”前缀:
IF SUM([Profit]) < 0 THEN "▼ " + STR(ROUND(SUM([Profit]),0)) ELSE STR(ROUND(SUM([Profit]),0)) END
  • 加一个“只看亏损州”的布尔参数,控制筛选:
IF [p.OnlyLoss] THEN SUM([Profit]) < 0 ELSE TRUE END

3) 复购漏斗:首单→二单平均间隔(按州)

目标:计算每位客户从首单到第二单的天数,统计到州(State)层级取平均,用于评估复购速度地域差异。

核心思路(纯 LOD,避免表计算寻址复杂度)

  1. First Order Date(每客户)
{ FIXED [Customer ID] : MIN([Order Date]) }
  1. Second Order Date(每客户)
先找出大于首单日期的最早订单日期:
{ FIXED [Customer ID] :
    MIN( IF [Order Date] > { FIXED [Customer ID] : MIN([Order Date]) } THEN [Order Date] END )
}
  1. Days: First→Second
IF ISNULL([Second Order Date(每客户)]) THEN NULL
ELSE DATEDIFF('day', [First Order Date(每客户)], [Second Order Date(每客户)]) END
  1. (可选)过滤掉没有二单的客户:
NOT ISNULL([Second Order Date(每客户)])

汇总到州

  • 视图粒度:StateAVG([Days: First→Second])(或标签)。
  • 如果一个客户在多个州下单,建议以首单所在州归属。可新增:

First Order State

{ FIXED [Customer ID] : MIN( IF [Order Date] = { FIXED [Customer ID] : MIN([Order Date]) } THEN [State] END ) }

然后用 First Order State 代替 State 进入视图。

可视化建议

  • 条形图 + 误差线:条高为 AVG(Days),在工具提示显示样本量 COUNTD([Customer ID])
  • 增加筛选器:时间范围(基于 Order Date)、Category(如果你认为品类会影响复购)。

质量与性能小贴士

  • LOD 会受 上下文过滤器 影响:需先对 Order DateCategory 等设置为上下文以加速且保证复购计算的口径一致。
  • 数据量很大时,考虑将上述 LOD 预计算到数据源(例如在 ETL 中生成首/二单日期)。

新增 · 10 道实战题(含关键计算与做图要点)

默认数据集:Superstore。除特别说明外,粒度与口径均以订单行(Row)为基础,可在仪表板添加时间/地区/品类筛选器。

4) ABC 分类(产品级)

目标:按年度销售额将产品分为 A/B/C(如 A=前 70%,B=中间 20%,C=后 10%),做结构优化。

参数p.AShare=0.7p.BShare=0.2

计算

// 产品总销售
[Sales per Product] = { FIXED [Product Name] : SUM([Sales]) }
// 按产品降序后的累计占比(表计算,寻址:产品)
[Cum Share] = RUNNING_SUM([Sales per Product]) / WINDOW_SUM([Sales per Product])
// 分类
[ABC Class] = IF [Cum Share] <= [p.AShare] THEN "A"
ELSEIF [Cum Share] <= [p.AShare]+[p.BShare] THEN "B" ELSE "C" END

做图:产品条形图(按 [Sales per Product] 降序),颜色映射 [ABC Class];再做“类别 × 区域”的树状/矩阵查看分布。


5) 帕累托 80/20(客户级)

目标:检验“少数客户贡献大部分销售”,并找出关键客户清单。

计算

[Sales per Customer] = { FIXED [Customer ID] : SUM([Sales]) }
// 销售累计占比(按客户降序)
[Sales Cum%] = RUNNING_SUM([Sales per Customer]) / WINDOW_SUM([Sales per Customer])
// 客户累计占比
[Cust Cum%] = RUNNING_COUNTD([Customer ID]) / SIZE()

做图:双轴—左轴客户按销售降序的条形,右轴绘制 [Sales Cum%] 折线;在 80% 处加参考线并高亮对应客户列表。


6) 折扣弹性(品类/子类)

目标:评估平均折扣与利润率的关系,识别“折扣换量不增利”的品类。

计算

[Avg Discount] = AVG([Discount])
[Profit Ratio] = SUM([Profit]) / SUM([Sales])

做图Sub-Category 级散点(X=[Avg Discount],Y=[Profit Ratio],点大小按 Sales),开启趋势线(线性)并显示 ;右侧加 Top-N 明细表。


7) 退货率分析(需要引入 Returns 表)

目标:量化并定位高退货率的品类/州/客户。

建模:用 RelationshipOrders.[Order ID]Returns.[Order ID] 关联。

计算

// 订单是否被退货(关系下可引用 Returns 侧的键)
[Is Returned] = { FIXED [Order ID] : COUNT([Order ID (Returns)]) } > 0
[Return Rate] = SUM( INT([Is Returned]) ) / COUNTD([Order ID])

做图:州地图 + 退货率颜色;或 Sub-Category 条形按 [Return Rate] 降序;工具提示展示退货订单数。


8) 出货时效与 SLA 违约

目标:监控下单到发货天数,量化 SLA 超时率 并定位问题渠道/地区。

参数p.SLA_Days = 2

计算

[Days to Ship] = DATEDIFF('day',[Order Date],[Ship Date])
[SLA Breach] = [Days to Ship] > [p.SLA_Days]
[Breach Rate] = SUM(INT([SLA Breach])) / COUNTD([Order ID])

做图

  • 箱线图:Ship Mode × [Days to Ship](查看分布与异常)。
  • 条形/地图:State × [Breach Rate],加参考线 p.SLA 目标。

9) 价格带直方图(Unit Price Bins)

目标:理解价格分布与销量,发现合适的价格带。

计算

// 行级单价,再求平均避免“总额/总量”偏差
[Row Unit Price] = [Sales] / [Quantity]
[Avg Unit Price] = AVG([Row Unit Price])

做图:对 [Row Unit Price] 创建 Bins(如 5 美元一档);绘制直方图(列=Bins,行=SUM(Quantity) 或 COUNT)并加入 Sub-Category 颜色或面板分面。


10) 客户 RFM 分群

目标:基于最近一次消费(R)、购买频次(F)、消费金额(M)将客户打分分群。

参数p.AsOfDate = TODAY() 或设为 MAX([Order Date])

计算

[Last Order Date] = { FIXED [Customer ID] : MAX([Order Date]) }
[Recency Days]    = DATEDIFF('day',[Last Order Date],[p.AsOfDate])
[Freq Orders]     = { FIXED [Customer ID] : COUNTD([Order ID]) }
[Monetary Sales]  = { FIXED [Customer ID] : SUM([Sales]) }
// 3 档打分:使用百分位表计算(在客户维度上寻址)
[R_Score] = CEILING( (1 - RANK_PERCENTILE([Recency Days])) * 3 )
[F_Score] = CEILING( RANK_PERCENTILE([Freq Orders]) * 3 )
[M_Score] = CEILING( RANK_PERCENTILE([Monetary Sales]) * 3 )
[RFM]     = STR([R_Score]) + STR([F_Score]) + STR([M_Score])

做图R×F 的热力图,颜色按 M 或客户数;再配 RFM 细分人群明细表。


11) 运费异常与利润侵蚀

目标:识别运费过高导致的利润侵蚀,定位异常州/运输方式。

计算

[Ship Cost Ratio] = SUM([Shipping Cost]) / SUM([Sales])

做图State × [Ship Cost Ratio] 条形/地图,叠加 Profit Ratio 作为颜色或双轴;在 Ship Mode 维度下切片,标注 Top 异常。


12) 利润预警地图(象限)

目标:二元象限划分州:销量高/低 × 利润率高/低,突出“高销低利”。

参数p.SalesMin(如 50K)、p.ProfitRatioMin(如 5%)。

计算

[Profit Ratio] = SUM([Profit]) / SUM([Sales])
[Quadrant] =
IF SUM([Sales]) >= [p.SalesMin] AND [Profit Ratio] < [p.ProfitRatioMin] THEN "高销低利"
ELSEIF SUM([Sales]) >= [p.SalesMin] AND [Profit Ratio] >= [p.ProfitRatioMin] THEN "高销高利"
ELSEIF SUM([Sales]) < [p.SalesMin] AND [Profit Ratio] < [p.ProfitRatioMin] THEN "低销低利"
ELSE "低销高利" END

做图:州填色地图颜色按 [Quadrant];仪表板加“只看高销低利”切换。


13) 利润贡献瀑布图(子类)

目标:分解总利润由各子类带来的增减变化,直观看到拖后腿的子类。

计算(表计算为主,按子类降序寻址)

[Profit by SubCat] = SUM([Profit])
[Running Base] = RUNNING_SUM( LOOKUP([Profit by SubCat], -1) )
[Step Start]   = ZN([Running Base])
[Step End]     = [Step Start] + [Profit by SubCat]

做图:Gantt(大小= [Profit by SubCat],起点=[Step Start]),颜色按正负;排序按贡献绝对值;总计做参考线。


14) 同期对比 + 目标追踪(时间序列)

目标:月度销售 YoY 对比,并与年度目标增速对齐,构建 KPI 追踪。

参数p.TargetYoY = 0.12(年度目标增长 12%)。

计算

[Sales] // 直接用
[Sales YoY] = LOOKUP(SUM([Sales]), -12)
[YoY %]     = ( SUM([Sales]) - [Sales YoY] ) / [Sales YoY]
// 目标线(以去年同月为基准的目标值)
[Target Sales] = [Sales YoY] * (1 + [p.TargetYoY])

做图:月度折线(实际 vs [Target Sales] 双线);次轴显示 [YoY %] 柱状;对低于目标的月份高亮。


15) 首购月 Cohort 留存热力图

目标:以“首购月份”为队列,观察后续各月的复购率。

计算

[First Order Month] = DATETRUNC('month', { FIXED [Customer ID] : MIN([Order Date]) })
[Order Month]       = DATETRUNC('month', [Order Date])
[Month Index]       = DATEDIFF('month', [First Order Month], [Order Month])
// 当期是否复购(每客户×月)
[Active Flag] = { FIXED [Customer ID], [Order Month] : COUNTD([Order ID]) } > 0
// 留存率(表计算,分区=First Order Month,寻址=Month Index)
[Retention %] = SUM( INT([Active Flag]) ) / WINDOW_MAX( SUM( INT([Active Flag]) ) )

做图:行=[First Order Month],列=[Month Index],颜色=[Retention %] 的热力图;加筛选器限定观察窗口。

数据集下载: 链接:https://pan.quark.cn/s/d2d1a3e30d1a 提取码:xnvE

添加新评论