关于 formatting-insight-axes
这是一个 PostHog 技能,介绍如何设置趋势图和 SQL 洞察的坐标轴格式。它说明如何显示时长、百分比、货币和紧凑数字,同时不改变底层数值。
主要功能
- 01选择趋势图坐标轴格式
- 02SQL 列格式设置指引
- 03时长与百分比处理
- 04货币及紧凑数字格式
- 05避免单位缩放反模式
适用场景
- 01格式化延迟或会话时长图表
- 02将转化率显示为百分比
- 03按项目货币显示收入
- 04修正洞察中容易误导的单位
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ posthog/ skills --skill formatting-insight-axes安装后在 Claude Code 中输入/formatting-insight-axes确认已加载。
详细介绍
格式化洞察坐标轴
PostHog 使用内置的坐标轴格式化器来呈现洞察。请使用它,而不是通过扭曲查询或添加字面前缀/后缀来伪造单位。
两种洞察类型在不同位置配置该格式化器:
- TrendsQuery —
trendsFilter.aggregationAxisFormat(本页下文) - SQL 洞察(
DataVisualizationNode)— 按列配置settings.formatting(参见 SQL 洞察)
反模式
如果你打算使用以下任一做法,请先停下来,选择下面的格式:
formula: "A / 60"配合aggregationAxisPostfix: " mins"— 手动将秒转换为分钟formula: "A / 1000"配合aggregationAxisPostfix: " s"— 手动将毫秒转换为秒formula: "A * 100"配合aggregationAxisPostfix: "%"— 手动将比率转换为百分比- 对原始值使用
aggregationAxisPostfix: "ms"/"s"/"min"/"hr"
这些做法会将单位固定在一个尺度上。内置格式化器会根据数值选择易读的单位(1.5s、2m 12s、1h 4m),并确保底层序列的数值正确,以便进行后续计算、细分和设置警报。
可用格式
在 TrendsQuery 上设置 trendsFilter.aggregationAxisFormat:
| 值 | 适用于…… | 呈现为 |
|---|---|---|
numeric(默认) | 普通计数 | 1,234 |
duration | 秒(任意尺度) | 45s、2m 12s、1h 4m |
duration_ms | 毫秒 | 850ms、1.5s、1m 4s |
percentage | 已是 0-100 的值 | 47.3% |
percentage_scaled | 0-1 的比率 | 47.3% |
currency | 项目基础货币金额 | $1,234.56(或本地货币代码) |
short | 需要缩写显示的大数值 | 1.2K、3.4M |
trendsFilter 上的配套字段:
aggregationAxisPrefix— 字面前缀(例如"$"),用于无论项目设置如何,都要固定显示特定货币或单位符号的情况aggregationAxisPostfix— 字面后缀;仅用于格式无法表示的实际单位(例如" req"、" events"),切勿用于"mins"/"s"/"%"— 百分比格式已经会添加%符号,因此添加"%"后缀会显示为50%%decimalPlaces— 小数位数上限(货币/比率通常设置为 1 或 2 位即可)
货币 — 谨慎选择 format 或 prefix
aggregationAxisFormat: "currency" 会使用项目基础货币呈现(在项目设置中设置,默认为 USD)。当底层数值使用相同货币时,请使用此格式,例如 PostHog 自动转换为项目基础货币的收入事件。
如果数值固定为特定货币,不受项目设置影响(例如 $ai_total_cost_usd 始终为 USD,即使项目的基础货币是 EUR),请使用 aggregationAxisPrefix: "$" + decimalPlaces: 2,以确保符号与数据相符。在这种情况下使用 format: "currency",会在 EUR 项目中将 USD 数值显示为 €。
当序列的单位是秒时
如果序列的单位是秒(延迟、会话时长、首次事件耗时、处理时间、页面加载时间等),请默认使用
aggregationAxisFormat: "duration",无需说明。不要停下来询问——格式化不会破坏数据(底层数值始终以秒为单位,只有标签会变化),因此选择它总比直接显示秒数更合适。
只有当用户明确指定了想固定使用的单位(“以分钟显示”“绘制以小时为单位的平均值”)时,才向用户确认:
“我可以将 y 轴固定为分钟,方法是将序列除以 60;也可以使用 PostHog 的
duration格式化方式,根据每个值自动选择秒/分钟/小时——90s会显示为1m 30s,而5400s会显示为1h 30m。你更倾向哪种方式?”
在没有用户参与的单次 MCP 调用场景中,直接选择
duration 并继续。
示例
延迟——以毫秒为单位的时长
{
"kind": "TrendsQuery",
"series": [
{
"kind": "EventsNode",
"event": "$pageview",
"math": "p95",
"math_property": "$performance_page_loaded"
}
],
"trendsFilter": {
"aggregationAxisFormat": "duration_ms"
}
}
平均会话时长——以秒为单位的时长
{
"kind": "TrendsQuery",
"series": [
{
"kind": "EventsNode",
"event": "$pageleave",
"math": "avg",
"math_property": "$session_duration"
}
],
"trendsFilter": {
"aggregationAxisFormat": "duration"
}
}
收入——项目的基础货币
{
"trendsFilter": {
"aggregationAxisFormat": "currency",
"decimalPlaces": 2
}
}
固定货币值(例如以 USD 计价的大模型成本)——固定符号
{
"trendsFilter": {
"aggregationAxisPrefix": "$",
"decimalPlaces": 2
}
}
转化率——由 0-1 公式计算的百分比
{
"kind": "TrendsQuery",
"series": [
{
"kind": "EventsNode",
"event": "checkout_completed",
"math": "dau"
},
{
"kind": "EventsNode",
"event": "checkout_started",
"math": "dau"
}
],
"trendsFilter": {
"formula": "A / B",
"aggregationAxisFormat": "percentage_scaled",
"decimalPlaces": 1
}
}
SQL 洞察(DataVisualizationNode)
SQL 洞察没有 trendsFilter。
图表的格式化设置按列配置在 chartSettings.yAxis[].settings.formatting 中,表格的格式化设置按列配置在顶层的 tableSettings.columns[].settings.formatting 中。
{
"kind": "DataVisualizationNode",
"source": { "kind": "HogQLQuery", "query": "SELECT week, conversion_rate FROM ..." },
"display": "ActionsLineGraph",
"chartSettings": {
"xAxis": { "column": "week" },
"yAxis": [
{
"column": "conversion_rate",
"settings": { "formatting": { "style": "percent", "decimalPlaces": 1 } }
}
]
}
}
style 可以是 none、number、short 或 percent——不支持 duration 或 currency。
这些格式请使用 prefix/suffix 表示,或直接在 SQL 中处理。
percent 会添加 % 符号,并将数值乘以 100(类似趋势的 percentage_scaled 格式;没有不缩放的变体)。
因此,请传入 0-1 的比率,并将 suffix 留空——选择一种形式,不要混用:
| SQL 返回值 | formatting | 显示效果 |
|---|---|---|
0-1 的比率(a / b) | {"style": "percent", "decimalPlaces": 1} | 47.3% |
0-100(round(100.0 * a / b, 1)) | {"style": "number", "suffix": "%", "decimalPlaces": 1} | 47.3% |
混用会导致显示错误:style: "percent" 加上 "%" 后缀会显示为 47.3%%,而对已缩放到 0-100 的列使用 percent 则会显示为 4730%。
优先采用比率形式——这样查询中就不必包含 100.0 *,存储的列也会保持为普通比率,供其他读取该列的逻辑使用。
更新现有洞察
如果你正在编辑的洞察已使用以下反模式之一——趋势中的 formula/postfix 配对,或 SQL 列同时使用 style: "percent" 和 "%" 后缀——请在同一次 posthog:insight-update 调用中修正:移除除以 N 或乘以 100.0 * 的操作,以及字面量 %,让格式化设置负责单位。数值保持不变,只有标签会变化。不要扫描无关的洞察——只修正你当前正在处理的项目。