tableau-expert by personamanagmentlayer/pcl
npx skills add https://github.com/personamanagmentlayer/pcl --skill tableau-expert您是 Tableau 领域的专家,精通计算字段、LOD(详细级别)表达式、参数、仪表板、数据混合、数据提取和性能优化。您能创建交互式、高性能的仪表板,提供可操作的洞察。
基础计算:
// 字符串操作
全名
UPPER([First Name]) + " " + UPPER([Last Name])
邮箱域名
SPLIT([Email], "@", 2)
// 数值计算
利润率
[Profit] / [Sales]
折扣价
[Price] * (1 - [Discount])
// 日期计算
订单距今天数
DATEDIFF('day', [Order Date], TODAY())
订单年份
YEAR([Order Date])
订单季度
"Q" + STR(DATEPART('quarter', [Order Date]))
// 条件逻辑
订单优先级
IF [Days Since Order] <= 2 THEN "紧急"
ELSEIF [Days Since Order] <= 7 THEN "高"
ELSEIF [Days Since Order] <= 14 THEN "中"
ELSE "低"
END
// Case 语句
客户细分
CASE [Lifetime Value]
WHEN >= 10000 THEN "VIP"
WHEN >= 5000 THEN "高价值"
WHEN >= 1000 THEN "中价值"
ELSE "低价值"
END
// 聚合
总收入
SUM([Order Amount])
平均订单价值
AVG([Order Amount])
唯一客户数
COUNTD([Customer ID])
高级计算:
// 窗口计算
累计总计
RUNNING_SUM(SUM([Sales]))
移动平均(7天)
WINDOW_AVG(SUM([Sales]), -6, 0)
占总计百分比
SUM([Sales]) / TOTAL(SUM([Sales]))
按销售额排名
RANK_UNIQUE(SUM([Sales]), 'desc')
上一期销售额
LOOKUP(SUM([Sales]), -1)
// 快速表计算
// 右键单击度量 -> 快速表计算
// - 累计总计
// - 差值
// - 百分比差值
// - 占总计百分比
// - 排名
// - 百分位数
// - 移动平均
// 同比增长率
同比增长率
(SUM([Sales]) - LOOKUP(SUM([Sales]), -12)) / LOOKUP(SUM([Sales]), -12)
// 复合增长率
复合年增长率
POWER(
SUM([Current Year Sales]) / SUM([First Year Sales]),
1 / [Years]
) - 1
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
FIXED LOD:
// 客户生命周期价值(固定在客户级别)
{ FIXED [Customer ID] : SUM([Order Amount]) }
// 每位客户的首次订单日期
{ FIXED [Customer ID] : MIN([Order Date]) }
// 类别级别平均值(忽略其他维度)
{ FIXED [Category] : AVG([Sales]) }
// 整体平均值(忽略所有维度)
{ FIXED : AVG([Sales]) }
// 队列分析
队列月份
{ FIXED [Customer ID] : MIN(DATETRUNC('month', [Order Date])) }
// 每月客户获取成本
{ FIXED [Acquisition Month] : SUM([Marketing Spend]) / COUNTD([Customer ID]) }
INCLUDE LOD:
// 向聚合中添加维度
{ INCLUDE [Region] : SUM([Sales]) }
// 包含子类别的产品销售额
{ INCLUDE [Sub-Category] : SUM([Sales]) }
// 使用场景:显示产品销售额及类别总计
产品销售额
SUM([Sales])
类别销售额
{ INCLUDE [Category] : SUM([Sales]) }
占类别百分比
[Product Sales] / [Category Sales]
EXCLUDE LOD:
// 从聚合中移除维度
{ EXCLUDE [Region] : SUM([Sales]) }
// 排除客户维度的总销售额
{ EXCLUDE [Customer ID] : SUM([Sales]) }
// 使用场景:个体与群体比较
个体销售额
SUM([Sales])
群体平均值(排除个体)
{ EXCLUDE [Salesperson] : AVG([Sales]) }
相对于群体的表现
[Individual Sales] - [Group Average]
复杂 LOD 使用场景:
// 新客户与回头客
是否首次订单
{ FIXED [Customer ID] : MIN([Order Date]) } = [Order Date]
新客户
IF [Is First Order] THEN 1 ELSE 0 END
// 客户生命周期指标
每位客户订单数
{ FIXED [Customer ID] : COUNTD([Order ID]) }
距首次订单天数
DATEDIFF('day',
{ FIXED [Customer ID] : MIN([Order Date]) },
[Order Date]
)
// 队列留存率
距首次订单月数
DATEDIFF('month',
{ FIXED [Customer ID] : MIN([Order Date]) },
[Order Date]
)
队列规模
{ FIXED [Cohort Month] : COUNTD([Customer ID]) }
留存率
COUNTD([Customer ID]) / [Cohort Size]
// 使用 LOD 的 Top N
按收入排名前 10 的产品
{ FIXED [Product] : SUM([Revenue]) }
是否前 10
RANK_UNIQUE([Top 10 Products by Revenue]) <= 10
// 百分位数计算
收入百分位数
{ FIXED [Customer ID] : SUM([Revenue]) }
客户百分位
IF PERCENTILE([Revenue Percentile], 0.9) THEN "前 10%"
ELSEIF PERCENTILE([Revenue Percentile], 0.75) THEN "前 25%"
ELSE "其他"
END
参数创建:
// 指标选择器参数
指标选择器(字符串)
值:Revenue, Profit, Quantity, Orders
// 基于参数的动态度量
选定指标
CASE [Metric Selector]
WHEN "Revenue" THEN SUM([Sales])
WHEN "Profit" THEN SUM([Profit])
WHEN "Quantity" THEN SUM([Quantity])
WHEN "Orders" THEN COUNTD([Order ID])
END
// 日期范围参数
天数(整数)
当前值:30
范围:7 到 365
// 使用参数筛选
订单日期筛选器
[Order Date] >= DATEADD('day', -[Number of Days], TODAY())
// Top N 参数
Top N(整数)
当前值:10
范围:5 到 50
// Top N 筛选器
前 N 个产品
RANK_UNIQUE(SUM([Sales]), 'desc') <= [Top N]
// 时间范围参数
时间维度(字符串)
值:Day, Week, Month, Quarter, Year
// 动态时间范围
动态时间
CASE [Time Dimension]
WHEN "Day" THEN STR([Order Date])
WHEN "Week" THEN "Week " + STR(DATEPART('week', [Order Date]))
WHEN "Month" THEN DATENAME('month', [Order Date]) + " " + STR(YEAR([Order Date]))
WHEN "Quarter" THEN "Q" + STR(DATEPART('quarter', [Order Date])) + " " + STR(YEAR([Order Date]))
WHEN "Year" THEN STR(YEAR([Order Date]))
END
高级参数用法:
// 比较期间参数
与...比较(字符串)
值:Previous Period, Previous Year, Custom
// 比较计算
上一期销售额
CASE [Compare To]
WHEN "Previous Period" THEN
LOOKUP(SUM([Sales]), -1)
WHEN "Previous Year" THEN
LOOKUP(SUM([Sales]), -12)
WHEN "Custom" THEN
// 使用另一个参数作为自定义偏移量
LOOKUP(SUM([Sales]), -[Custom Offset])
END
百分比变化
(SUM([Sales]) - [Previous Period Sales]) / [Previous Period Sales]
// 阈值参数
销售额阈值(浮点数)
当前值:1000
范围:0 到 10000
// 使用参数进行颜色编码
销售表现
IF SUM([Sales]) >= [Sales Threshold] THEN "高于目标"
ELSE "低于目标"
END
// 多指标比较
指标 1(字符串)
指标 2(字符串)
指标 1 值
CASE [Metric 1]
WHEN "Revenue" THEN SUM([Sales])
WHEN "Profit" THEN SUM([Profit])
WHEN "Orders" THEN COUNTD([Order ID])
END
指标 2 值
CASE [Metric 2]
WHEN "Revenue" THEN SUM([Sales])
WHEN "Profit" THEN SUM([Profit])
WHEN "Orders" THEN COUNTD([Order ID])
END
数据关系(Tableau 2020.2+):
// 物理层:表连接
Sales (LEFT JOIN) Returns ON Sales.Order ID = Returns.Order ID
// 逻辑层:关系
Orders -> Order Items (Order ID)
Orders -> Customers (Customer ID)
Products -> Order Items (Product ID)
// 使用关系进行多事实分析
// 自动处理不同的粒度级别
来自订单的收入
SUM([Orders].[Amount])
来自退货的退货率
COUNTD([Returns].[Return ID]) / COUNTD([Orders].[Order ID])
数据混合:
// 主要数据源:Sales
// 次要数据源:Targets
// 链接字段(混合依据):
- Date(已链接)
- Region(已链接)
// 混合计算
销售额与目标对比
SUM([Sales].[Revenue]) - SUM([Targets].[Target Amount])
目标达成率
SUM([Sales].[Revenue]) / SUM([Targets].[Target Amount])
// 处理混合中的缺失数据
带默认值的收入
IFNULL(SUM([Sales].[Revenue]), 0)
跨数据库连接:
// 跨不同数据库连接
PostgreSQL: Orders
MySQL: Customer Attributes
Snowflake: Product Catalog
// 连接条件
Orders.customer_id = Customer Attributes.id
Orders.product_id = Product Catalog.product_id
仪表板最佳实践:
// 布局容器
水平容器
- 标题(文本)
- 筛选器(垂直容器)
垂直容器
- KPI 卡片(水平容器)
- 主要可视化
- 明细表
// 操作
筛选操作:
源:地图
目标:明细表
运行方式:选择
清除选择:显示所有值
突出显示操作:
源:条形图
目标:折线图
运行方式:悬停
清除选择:保持突出显示
URL 操作:
名称:查看客户详情
URL:https://crm.company.com/customer?id=<Customer ID>
运行方式:菜单
集操作:
源:产品列表
目标:集字段
运行方式:选择
用途:比较产品
// 仪表板尺寸
固定尺寸:1200 x 800(桌面端)
自动:响应式
范围:800-1200(平板端)
// 设备设计器
桌面端布局(默认)
平板端布局(隐藏部分筛选器,垂直堆叠)
手机端布局(单列,仅显示关键指标)
性能仪表板:
// KPI 卡片
总收入
SUM([Sales])
格式:货币,$#,##0K
同比增长率
([Current Year Revenue] - [Last Year Revenue]) / [Last Year Revenue]
格式:百分比,0.0%
// 带参考线的趋势
折线图:按月销售额
参考线:平均值
趋势线:线性
// 表现最佳者
条形图:按收入排名前 10 的产品
筛选器:[Top N Products] = True
排序:按收入降序
颜色:利润率(发散色)
// 对比
蝶形图:按类别销售额与预算对比
条形:正数 = 销售额,负数 = 预算
排序:按差异
// 地理分布
地图:按州销售额
颜色:销售额(渐变)
大小:利润
工具提示:州,销售额,利润,订单数
// 向下钻取层级
类别 -> 子类别 -> 产品
操作:点击时向下钻取
分区与寻址:
// 计算使用选项:
// - 表(横穿)
// - 表(向下)
// - 区(横穿)
// - 区(向下)
// - 单元格
// - 特定维度
// 按类别分区的累计总计
计算使用:Category(为每个类别重新开始)
// 分区内占总计百分比
计算使用:Pane(向下)
// 按区域排名
RANK_UNIQUE(SUM([Sales]))
计算使用:Region
// 使用特定维度的窗口计算
窗口平均值
计算使用:Month, Product
寻址:Month
分区:Product
高级表计算:
// 分区中的第一个/最后一个
是否首次订单
FIRST() = 0
是否最后订单
LAST() = 0
// 行号索引
行号
INDEX()
// 分区大小
总行数
SIZE()
// 累计百分比
累计百分比
RUNNING_SUM(SUM([Sales])) / TOTAL(SUM([Sales]))
// 期间与期间百分比变化
// 计算使用:Month
期间变化
(ZN(SUM([Sales])) - LOOKUP(ZN(SUM([Sales])), -1)) /
ABS(LOOKUP(ZN(SUM([Sales])), -1))
// 月环比增长率
// 按类别分区
月环比增长率
计算使用:Table(横穿)
寻址:Month
分区:Category
数据提取优化:
// 提取筛选器
// 筛选器 1:Date >= 2020-01-01
// 筛选器 2:Country IN ['US', 'UK', 'CA']
// 筛选器 3:Is_Deleted = False
// 聚合
聚合可见维度
将日期汇总至:Month
// 提取刷新
完全刷新:替换所有数据
增量刷新:添加 Date > MAX(Date) 的行
// Hyper 提取
文件格式:.hyper(Tableau 10.5+)
压缩:高
性能优化:
// 数据源筛选器(尽早应用)
数据源筛选器:
[Order Date] >= DATE('2020-01-01')
AND [Is_Deleted] = FALSE
// 上下文筛选器(创建临时表)
上下文:[Region] IN ['North', 'South']
// 筛选器操作顺序:
1. 提取筛选器
2. 数据源筛选器
3. 上下文筛选器
4. 维度筛选器
5. 度量筛选器
6. 表计算筛选器
// 优化计算
// 差:嵌套 LOD
{ FIXED [Customer] : MAX({ FIXED [Order] : SUM([Sales]) }) }
// 好:带有嵌套聚合的单一 LOD
{ FIXED [Customer] : SUM([Sales]) }
// 使用布尔值而非字符串
// 差:
Status = "Active"
// 好:
Is Active(布尔字段)
// 减少标记数量
// 使用聚合数据
// 仅筛选相关数据
// 对大型数据集使用提取
// 优化仪表板
// 限制工作表数量
// 使用仪表板操作而非筛选器
// 隐藏未使用的字段
// 减少标记数量(<1000 为理想状态)
集:
// 静态集
前 10 名客户
条件:按字段,按 SUM([Sales]) 排名前 10
// 动态集
高价值订单
条件:SUM([Order Amount]) > [Threshold Parameter]
// 组合集
VIP 且近期
[Top Customers] AND [Recent Purchasers]
// 集操作
// 允许用户选择项目添加到集
操作:添加/从集中移除
源:产品列表
目标集:选定产品
运行方式:选择
// 在计算中使用集
是否顶级客户
[Customer] IN [Top 10 Customers]
客户类型
IF [Customer] IN [VIP Set] THEN "VIP"
ELSEIF [Customer] IN [Top 100 Set] THEN "高价值"
ELSE "标准"
END
分析窗格:
// 参考线
平均线:AVG(SUM([Sales]))
中位数线:MEDIAN(SUM([Sales]))
常量:[Target Parameter]
// 参考带
四分位数:第 25 到第 75 百分位数
自定义:[Low Threshold] 到 [High Threshold]
// 分布带
百分比:60%,80%,95%
标准差:1,2,3 sigma
// 箱形图
须线:1.5 * IQR
异常值:超出须线的点
// 趋势线
线性,对数,指数,多项式
显示方程
显示 R 平方值
预测:向前 12 个月
置信区间:95%
// 预测
自动:Tableau 选择模型
忽略最后:N 个期间(用于回测)
// 差:在可以使用关系时使用混合
主要:Sales(混合依据 Date, Product)
次要:Costs(混合依据 Date, Product)
// 好:使用关系或连接
Sales <- (Product ID) -> Costs
// 差:嵌套 LOD
{ FIXED [Customer] :
MAX({ FIXED [Order] : SUM([Amount]) })
}
// 好:单一 LOD
{ FIXED [Customer] : SUM([Amount]) }
// 差:包含 10 万个点的散点图
// 好:聚合或筛选数据
// 对大型数据集使用密度标记
// 差:提取整个表而不使用筛选器
// 好:筛选相关数据,聚合维度
每周安装次数
76
代码仓库
GitHub 星标数
11
首次出现
2026年1月24日
安全审计
安装于
opencode62
codex60
gemini-cli56
cursor55
github-copilot53
kimi-cli48
You are an expert in Tableau with deep knowledge of calculated fields, LOD (Level of Detail) expressions, parameters, dashboards, data blending, extracts, and performance optimization. You create interactive, performant dashboards that deliver actionable insights.
Basic Calculations:
// String manipulation
Full Name
UPPER([First Name]) + " " + UPPER([Last Name])
Email Domain
SPLIT([Email], "@", 2)
// Numeric calculations
Profit Margin
[Profit] / [Sales]
Discounted Price
[Price] * (1 - [Discount])
// Date calculations
Days Since Order
DATEDIFF('day', [Order Date], TODAY())
Order Year
YEAR([Order Date])
Order Quarter
"Q" + STR(DATEPART('quarter', [Order Date]))
// Conditional logic
Order Priority
IF [Days Since Order] <= 2 THEN "Urgent"
ELSEIF [Days Since Order] <= 7 THEN "High"
ELSEIF [Days Since Order] <= 14 THEN "Medium"
ELSE "Low"
END
// Case statement
Customer Segment
CASE [Lifetime Value]
WHEN >= 10000 THEN "VIP"
WHEN >= 5000 THEN "High Value"
WHEN >= 1000 THEN "Medium Value"
ELSE "Low Value"
END
// Aggregations
Total Revenue
SUM([Order Amount])
Average Order Value
AVG([Order Amount])
Distinct Customer Count
COUNTD([Customer ID])
Advanced Calculations:
// Window calculations
Running Total
RUNNING_SUM(SUM([Sales]))
Moving Average (7 days)
WINDOW_AVG(SUM([Sales]), -6, 0)
Percent of Total
SUM([Sales]) / TOTAL(SUM([Sales]))
Rank by Sales
RANK_UNIQUE(SUM([Sales]), 'desc')
Previous Period Sales
LOOKUP(SUM([Sales]), -1)
// Quick table calculations
// Right-click measure -> Quick Table Calculation
// - Running Total
// - Difference
// - Percent Difference
// - Percent of Total
// - Rank
// - Percentile
// - Moving Average
// Year over Year Growth
YoY Growth
(SUM([Sales]) - LOOKUP(SUM([Sales]), -12)) / LOOKUP(SUM([Sales]), -12)
// Compound growth rate
CAGR
POWER(
SUM([Current Year Sales]) / SUM([First Year Sales]),
1 / [Years]
) - 1
FIXED LOD:
// Customer lifetime value (fixed at customer level)
{ FIXED [Customer ID] : SUM([Order Amount]) }
// First order date per customer
{ FIXED [Customer ID] : MIN([Order Date]) }
// Category-level average (ignore other dimensions)
{ FIXED [Category] : AVG([Sales]) }
// Overall average (ignore all dimensions)
{ FIXED : AVG([Sales]) }
// Cohort analysis
Cohort Month
{ FIXED [Customer ID] : MIN(DATETRUNC('month', [Order Date])) }
// Customer acquisition cost per month
{ FIXED [Acquisition Month] : SUM([Marketing Spend]) / COUNTD([Customer ID]) }
INCLUDE LOD:
// Add dimension to aggregation
{ INCLUDE [Region] : SUM([Sales]) }
// Product sales including subcategory
{ INCLUDE [Sub-Category] : SUM([Sales]) }
// Use case: Show product sales with category total
Product Sales
SUM([Sales])
Category Sales
{ INCLUDE [Category] : SUM([Sales]) }
Percent of Category
[Product Sales] / [Category Sales]
EXCLUDE LOD:
// Remove dimension from aggregation
{ EXCLUDE [Region] : SUM([Sales]) }
// Total sales excluding customer dimension
{ EXCLUDE [Customer ID] : SUM([Sales]) }
// Use case: Compare individual to group
Individual Sales
SUM([Sales])
Group Average (excluding individual)
{ EXCLUDE [Salesperson] : AVG([Sales]) }
Performance vs Group
[Individual Sales] - [Group Average]
Complex LOD Use Cases:
// New vs Returning Customers
Is First Order
{ FIXED [Customer ID] : MIN([Order Date]) } = [Order Date]
New Customers
IF [Is First Order] THEN 1 ELSE 0 END
// Customer lifetime metrics
Orders Per Customer
{ FIXED [Customer ID] : COUNTD([Order ID]) }
Days Since First Order
DATEDIFF('day',
{ FIXED [Customer ID] : MIN([Order Date]) },
[Order Date]
)
// Cohort retention
Months Since First Order
DATEDIFF('month',
{ FIXED [Customer ID] : MIN([Order Date]) },
[Order Date]
)
Cohort Size
{ FIXED [Cohort Month] : COUNTD([Customer ID]) }
Retention Rate
COUNTD([Customer ID]) / [Cohort Size]
// Top N with LOD
Top 10 Products by Revenue
{ FIXED [Product] : SUM([Revenue]) }
Is Top 10
RANK_UNIQUE([Top 10 Products by Revenue]) <= 10
// Percentile calculation
Revenue Percentile
{ FIXED [Customer ID] : SUM([Revenue]) }
Customer Percentile
IF PERCENTILE([Revenue Percentile], 0.9) THEN "Top 10%"
ELSEIF PERCENTILE([Revenue Percentile], 0.75) THEN "Top 25%"
ELSE "Other"
END
Parameter Creation:
// Metric selector parameter
Metric Selector (String)
Values: Revenue, Profit, Quantity, Orders
// Dynamic measure based on parameter
Selected Metric
CASE [Metric Selector]
WHEN "Revenue" THEN SUM([Sales])
WHEN "Profit" THEN SUM([Profit])
WHEN "Quantity" THEN SUM([Quantity])
WHEN "Orders" THEN COUNTD([Order ID])
END
// Date range parameter
Number of Days (Integer)
Current value: 30
Range: 7 to 365
// Filter with parameter
Order Date Filter
[Order Date] >= DATEADD('day', -[Number of Days], TODAY())
// Top N parameter
Top N (Integer)
Current value: 10
Range: 5 to 50
// Top N filter
Top N Products
RANK_UNIQUE(SUM([Sales]), 'desc') <= [Top N]
// Timeframe parameter
Time Dimension (String)
Values: Day, Week, Month, Quarter, Year
// Dynamic timeframe
Dynamic Time
CASE [Time Dimension]
WHEN "Day" THEN STR([Order Date])
WHEN "Week" THEN "Week " + STR(DATEPART('week', [Order Date]))
WHEN "Month" THEN DATENAME('month', [Order Date]) + " " + STR(YEAR([Order Date]))
WHEN "Quarter" THEN "Q" + STR(DATEPART('quarter', [Order Date])) + " " + STR(YEAR([Order Date]))
WHEN "Year" THEN STR(YEAR([Order Date]))
END
Advanced Parameter Usage:
// Comparison period parameter
Compare To (String)
Values: Previous Period, Previous Year, Custom
// Comparison calculation
Previous Period Sales
CASE [Compare To]
WHEN "Previous Period" THEN
LOOKUP(SUM([Sales]), -1)
WHEN "Previous Year" THEN
LOOKUP(SUM([Sales]), -12)
WHEN "Custom" THEN
// Use another parameter for custom offset
LOOKUP(SUM([Sales]), -[Custom Offset])
END
Percent Change
(SUM([Sales]) - [Previous Period Sales]) / [Previous Period Sales]
// Threshold parameter
Sales Threshold (Float)
Current value: 1000
Range: 0 to 10000
// Color coding with parameter
Sales Performance
IF SUM([Sales]) >= [Sales Threshold] THEN "Above Target"
ELSE "Below Target"
END
// Multiple metric comparison
Metric 1 (String)
Metric 2 (String)
Metric 1 Value
CASE [Metric 1]
WHEN "Revenue" THEN SUM([Sales])
WHEN "Profit" THEN SUM([Profit])
WHEN "Orders" THEN COUNTD([Order ID])
END
Metric 2 Value
CASE [Metric 2]
WHEN "Revenue" THEN SUM([Sales])
WHEN "Profit" THEN SUM([Profit])
WHEN "Orders" THEN COUNTD([Order ID])
END
Data Relationships (Tableau 2020.2+):
// Physical layer: Tables joined
Sales (LEFT JOIN) Returns ON Sales.Order ID = Returns.Order ID
// Logical layer: Relationships
Orders -> Order Items (Order ID)
Orders -> Customers (Customer ID)
Products -> Order Items (Product ID)
// Multi-fact analysis with relationships
// Automatically handles different grain levels
Revenue from Orders
SUM([Orders].[Amount])
Return Rate from Returns
COUNTD([Returns].[Return ID]) / COUNTD([Orders].[Order ID])
Data Blending:
// Primary data source: Sales
// Secondary data source: Targets
// Linked fields (blend on):
- Date (linked)
- Region (linked)
// Blended calculation
Sales vs Target
SUM([Sales].[Revenue]) - SUM([Targets].[Target Amount])
Target Achievement
SUM([Sales].[Revenue]) / SUM([Targets].[Target Amount])
// Handling missing data in blend
Revenue with Default
IFNULL(SUM([Sales].[Revenue]), 0)
Cross-Database Joins:
// Join across different databases
PostgreSQL: Orders
MySQL: Customer Attributes
Snowflake: Product Catalog
// Join conditions
Orders.customer_id = Customer Attributes.id
Orders.product_id = Product Catalog.product_id
Dashboard Best Practices:
// Layout containers
Horizontal container
- Title (text)
- Filters (vertical container)
Vertical container
- KPI cards (horizontal container)
- Main visualization
- Detail table
// Actions
Filter action:
Source: Map
Target: Detail table
Run on: Select
Clear selection: Show all values
Highlight action:
Source: Bar chart
Target: Line chart
Run on: Hover
Clear selection: Leave highlighted
URL action:
Name: View Customer Details
URL: https://crm.company.com/customer?id=<Customer ID>
Run on: Menu
Set action:
Source: Product list
Target: Set field
Run on: Select
Use: Compare products
// Dashboard sizing
Fixed size: 1200 x 800 (desktop)
Automatic: Responsive
Range: 800-1200 (tablet)
// Device designer
Desktop layout (default)
Tablet layout (hide some filters, stack vertically)
Phone layout (single column, essential metrics only)
Performance Dashboard:
// KPI cards
Total Revenue
SUM([Sales])
Format: Currency, $#,##0K
YoY Growth
([Current Year Revenue] - [Last Year Revenue]) / [Last Year Revenue]
Format: Percentage, 0.0%
// Trend with reference line
Line chart: Sales by Month
Reference line: Average
Trend line: Linear
// Top performers
Bar chart: Top 10 Products by Revenue
Filter: [Top N Products] = True
Sort: Descending by Revenue
Color: Profit Ratio (diverging)
// Comparison
Butterfly chart: Sales vs Budget by Category
Bars: Positive = Sales, Negative = Budget
Sort: By variance
// Geographic
Map: Sales by State
Color: Sales (gradient)
Size: Profit
Tooltip: State, Sales, Profit, Orders
// Drill-down hierarchy
Category -> Sub-Category -> Product
Action: Drill down on click
Partitioning and Addressing:
// Compute using options:
// - Table (across)
// - Table (down)
// - Pane (across)
// - Pane (down)
// - Cell
// - Specific dimensions
// Running total partitioned by category
Compute using: Category (restart for each category)
// Percent of total within partition
Compute using: Pane (down)
// Rank by region
RANK_UNIQUE(SUM([Sales]))
Compute using: Region
// Window calculation with specific dimensions
Window average
Compute using: Month, Product
Addressing: Month
Partitioning: Product
Advanced Table Calculations:
// First/Last in partition
Is First Order
FIRST() = 0
Is Last Order
LAST() = 0
// Index for row numbering
Row Number
INDEX()
// Size of partition
Total Rows
SIZE()
// Cumulative percent
Running Percent
RUNNING_SUM(SUM([Sales])) / TOTAL(SUM([Sales]))
// Period over period percent change
// Compute using: Month
Period Change
(ZN(SUM([Sales])) - LOOKUP(ZN(SUM([Sales])), -1)) /
ABS(LOOKUP(ZN(SUM([Sales])), -1))
// Month over month growth rate
// Partitioned by category
MoM Growth
Compute using: Table (across)
Addressing: Month
Partitioning: Category
Extract Optimization:
// Extract filters
// Filter 1: Date >= 2020-01-01
// Filter 2: Country IN ['US', 'UK', 'CA']
// Filter 3: Is_Deleted = False
// Aggregation
Aggregate visible dimensions
Roll up dates to: Month
// Extract refresh
Full refresh: Replace all data
Incremental refresh: Add rows where Date > MAX(Date)
// Hyper extract
File format: .hyper (Tableau 10.5+)
Compression: High
Performance Optimization:
// Data source filters (apply early)
Data Source Filter:
[Order Date] >= DATE('2020-01-01')
AND [Is_Deleted] = FALSE
// Context filters (create temp table)
Context: [Region] IN ['North', 'South']
// Filter order of operations:
1. Extract filters
2. Data source filters
3. Context filters
4. Dimension filters
5. Measure filters
6. Table calc filters
// Optimize calculations
// Bad: Nested LODs
{ FIXED [Customer] : MAX({ FIXED [Order] : SUM([Sales]) }) }
// Good: Single LOD with nested aggregation
{ FIXED [Customer] : SUM([Sales]) }
// Use boolean instead of string
// Bad:
Status = "Active"
// Good:
Is Active (boolean field)
// Reduce mark count
// Use aggregated data
// Filter to relevant data only
// Use extracts for large datasets
// Optimize dashboard
// Limit number of worksheets
// Use dashboard actions instead of filters
// Hide unused fields
// Reduce number of marks (<1000 ideal)
Sets:
// Static set
Top 10 Customers
Condition: By field, Top 10 by SUM([Sales])
// Dynamic set
High Value Orders
Condition: SUM([Order Amount]) > [Threshold Parameter]
// Combined sets
VIP and Recent
[Top Customers] AND [Recent Purchasers]
// Set action
// Allow users to select items to add to set
Action: Add/Remove from Set
Source: Product list
Target Set: Selected Products
Run on: Select
// Using sets in calculations
Is Top Customer
[Customer] IN [Top 10 Customers]
Customer Type
IF [Customer] IN [VIP Set] THEN "VIP"
ELSEIF [Customer] IN [Top 100 Set] THEN "High Value"
ELSE "Standard"
END
Analytics Pane:
// Reference lines
Average line: AVG(SUM([Sales]))
Median line: MEDIAN(SUM([Sales]))
Constant: [Target Parameter]
// Reference bands
Quartiles: 25th to 75th percentile
Custom: [Low Threshold] to [High Threshold]
// Distribution bands
Percentages: 60%, 80%, 95%
Standard deviation: 1, 2, 3 sigma
// Box plot
Whiskers: 1.5 * IQR
Outliers: Points beyond whiskers
// Trend lines
Linear, Logarithmic, Exponential, Polynomial
Show equation
Show R-squared value
Forecast: 12 months forward
Confidence interval: 95%
// Forecast
Automatic: Tableau selects model
Ignore last: N periods (for backtesting)
// Bad: Blend when relationship would work
Primary: Sales (blend on Date, Product)
Secondary: Costs (blend on Date, Product)
// Good: Use relationship or join
Sales <- (Product ID) -> Costs
// Bad: Nested LODs
{ FIXED [Customer] :
MAX({ FIXED [Order] : SUM([Amount]) })
}
// Good: Single LOD
{ FIXED [Customer] : SUM([Amount]) }
// Bad: Scatter plot with 100K points
// Good: Aggregate or filter data
// Use density marks for large datasets
// Bad: Extract entire table without filters
// Good: Filter to relevant data, aggregate dimensions
Weekly Installs
76
Repository
GitHub Stars
11
First Seen
Jan 24, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode62
codex60
gemini-cli56
cursor55
github-copilot53
kimi-cli48
Excel财务建模规范与xlsx文件处理指南:专业格式、零错误公式与数据分析
46,700 周安装