答案构建器最佳实践

答案构建器用于把复杂 SQL 口径封装成可被自然语言问答复用的分析模板。它不是简单的 SQL 保存工具,而是让系统在回答问题时能够动态选择维度、过滤条件和输出指标的可执行语义资产。

当一个分析问题涉及多指标组合、复杂过滤、跨字段计算、明细查询或多表关联时,答案构建器通常比普通指标更合适。


适用场景

答案构建器的核心价值,是把“模型容易临时推错的复杂分析逻辑”变成“可配置、可验证、可复用的 SQL 模板”。下面这些场景都适合优先考虑答案构建器。

使用场景答案构建器的价值示例
固化复杂业务口径把 CASE WHEN、有效数据过滤、状态判断等逻辑写死,避免每次问答临时推断。活跃账户统一按
active_subscription = TRUE
active_subscription = TRUE
统计。
一次输出多个相关指标一段 SQL 同时返回一组指标,便于系统统一解释和生成图表。账户数、活跃账户数、活跃率、总席位、活跃席位。
支持动态维度分析通过
${dims}
${dims}
让用户自然指定分组方式。
“按 plan 展示账户健康概览”“按国家查看活跃率”。
支持动态过滤通过
${filters}
${filters}
让用户自然追加筛选条件。
“只看 Google 来源”“只看 Basic Plan”“最近 30 天”。
精确控制输出列问答时可只返回用户需要的输出字段。用户只问“活跃率和活跃席位”时,不必展示全部指标。
避免多表 JOIN 出错将正确 JOIN 路径固化在模板中,减少模型临时拼 JOIN 的风险。订单、客户、商品、支付表组合分析。
支持明细查询返回行级明细,而不是只返回聚合指标。交易明细、客户清单、异常订单列表。
封装派生指标将复杂公式或多字段计算封装成可复用输出。转化率、席位活跃率、留存率、客单价。
提升问答解释质量多个相关指标一起返回,系统更容易生成结构化分析和业务洞察。同时比较账户数、活跃率和活跃席位,判断哪个 Plan 质量最好。
降低用户 SQL 门槛用户不需要知道表名、JOIN 条件、字段公式,只需要用业务语言提问。“按渠道看转化率和订单金额”。

实际验证中,“账户健康概览”就是一个典型答案构建器场景。它把账户数、活跃账户数、活跃率、总席位和活跃席位放在同一个 SQL 模板中,用户可以继续通过自然语言指定:

  • plan
    plan
    分组。
  • 只看
    source = Google
    source = Google
  • 只返回活跃率和活跃席位。

系统会把这些自然语言要求转成

dims
dims
filters
filters
outputColumns
outputColumns
参数,调用同一个答案构建器完成分析。这是普通单指标难以覆盖的能力。


核心概念

答案构建器的 SQL 模板中最重要的是两个占位符:

占位符作用问答中的表现
${filters}
${filters}
动态过滤条件用户说“只看 Google 来源”“最近 30 天”“Basic Plan”时,系统会尝试转成过滤表达式。
${dims}
${dims}
动态分组维度用户说“按 plan 展示”“按国家分组”“按渠道对比”时,系统会尝试转成 GROUP BY 维度。

实际测试中,未选择过滤条件时,

${filters}
${filters}
会被替换为
1=1
1=1
;未选择维度时,
${dims}
${dims}
会被替换为
1
1
,因此预览默认会返回整体结果。


页面流程总览

新建答案构建器不是一个“填完 SQL 就保存”的单步表单。页面实际会按以下流程推进:

步骤页面操作你需要理解的点
1. 编写代码输入 SQL 模板,点击 运行校验SQL 必须符合底层数据源语法;使用
${filters}
${filters}
${dims}
${dims}
时要写在正确位置。
2. 配置过滤和维度通过 添加过滤添加维度 选择表和字段这里决定问答时哪些字段可以被用作筛选条件,哪些字段可以被用作分组维度。
3. 匹配输出字段系统识别 SQL 输出列,并按输出列创建指标每个输出列都会成为可被问答调用的指标,应补充业务化名称、别名和描述。
4. 预览运行预览,检查结果预览用于验证 SQL 和字段配置是否可执行,不等同于最终自然语言问题的完整效果。
5. 创建填写答案构建器名称、别名、描述并保存保存后答案构建器会出现在当前分析域,并默认启用。

