在 Snowflake Intelligence 中自定义图表¶
Snowflake Intelligence 根据您的数据自动生成图表。您可以通过向代理或语义视图添加配置来自定义这些图表,控制颜色、字体、图表类型等。
概述¶
自定义在两个级别上进行:
代理级别:应用于附加到代理的每个语义视图的所有图表。用于全局默认值,例如品牌颜色和字体。
语义视图级别:仅应用于从该特定语义视图生成的图表。用于特定于列的规则和特定于域的图表类型首选项。
每个级别都有两种机制可用:
vega_template:部分 Vega-Lite (https://vega.github.io/vega-lite/) JSON 规范,确定性地合并到每个生成的图表中。用于任何必须始终应用的内容。
自由文本说明:自然语言指导,注入到图表生成提示中。LLM 会尽力遵循,但无法完全保证。
备注
当代理和语义视图都定义了 vega_template 时,首先应用代理模板,然后应用语义视图模板。对于冲突的键,以语义视图的设置为准。
代理级别自定义¶
在代理配置中的 instructions.orchestration 内添加 <chart_customization> 块。您可以将字体主题和全局默认色板结合使用:
代理级别适用于:
品牌色板
默认视觉主题(字体、背景)
跨域样式首选项
数字或货币格式的默认值
避免在代理级别进行特定于列的颜色映射。列名在不同的语义视图之间各不相同,如果找不到对应的列名,设置将被静默忽略。
语义视图级别自定义¶
在您的语义视图 YAML 的 module_custom_instructions.sql_generation 字段内添加 <chart_customization> 块。当两个字段同时设置时,该字段的优先级高于旧有的 custom_instructions 字段。
语义视图级别适用于:
针对特定列的颜色映射
特定于域的图表类型规则
特定于指标的格式
替换代理级别的默认值
谨慎使用:模板会影响每个图表¶
vega_template 合并到该级别生成的 每个图表。不存在基于单个问题或单个图表类型的筛选机制。如果您在代理级别添加了 encoding.y 替换,它将同样应用于条形图、折线图、散点图和饼图。
在添加模板之前,请考虑:
范围:代理级别的模板会影响所有语义视图中的所有图表。当规则特定于一个域或数据集时,优先选择语义视图级别。
通配符编码:省略了
field的模板编码(例如,"y": {"axis": {"format": "..."}})会应用于每个图表的y轴,无论绘制的是哪一列。当语义视图已知时,使用field将其固定到特定列。标记替换:在代理级别设置
"mark": "line"会强制每个图表变为折线图,即使 LLM 本来会正确选择条形图或饼图。仅在您对数据拥有领域知识的语义视图级别替换mark。转换数组:模板中的
calculate转换(例如_color)被注入到每个图表的transform数组。如果数据不包含引用的列,Vega-Lite 会静默地生成该计算字段的null值。
如有疑问,请从语义视图级别开始,只有在确认规则对所有图表都是安全的后,才提升到代理级别。
要在部署模板之前对其进行验证,请将具有代表性的图表规范(已合并您的 vega_template)粘贴到 Vega Editor (https://vega.github.io/editor) 中。编辑器在控制台中显示实时警告和错误。有效的模板不应产生警告。通过这种方式可以捕获的常见问题包括:属性名称无效、类型不匹配、无法访问的 calculate 表达式和比例配置错误。
字体¶
字体设置通过 vega_template 中的 config 块控制。所有字体属性都全局应用于图表,会影响生成的每个图表,无论数据为何。
备注
使用 CSS 通用字体族,以实现最大程度的兼容性。Snowflake Intelligence 中的图表在两种上下文中渲染:在 Snowsight 浏览器 UI 中(客户端,字体取决于用户的 OS 和浏览器),以及在 Linux 容器中的服务器端,用于验证和图像导出。像 Arial 或 Georgia 这样有具体名称的字体可能未安装在服务器端容器中。CSS 通用字体族在这两种上下文中都能正确解析:
通用字体族 |
解析为 |
|---|---|
|
Arial (Windows/macOS)、DejaVu Sans 或 Liberation Sans (Linux) |
|
Times New Roman (Windows/macOS)、DejaVu Serif 或 Liberation Serif (Linux) |
|
Courier New (Windows/macOS)、DejaVu Sans Mono 或 Liberation Mono (Linux) |
如果您需要自定义品牌字体,则该字体必须安装在服务器端渲染容器中,同时 必须通过 Snowsight 中的 CSS @font-face 提供。
常见的 config 字体属性:
属性 |
适用范围 |
|---|---|
|
图表标题 |
|
坐标轴刻度标签 |
|
坐标轴标题(例如,“收入”) |
|
分面/小倍数标题 |
|
图例值标签 |
|
图例标题 |
|
文本标记(注释) |
您还可以与字体一起设置全局 background 颜色:
颜色¶
LLM 指令(软)¶
应用颜色规则的最简单方法是用自由文本进行描述。LLM 会根据“尽力而为”的原则来解释这些指令。
当不需要精确的十六进制值时,可使用此方法进行快速、近似的颜色指导。
使用 _color 进行精确值映射¶
使用 calculate 转换将特定列值映射到精确的十六进制颜色。未列出的值会收到一个空字符串,Vega-Lite 会使用自己的默认值渲染这些值。
当您需要为每个已知值提供精确、有保证的颜色时,请使用此方法。
备注
_color 变换和 encoding.color 块始终合并到图表中,无论 LLM 选择按哪一列进行着色。这意味着:
只有在图表的颜色通道实际使用
calculate表达式中引用的列时,映射才能正确生效(例如STATUS)。如果 LLM 将颜色分配给不同的列,则数据中虽存在_color字段,但颜色将无法匹配。每个模板只能针对一列进行设置。
特定值固定与色板回退¶
为关键值固定颜色,并让其余值从色板中自动分配。使用 "merge": "extend" 来保留 LLM 现有的颜色选择,仅添加新的映射。
不在 domain 内的数据值将自动获取 scheme 中的下一个可用颜色。分配后,scheme 从最终规范中移除。
受支持的架构名称:tableau10、tableau20、category10、category20、category20b、category20c、dark2、paired、pastel1、pastel2、set1、set2、set3、accent。
禁用 Snowsight 样式¶
默认情况下,Snowflake Intelligence 会在生成的图表之上应用 Snowsight UI 主题调整。要选择退出并完全按照 vega_template 中指定的方式渲染图表,请在 usermeta 中将 ui-merge 设置为 "none"。
当您希望完全控制视觉输出时(例如,应用自定义品牌主题且不希望 Snowsight 替换颜色、字体或背景时),这非常有用。
备注
ui-merge 由 Snowsight 客户端渲染器解释,而不是由 Orchestrator 后端解释。它对合并引擎生成的图表规范没有影响。它仅控制在浏览器中显示图表时,Snowsight 如何在最终规范之上应用自己的主题。
数字和货币格式化(实验性)¶
坐标轴和图例标签可以通过 vega_template 使用 D3 格式字符串 (https://d3js.org/d3-format) 进行格式化。这对于在所有图表中强制执行统一的货币符号、小数位数或 SI 后缀非常有用。
为定量轴(x 、y)设置 axis.format,为颜色/尺寸图例设置 legend.format:
备注
仅当通道的数据类型为 "quantitative" 时,Vega-Lite 才会应用 axis.format。如果 LLM 推断出不同的类型(例如,将年份或 ID 列视为 "ordinal"),格式字符串将被静默忽略。这是 vega_template 方法的一个公认限制,因为合并是在不检查推断类型的情况下进行的。
Workaround:在模板中显式强制指定类型(override 模式):
这保证了格式会生效,但可能会影响其他依赖类型的渲染(如轴刻度、分箱)。
常见的 D3 格式字符串:
格式 |
输出示例 |
用途 |
|---|---|---|
|
$1,234,567 |
美元金额,无小数 |
|
$1,234,567.89 |
美元金额,保留 2 位小数 |
|
1,234,567 |
大整数,带千位分隔符 |
|
42.3% |
百分比 |
|
1.2M |
大数字,带 SI 前缀 |
|
3.14 |
固定保留 2 位小数 |
要在代理级别将格式化应用于所有定量通道(无需知道具体的列名),请执行以下操作:
使用 "merge": "extend",这样格式化只会添加到 LLM 已经填充的通道中,而不会覆盖它们的 field 或 type 设置。
合并模式¶
通过在模板内部设置 "usermeta": {"merge": "<mode>"},控制 vega_template 与 LLM 生成图表的交互方式。
模式 |
行为 |
|---|---|
``override``(默认) |
模板值会覆盖图表。适用于需要强制执行特定设置的情况。 |
|
现有图表值将保留。添加新的键和其他刻度条目。适用于想在不替换 LLM 选择的前提下添加内容的情况。 |
适用于两种模式的规则:
data块永远不会被覆盖。仅当模板的
field与图表的field匹配,或者模板省略了field时,编码替换才生效。合并后,实际数据中不存在的域条目会自动移除。
示例:强制使用折线图