如何在 tableau 中为不同 measures 设置不同的 mark Type?
可以先把指标整理成“指标名称 + 指标值”的长表,再用双轴分别绘制 Text 和 Square。将指标名称放在 Rows、区域放在 Columns,两个辅助轴也放在 Columns,并通过 Dual Axis 合并。这样文本和方块就能共用同一组指标行,辅助轴也不会额外占行。Variance 的颜色由单独的计算字段控制。
为什么会出现多余的空白行?
使用 Measure Names 和 Measure Values 制作普通交叉表时,共用一张 Marks 卡的指标会使用相同的标记类型,无法逐个指定为 Text 或 Square。
辅助轴可以提供独立的 Marks 卡,但放置位置会影响表格结构。连续字段放在 Rows 上时,会增加对应的行面板;双轴则将两个轴叠放在同一个面板中。具体机制可参考 Tableau 的多度量轴说明。
没有实际工作簿和截图,还无法确定现有空白行的具体来源。如果空白行是在加入 dummy axis 后出现的,可以先检查辅助字段是否作为独立轴留在了 Rows 上。
1. 准备按指标分行的数据
示例使用七个独立指标:四个普通数值指标、两个百分比指标,以及一个 Variance。这里的“文本”指用文字显示数值。
字段名可以替换为实际名称:
| Region | Metric | Value |
|---|---|---|
| East | Measure A | 120 |
| East | Measure B | 80 |
| East | Measure C | 45 |
| East | Measure D | 60 |
| East | Percent A | 0.25 |
| East | Percent B | 0.40 |
| East | Variance | -12 |
[Metric] 是数据源中的普通维度字段,不是 Tableau 自动生成的 Measure Names。
如果当前每个指标各占一列,且数据源支持直接 Pivot,可以选中这些指标列,执行 Pivot,再重命名生成的字段:
Pivot field names改为Metric。Pivot field values改为Value。
不同连接器对直接 Pivot 的支持不同。如果没有该选项,可以在数据准备阶段转换,或使用适用的自定义 SQL。具体限制见 Tableau 的列转行说明。
以下计算假设每个 Region + Metric 只有一个已计算好的结果,因此使用 MIN([Value]) 读取数值。如果数据仍是明细记录,需要先确定每个指标的聚合规则,尤其不能直接累加百分比。
2. 创建两个辅助位置字段
创建 [Text Position],让普通指标和 Variance 显示在文本层:
IF [Metric] <> "Percent A"
AND [Metric] <> "Percent B"
THEN 0
END
创建 [Square Position],让两个百分比指标显示在方块层:
IF [Metric] = "Percent A"
OR [Metric] = "Percent B"
THEN 0
END
不符合条件的行会返回 NULL,该指标便不会在这一层绘制。不要补上 ELSE 0,否则每个指标都会同时出现在两个标记层中。
两个字段都使用固定位置 0,让标记位于单元格中心。实际指标值只用于标签和颜色。
3. 搭建双轴表格
- 将离散维度
[Region]拖到 Columns。 - 将离散维度
[Metric]拖到 Rows,并手动设置指标顺序。 - 在 Columns 的
[Region]后面依次加入MIN([Text Position])和MIN([Square Position]),将两个字段保持为连续字段。 - 右键第二个辅助字段,选择
Dual Axis。 - 同步两个轴,将范围固定为
-1到1,使位置0居中。 - 隐藏两个辅助轴的标题与刻度,并移除网格线、零线。
完成后,Rows 上只保留 [Metric]。Columns 上的两个辅助轴合并,每个区域仍只有一个用于显示内容的单元格。
分别设置两张 Marks 卡:
| Marks 卡 | Mark Type | 标签及其他设置 |
|---|---|---|
MIN([Text Position]) | Text | 将 MIN([Value]) 放到 Text |
MIN([Square Position]) | Square | 按需将 MIN([Value]) 放到 Label,并设为百分比格式 |
如果两个百分比指标需要不同的固定颜色,可以只在 Square 卡上将 [Metric] 放到 Color。若方块只表示指标类型,设置固定大小即可,无须将 [Value] 放到 Size。
设置类型和颜色时,先选中对应的 Marks 卡。在 All 卡上修改会影响两个标记层。
4. 为 Variance 设置红绿色
创建计算字段 [Variance Color]:
IF ATTR([Metric]) = "Variance" THEN
IF ISNULL(MIN([Value])) THEN "Missing"
ELSEIF MIN([Value]) < 0 THEN "Negative"
ELSEIF MIN([Value]) > 0 THEN "Positive"
ELSE "Zero"
END
ELSE
"Normal"
END
将它拖到 Text 卡的 Color,手动指定颜色:
Negative:红色。Positive:绿色。Zero:灰色或其他中性色。Normal:普通文本颜色。Missing:按缺失值的展示要求设置。
四个普通指标会保留原有文字颜色,只有 Variance 根据正负值变色。零值和缺失值需要分别处理,避免将缺失数据误当成零。
如果希望 Variance 显示为红绿方块背景,可以将它从文本层的条件中排除,加入方块层,再将颜色计算放到 Square 卡上。
避免空白行时还要检查什么?
辅助字段返回 NULL 是为了分开绘制标记,属于预期结果。如果 Tableau 显示特殊值提示,可以隐藏提示。不要直接过滤这些记录,否则可能一并删除另一层需要显示的指标;也不要选择在默认位置显示这些空值,以免标记重叠。
长表中的所有指标共用 [Value] 这一个数值字段。两个百分比指标可以在 Square 卡上统一设置百分比格式;四个文本指标若分别需要整数、金额等不同格式,则需要单独设计标签字段。
如果现有数据源无法调整,指标数量也固定,可以将不同指标做成独立工作表,再放入 Dashboard 的垂直布局容器。统一各表的区域排序、列宽和筛选条件后,也能实现文本与方块混排,不过需要额外维护对齐。
备注:内容仅供参考。