因此,答案构建器保存后在问答记录中经常表现为“执行指标计算”。这是因为系统会把答案构建器的输出字段注册成可执行的 SQL 指标实例。你不需要因此困惑:这里的”指标”并不等同于手工创建的普通聚合指标,而是答案构建器生成的可执行输出。


推荐设计方法

1. 一个构建器封装一组强相关指标

答案构建器最有价值的用法,是围绕一个业务主题封装一组相关指标,而不是只保存一个简单计数。

例如“账户健康概览”可以同时输出:

输出字段业务含义
total_accounts
total_accounts
账户数
active_accounts
active_accounts
活跃账户数
active_account_rate
active_account_rate
活跃率
total_seats
total_seats
总席位
active_seats
active_seats
活跃席位

这样用户可以直接问:

系统会选择该答案构建器,传入

dims = plan
dims = plan
,并返回按 Plan 分组的多指标表格和图表。

2. 把稳定口径写死,把变化条件留给占位符

SQL 中应固化不会随问题变化的业务规则,把会变化的部分留给

${filters}
${filters}
${dims}
${dims}

示例:

SELECT ${dims}, COUNT(*) AS total_accounts, SUM(CASE WHEN active_subscription = TRUE THEN 1 ELSE 0 END) AS active_accounts, ROUND( SUM(CASE WHEN active_subscription = TRUE THEN 1 ELSE 0 END) * 1.0 / COUNT(*), 4 ) AS active_account_rate, SUM(seats) AS total_seats, SUM(CASE WHEN active_subscription = TRUE THEN seats ELSE 0 END) AS active_seats FROM ns227206.public.v_gpt_accounts WHERE ${filters} GROUP BY ${dims}

这里,活跃账户的业务口径固定为

active_subscription = TRUE
active_subscription = TRUE
,而用户可以在问答中动态指定:

用户问题系统应动态传入
按 plan 展示账户健康概览
dims = plan
dims = plan
只看 source 为 Google 的账户健康概览
filters: source = Google
filters: source = Google
按国家查看活跃率
dims = country
dims = country

3. 对过滤字段和维度字段做显式绑定

运行校验成功后,页面会进入“配置过滤和维度”步骤。

如果 SQL 中包含

${filters}
${filters}
,需要点击 添加过滤,选择可用于过滤的表和字段。

如果 SQL 中包含

${dims}
${dims}
,需要点击 添加维度,选择可用于分组的表和字段。

实际测试中,过滤字段列表会包含更多字段,例如

account_name
account_name
id
id
email
email
plan
plan
source
source
seats
seats
created_at
created_at
等;维度字段列表会过滤掉部分更适合度量的字段,例如
seats
seats
latitude
latitude
longitude
longitude
不会优先作为维度出现。

这一步会直接影响问答能否正确理解“按 plan”“只看 Google 来源”“按国家”等表达。

4. 理解页面上可选的
${filters}
${filters}
${dims}
${dims}
字段

在”配置过滤和维度”步骤中,页面不会让你手写

${filters}
${filters}
${dims}
${dims}
的字段,而是通过 添加过滤添加维度 来选择字段范围。

字段来源于 SQL 模板中使用到的表。实际操作时,点击 添加过滤添加维度 后,系统会让你先选择表;选择表后,再展示该表中可用于过滤或分组的字段。

配置入口页面字段来源字段特点典型用途
添加过滤SQL 涉及表中可作为条件的字段范围更宽,字符串、数值、日期、布尔字段都可能出现。“只看 Google 来源”“Basic Plan”“最近 30 天”“活跃账户”。
添加维度SQL 涉及表中适合分组的字段更偏分类、枚举、日期、布尔等维度字段;部分连续数值字段不会优先出现。“按 plan”“按国家”“按来源渠道”“按创建时间”。

实操中,

v_gpt_accounts
v_gpt_accounts
表在过滤字段里出现了:

  • account_name
    account_name
  • id
    id
  • email
    email
  • first_name
    first_name
  • last_name
    last_name
  • plan
    plan
  • source
    source
  • seats
    seats
  • created_at
    created_at
  • trial_ends_at
    trial_ends_at
  • canceled_at
    canceled_at
  • trial_converted
    trial_converted
  • active_subscription
    active_subscription
  • legacy_plan
    legacy_plan
  • latitude
    latitude
  • longitude
    longitude
  • country
    country

而在维度字段里,页面主要展示了:

  • id
    id
  • email
    email
  • first_name
    first_name
  • last_name
    last_name
  • plan
    plan
  • source
    source
  • created_at
    created_at
  • trial_ends_at
    trial_ends_at
  • canceled_at
    canceled_at
  • trial_converted
    trial_converted
  • active_subscription
    active_subscription
  • legacy_plan
    legacy_plan
  • country
    country

可以看到,过滤字段范围通常更宽;维度字段会更偏向“可分组”的字段。像

seats
seats
latitude
latitude
longitude
longitude
这类连续数值或地理坐标字段,更适合作为度量值、计算字段或过滤条件,不一定适合作为默认分组维度。

如果希望某个字段更容易出现在维度或过滤配置中,应先在表字段配置里补充字段信息:

字段配置对答案构建器的影响
字段类型帮助系统判断字段适合做分类、连续值、时间字段还是其他类型。
字段用途帮助系统判断字段更适合做维度、过滤条件还是度量值。
字段别名帮助系统把用户自然语言中的叫法映射到字段,例如“套餐”映射到
plan
plan
字段描述帮助系统理解字段业务含义,减少误用字段。
隐藏字段被隐藏的字段不应作为问答和构建器优先使用字段。

建议在配置答案构建器前,先检查参与 SQL 的表字段:

  • 用于
    ${filters}
    ${filters}
    的字段,应适合表达用户常见筛选条件。
  • 用于
    ${dims}
    ${dims}
    的字段,应适合分组展示,且基数不要过高。
  • 数值型度量字段不要随意配置为维度,否则可能产生大量无意义分组。
  • ID、邮箱、姓名等高基数字段虽然可能出现在维度列表中,但通常不适合默认推荐给业务用户做分组分析。
  • 日期字段如果用于维度,最好明确用户希望按日、周、月还是年分析,避免分组粒度过细。

5. 为输出字段补充业务化名称、别名和描述

答案构建器会根据 SQL 输出字段分别创建指标。如果只保留技术字段名,问答仍能使用,但结果和记录中可能出现

active_account_rate_metric
active_account_rate_metric
active_seats_metric
active_seats_metric
这类技术名称。

建议在保存前补充:

配置项建议
指标名使用稳定、可读的中文业务名,如“活跃账户数”“账户活跃率”。
指标别名补充用户常用叫法,如“活跃率”“账户活跃占比”。
指标描述写清计算口径、适用范围和注意事项。
POP 表达式根据指标类型选择同环比算法,比例类指标不要直接套用绝对值增长率。

字段名可以保持 SQL 可读,但展示给用户的名称应尽量业务化。

6. 必须使用预览验证

答案构建器保存前应先点击 运行校验预览

实际测试中发现:

操作结果
SQL 缺少
${filters}
${filters}
校验报错:
SQL缺少过滤条件参数
SQL缺少过滤条件参数
SQL 包含
${filters}
${filters}
并绑定过滤字段
可以进入下一步并预览运行。
SQL 包含
${dims}
${dims}
并绑定维度字段
预览区会出现 Dims,可用于动态分组。
多输出字段 SQL系统会识别每个输出字段,并分别创建指标。

预览默认不带过滤和维度时,会返回整体结果。用户问题触发时,系统会根据自然语言传入具体维度、过滤条件和输出列。

需要特别注意:预览结果和问答结果可能不同,这通常不是错误。

现象原因
预览只返回一行总数没有在预览中选择具体维度,
${dims}
${dims}
默认替换为
1
1
问答能按 plan 分组,但预览没有分组问答时模型根据“按 plan”传入了
dims = plan
dims = plan
问答只返回部分输出列用户只问了部分指标,记录中可能看到系统通过
outputColumns
outputColumns
只选择需要的输出。
问答先查询字段取值再执行构建器系统需要确认枚举值大小写或真实取值,例如先确认
source = Google
source = Google

7. 用 SQL 和记录确认是否真正生效

答案构建器是否被问答使用,不建议只看最终文字答案,应同时查看 SQL语句记录

在实际验证中,一个命中答案构建器的问题会在记录中出现类似信息:

  • 找到匹配的答案构建器或指标。
  • 执行指标计算,
    metricType
    metricType
    SQL
    SQL
  • 参数中包含
    dims
    dims
    filters
    filters
    outputColumns
    outputColumns
  • SQL 中会看到
    ${filters}
    ${filters}
    ${dims}
    ${dims}
    已被替换成实际字段和条件。

例如用户问“只看 source 为 google 的账户健康概览,按 plan 展示活跃率和活跃席位”时,记录中可以看到:

参数含义
dims = plan
dims = plan
按 Plan 分组。
filters: source = Google
filters: source = Google
只看 Google 来源。
outputColumns = active_account_rate, active_seats
outputColumns = active_account_rate, active_seats
只返回用户要求的活跃率和活跃席位。

如果记录中没有命中答案构建器,而是临时查看表结构并生成 SQL,说明构建器名称、别名、描述或输出指标信息可能不够清晰,需要补充语义信息。


实操验证案例

案例一:按 Plan 展示账户健康概览

用户提问:

系统行为:

  1. 找到答案构建器“账户健康概览”。
  2. 识别用户需要按
    plan
    plan
    分组。
  3. 传入
    dims = plan
    dims = plan
  4. 一次性返回多个指标。
  5. 自动生成表格和组合图,并给出业务洞察。

实际结果中,系统返回了 Basic、Business、Premium 三类 Plan 的账户数、活跃账户数、活跃率、总席位和活跃席位,并指出 Business Plan 账户数量少但活跃率和席位利用表现最好。

案例二:按过滤条件查看同一组指标

用户提问:

系统行为:

  1. 先查询
    source
    source
    字段中的真实取值,确认存储格式是
    Google
    Google
  2. 继续使用同一个答案构建器。
  3. 传入
    dims = plan
    dims = plan
  4. 传入
    filters: source = Google
    filters: source = Google
  5. 只选择用户要求的输出列:
    active_account_rate
    active_account_rate
    active_seats
    active_seats

这说明答案构建器不仅能固定 SQL 口径,还能让系统在问答时动态选择维度、过滤条件和输出字段。


与指标、知识的配合

答案构建器通常不应孤立使用。

配置作用
知识解释业务词汇和口径,例如“活跃账户指 active_subscription = TRUE 的账户”。
指标固化单个常用聚合口径,适合简单、高频问题。
答案构建器固化复杂 SQL 模板,适合多指标、多维度、多过滤或明细查询。

实际问答中,系统会先搜索知识,理解“活跃账户”等业务概念;再查找可用指标和答案构建器;如果找到匹配的答案构建器,会优先使用其 SQL 模板执行计算。


名称、别名和描述怎么写

答案构建器里有几类名称,含义不同,建议不要混用。

配置项面向对象建议写法
答案构建器名称系统匹配和管理列表用业务主题命名,如“账户健康概览”。
答案构建器别名用户自然语言匹配写用户常用叫法,如“账户健康”“账户质量”“活跃概览”。
答案构建器描述系统理解适用范围写清包含哪些指标、支持哪些维度和过滤条件。
输出字段名SQL 和底层执行可以使用英文技术名,如
active_account_rate
active_account_rate
输出指标名问答和图表展示建议使用业务名,如“账户活跃率”。
输出指标别名用户不同叫法补充“活跃率”“活跃占比”等表达。
输出指标描述指标口径解释写清计算公式,例如“活跃账户数 / 账户数”。

一个常见误区是只给答案构建器写了清晰名称,但输出字段仍保留英文技术名。这样系统可以执行,但最终答案、图表字段或记录里仍可能出现

active_account_rate_metric
active_account_rate_metric
之类的名称。最佳实践是:构建器名称负责“让系统选中模板”,输出指标名称负责“让用户看懂结果”。


常见问题与处理建议

问题可能原因处理建议
校验提示 SQL 缺少过滤条件参数SQL 没有
${filters}
${filters}
WHERE
WHERE
中加入
${filters}
${filters}
,并绑定过滤字段。
用户说“按某字段分组”但系统没有使用该字段没有配置
${dims}
${dims}
或没有绑定该字段为维度
在 SQL 中加入
${dims}
${dims}
GROUP BY ${dims}
GROUP BY ${dims}
,并在配置步骤中选择维度字段。
问答结果出现英文技术名输出字段没有配置中文指标名、别名或描述保存前补充业务化名称和别名。
预览只有总数,没有分组预览未传入具体维度,
${dims}
${dims}
默认替换为
1
1
保存后通过自然语言问题验证动态维度,或在预览中选择维度后再运行。
用户过滤条件没有生效过滤字段未绑定,或字段值大小写/枚举值不一致将字段加入过滤配置;必要时让系统先查询字段真实取值。
多个构建器都可能匹配构建器名称、别名、描述不够清晰使用明确的业务主题命名,并在描述中写清适用问题。
保存后记录里显示“执行指标计算”答案构建器输出可能会被注册成 SQL 类型指标调用这是正常现象,可通过记录中的
metricType = SQL
metricType = SQL
dims
dims
filters
filters
判断本次问答是否调用了构建器。
不知道“数据”页签有什么用数据页签展示同数据源下可引用的数据表编写 SQL 时可用它确认表资产;它不是答案构建器的结果页。
输出字段很多,不知道是否都要保留SQL 输出字段会分别创建指标只输出用户会真正查询和解释的指标;无关中间字段不要出现在最终 SELECT 中。
高基数字段出现在维度列表中字段可分组不代表适合业务分析ID、邮箱、姓名等字段通常不建议作为默认维度,除非问题确实需要明细级分析。

建议检查清单

上线一个答案构建器前,建议逐项检查:

  • SQL 中是否包含必要的
    ${filters}
    ${filters}
  • 需要动态分组时,是否包含
    ${dims}
    ${dims}
    GROUP BY ${dims}
    GROUP BY ${dims}
  • 过滤字段是否覆盖用户常用筛选条件。
  • 维度字段是否覆盖用户常用拆分方式。
  • 输出字段是否都配置了业务化指标名。
  • 输出字段是否补充了别名和描述。
  • 比例类指标是否使用合适的 POP 表达式。
  • 预览运行结果是否符合预期。
  • 是否用自然语言验证过典型问题。
  • 构建器名称和描述是否能让系统准确匹配。

设计建议

答案构建器的颗粒度应围绕“一个业务分析主题”设计。

推荐:

  • 账户健康概览
    账户健康概览
  • 订单转化分析
    订单转化分析
  • 渠道投放效果
    渠道投放效果
  • 客户留存分析
    客户留存分析
  • 交易明细查询
    交易明细查询

不推荐:

  • 把完全无关的指标放进一个构建器。
  • 为每个简单 COUNT 单独创建答案构建器。
  • 只写 SQL,不配置过滤字段、维度字段和业务描述。
  • 输出字段全部保留英文技术名。

一个好的答案构建器应该让用户可以自然地问:

而不是要求用户知道底层表名、字段名和 SQL 逻辑。

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询