Snowflake Intelligence 에서 차트 사용자 지정

Snowflake Intelligence 는 데이터에서 자동으로 차트를 생성합니다. 에이전트 또는 의미 체계 뷰에 구성을 추가하여 색상, 글꼴, 차트 유형 등을 제어해 이러한 차트를 사용자 지정할 수 있습니다.

개요

사용자 지정은 다음 두 가지 수준에서 작동합니다.

  • 에이전트 수준: 에이전트에 첨부된 모든 의미 체계 뷰의 모든 차트에 적용됩니다. 브랜드 색상 및 글꼴과 같은 전역 기본값에 사용합니다.

  • 의미 체계 뷰 수준: 해당 특정 의미 체계 뷰에서 생성된 차트에만 적용됩니다. 열별 규칙 및 도메인별 차트 유형 기본 설정에 사용합니다.

각 수준에서 다음 두 가지 메커니즘을 사용할 수 있습니다.

  • vega_template: 생성된 모든 차트에 결정적으로 병합되는 부분적인 Vega-Lite JSON 사양. 항상 적용해야 하는 모든 항목에 사용합니다.

  • 자유 텍스트 지침: 차트 생성 프롬프트에 삽입된 자연어 안내. LLM은 이를 따르기 위해 최선을 다하지만, 보장되지는 않습니다.

참고

에이전트 뷰와 의미 체계 뷰 모두 vega_template 을 정의하는 경우 에이전트 템플릿이 먼저 적용되고 의미 체계 뷰 템플릿이 두 번째로 적용됩니다. 충돌하는 키에서는 의미 체계 뷰가 우선합니다.

에이전트 수준 사용자 지정

에이전트 구성의 instructions.orchestration 내부에 <chart_customization> 블록을 추가합니다. 글꼴 테마와 전역 기본 팔레트를 결합할 수 있습니다.

<chart_customization>
Prefer horizontal bar charts for ranked data.
vega_template:
{
  "background": "antiquewhite",
  "config": {
    "title":  { "font": "monospace", "fontStyle": "italic", "fontSize": 20, "fontWeight": "lighter" },
    "axis":   { "labelFont": "monospace", "titleFont": "monospace", "titleFontSize": 15, "labelFontSize": 10 },
    "header": { "labelFont": "monospace", "titleFont": "monospace", "labelFontSize": 10 },
    "legend": { "labelFont": "monospace", "titleFont": "monospace", "titleFontSize": 18, "labelFontSize": 15 },
    "mark":   { "font": "monospace" }
  }
}
</chart_customization>

다음에 대해 에이전트 수준을 사용합니다.

  • 브랜드 색상 팔레트

  • 기본 시각적 테마(글꼴, 배경)

  • 도메인 간 스타일 기본 설정

  • 숫자 또는 통화 형식 기본값

에이전트 수준에서는 열별 색상 매핑을 피하세요. 열 이름은 의미 체계 뷰마다 다르며 해당 이름을 찾을 수 없는 경우 자동으로 무시됩니다.

의미 체계 뷰 수준 사용자 지정

의미 체계 뷰 YAML의 module_custom_instructions.sql_generation 필드 내부에 <chart_customization> 블록을 추가합니다. 이 필드는 둘 다 설정된 경우 레거시 custom_instructions 필드보다 우선합니다.

CREATE OR REPLACE SEMANTIC VIEW my_db.my_schema.my_view
  FROM @my_stage/semantic_view.yaml;
# semantic_view.yaml
name: my_view
module_custom_instructions:
  sql_generation: |
    <chart_customization>
    Always use a line chart for time series data.
    vega_template:
    {
      "transform": [
        {
          "calculate": "datum.CATEGORY === 'Furniture' ? '#4e79a7' : datum.CATEGORY === 'Technology' ? '#f28e2b' : datum.CATEGORY === 'Office Supplies' ? '#e15759' : ''",
          "as": "_color"
        }
      ],
      "encoding": {
        "color": { "field": "CATEGORY", "type": "nominal", "scale": { "range": { "field": "_color" } } }
      }
    }
    </chart_customization>
tables:
  ...

다음에 대해 의미 체계 뷰 수준을 사용합니다.

  • 열별 색상 매핑

  • 도메인별 차트 유형 규칙

  • 메트릭별 형식 지정

  • 에이전트 수준 기본값 재정의하기

주의해서 사용: 템플릿은 모든 차트에 영향을 줌

vega_template 은 해당 수준에서 생성된 모든 차트 에 병합됩니다. 질문별 또는 차트 유형별 필터링이 없습니다. 에이전트 수준에서 encoding.y 재정의를 추가하는 경우, 막대 차트, 꺾은선형 차트, 산점도, 원형 차트에 모두 적용됩니다.

템플릿을 추가하기 전에 다음 사항을 고려하세요.

  • 범위: 에이전트 수준 템플릿은 모든 의미 체계 뷰의 모든 차트에 영향을 줍니다. 규칙이 한 도메인 또는 데이터 세트에만 적용되는 경우 의미 체계 뷰 수준을 사용합니다.

  • 와일드카드 인코딩: field 를 생략한 템플릿 인코딩(예: "y": {"axis": {"format": "..."}})은 구성된 열에 관계없이 모든 차트의 y 에 적용됩니다. 의미 체계 뷰가 알려진 경우 field 를 사용하여 특정 열에 고정합니다.

  • 마크 재정의: 에이전트 수준에서는 "mark": "line" 을 설정하면 LLM이 막대 또는 원형 차트를 올바르게 선택하는 경우를 포함하여 모든 차트가 선으로 강제 적용됩니다. 데이터에 대한 도메인 지식이 있는 의미 체계 뷰 수준에서만 mark 를 재정의합니다.

  • 배열 변환: 템플릿의 calculate 변환(예: _color)은 모든 차트의 transform 배열에 삽입됩니다. 데이터에 참조된 열이 포함되지 않은 경우 Vega-Lite는 계산된 필드에 대해 null 값을 자동으로 생성합니다.

확실하지 않은 경우 의미 체계 뷰 수준에서 시작하여 규칙이 모든 차트에 안전한지 확인한 후에만 에이전트 수준으로 승격합니다.

템플릿을 배포하기 전에 유효성을 검사하려면 대표적인 차트 사양(vega_template 에 이미 병합됨)을 Vega 편집기 에 붙여넣습니다. 편집기는 콘솔에 실시간 경고와 오류를 표시합니다. 유효한 템플릿은 경고를 생성하지 않아야 합니다. 이러한 방식으로 유효하지 않은 속성 이름, 유형 불일치, 연결할 수 없는 calculate 식, 소수 자릿수 구성 오류 등의 일반적인 사항을 포착해야 합니다.

글꼴

글꼴 설정은 vega_templateconfig 블록을 통해 제어됩니다. 모든 글꼴 속성은 차트에 전역적으로 적용되며 데이터에 관계없이 생성된 모든 차트에 영향을 줍니다.

참고

호환성을 극대화하기 위해 CSS 일반 글꼴 패밀리를 사용합니다. Snowflake Intelligence 의 차트는 Snowsight 브라우저 UI(클라이언트 측, 글꼴은 사용자의 OS 및 브라우저에 따라 다름), 유효성 검사 및 이미지 내보내기를 위한 Linux 컨테이너의 서버 측의 두 가지 컨텍스트로 렌더링됩니다. Arial 또는 Georgia 와 같은 명명된 글꼴은 서버 측 컨테이너에 설치되지 않았을 수 있습니다. CSS 일반 패밀리는 다음 두 컨텍스트 모두에서 항상 올바르게 해석됩니다.

일반 패밀리

다음으로 해석됨

sans-serif

Arial(Windows/macOS), DejaVu Sans 또는 Liberation Sans(Linux)

serif

Times New Roman(Windows/macOS), DejaVu Serif 또는 Liberation Serif(Linux)

monospace

Courier New(Windows/macOS), DejaVu Sans Mono 또는 Liberation Mono(Linux)

사용자 지정 브랜드 글꼴이 필요한 경우 서버 측 렌더링 컨테이너에 설치해야 하고 Snowsight 에서 CSS @font-face 를 통해 제공해야 합니다.

{
  "config": {
    "title":  { "font": "serif", "fontSize": 20, "fontWeight": "bold", "fontStyle": "italic" },
    "axis":   { "labelFont": "monospace", "titleFont": "monospace", "labelFontSize": 11, "titleFontSize": 13 },
    "header": { "labelFont": "serif", "titleFont": "serif", "labelFontSize": 11 },
    "legend": { "labelFont": "serif", "titleFont": "serif", "labelFontSize": 12, "titleFontSize": 13 },
    "mark":   { "font": "serif" }
  }
}

일반적인 config 글꼴 속성:

속성

적용되는 경우

title.font, title.fontSize, title.fontWeight, title.fontStyle

차트 제목

axis.labelFont, axis.labelFontSize

축 눈금 레이블

axis.titleFont, axis.titleFontSize

축 제목(예: “수익”)

header.labelFont, header.labelFontSize

패싯/소규모 다중 헤더

legend.labelFont, legend.labelFontSize

범례 값 레이블

legend.titleFont, legend.titleFontSize

범례 제목

mark.font

텍스트 마크(주석)

글꼴과 함께 전역 background 색상을 설정할 수도 있습니다.

{
  "background": "#f9f9f9",
  "config": {
    "title":  { "font": "monospace", "fontStyle": "italic", "fontSize": 20, "fontWeight": "lighter" },
    "axis":   { "labelFont": "monospace", "titleFont": "monospace", "titleFontSize": 15, "labelFontSize": 10 },
    "header": { "labelFont": "monospace", "titleFont": "monospace", "labelFontSize": 10 },
    "legend": { "labelFont": "monospace", "titleFont": "monospace", "titleFontSize": 18, "labelFontSize": 15 },
    "mark":   { "font": "monospace" }
  }
}

색상

LLM 지침(소프트)

색상 규칙을 적용하는 가장 간단한 방법은 자유 텍스트로 설명하는 것입니다. LLM은 최선의 방식으로 이를 해석합니다.

<chart_customization>
Color Active status green, Inactive status red, and Pending status yellow.
</chart_customization>

정확한 16진수 값이 필요하지 않은 경우 빠르고 대략적인 색상 안내를 위해 이를 사용합니다.

_color를 사용한 정확한 값 매핑

calculate 변환을 사용하여 특정 열 값을 정확한 16진수 색상에 매핑합니다. 목록에 없는 값은 빈 문자열을 수신하고 Vega-Lite는 해당 값을 자체 기본값으로 렌더링합니다.

{
  "transform": [
    {
      "calculate": "datum.STATUS === 'Active' ? '#22c55e' : datum.STATUS === 'Inactive' ? '#ef4444' : datum.STATUS === 'Pending' ? '#eab308' : ''",
      "as": "_color"
    }
  ],
  "encoding": {
    "color": {
      "field": "STATUS",
      "type": "nominal",
      "scale": { "range": { "field": "_color" } }
    }
  }
}

알려진 모든 값에 대해 정확하고 보장된 색상이 필요한 경우 이 옵션을 사용합니다.

참고

_color 변환 및 encoding.color 블록은 LLM이 어떤 열을 기준으로 색상을 지정했는지에 관계없이 항상 차트에 병합됩니다. 이는 다음을 의미합니다.

  • 매핑은 차트의 색상 채널이 실제로 calculate 식에서 참조되는 동일한 열을 사용하는 경우에만 올바르게 작동합니다(예: STATUS). LLM이 다른 열에 색상을 할당한 경우 _color 필드는 데이터에 존재하지만 색상이 일치하지 않습니다.

  • 템플릿당 하나의 열만 대상으로 지정할 수 있습니다.

팔레트 대체가 있는 고정된 값

키 값의 색상을 고정하고 나머지는 팔레트에서 자동으로 할당합니다. "merge": "extend" 를 사용하여 LLM의 기존 색상 선택 사항을 유지하고 새 매핑만 추가합니다.

{
  "encoding": {
    "color": {
      "scale": {
        "domain": ["Furniture", "Technology", "Office Supplies"],
        "range":  ["#4e79a7", "#f28e2b", "#e15759"],
        "scheme": "tableau10"
      }
    }
  },
  "usermeta": { "merge": "extend" }
}

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" 으로 설정합니다.

{
  "usermeta": { "ui-merge": "none" }
}

이는 시각적 출력을 완벽하게 제어하려는 경우 유용합니다(예: 사용자 지정 브랜드 테마를 적용하고 Snowsight 가 색상, 글꼴 또는 배경을 재정의하지 않도록 하려는 경우).

참고

ui-merge 는 오케스트레이터 백엔드가 아닌 Snowsight 클라이언트 측 렌더러에 의해 해석됩니다. 병합 엔진에서 생성된 차트 사양에는 영향을 주지 않습니다. 브라우저에 차트를 표시할 때 Snowsight가 최종 사양 외에 자체 테마를 적용하는 방법만 제어합니다.

숫자 및 통화 형식 지정(실험용)

축 및 범례 레이블은 vega_template 을 통해 D3 형식 문자열 을 사용하여 형식을 지정할 수 있습니다. 이는 모든 차트에서 일관된 통화 기호, 소수점 이하 자릿수 또는 SI 접미사를 적용하는 경우 유용합니다.

정량적 축(x, y)의 경우 axis.format 을 설정하고 색상/크기 범례의 경우 legend.format 을 설정합니다.

{
  "encoding": {
    "y": { "axis": { "format": "$,.0f" } }
  }
}

참고

axis.format 은 채널의 데이터 타입이 "quantitative" 인 경우에만 Vega-Lite에 의해 적용됩니다. LLM이 다른 유형(예: 연도 또는 ID 열의 경우 "ordinal")을 추론하는 경우 형식 문자열은 자동으로 무시됩니다. 이는 추론된 유형을 검사하지 않고 병합이 적용되므로 vega_template 접근 방식의 허용된 제한 사항입니다.

해결 방법: 템플릿에서 유형을 명시적으로 강제 적용합니다(override 모드).

{
  "encoding": {
    "y": { "type": "quantitative", "axis": { "format": "$,.0f" } }
  }
}

이를 통해 형식이 적용되지만 다른 유형 종속 렌더링(축 눈금, 비닝)에 영향을 줄 수 있습니다.

일반적인 D3 형식 문자열:

형식

출력 예제

다음에 대해 사용

$,.0f

$1,234,567

달러 금액(소수점 제외)

$,.2f

$1,234,567.89

달러 금액(소수점 이하 2자리)

,.0f

1,234,567

천 단위 구분 기호가 있는 큰 정수

.1%

42.3%

백분율

.2s

1.2M

SI 접두사가 포함된 큰 숫자

.2f

3.14

소수점 이하 자릿수 2개 고정

(특정 열 이름을 모르는 상태로) 에이전트 수준에서 모든 정량적 채널에 형식을 적용하려면 다음을 실행합니다.

{
  "encoding": {
    "y": { "axis": { "format": "$,.0f" } },
    "x": { "axis": { "format": "$,.0f" } },
    "color": { "legend": { "format": "$,.0f" } }
  },
  "usermeta": { "merge": "extend" }
}

"merge": "extend" 를 사용하면 LLM이 이미 채워진 채널에만 형식이 추가되며, field 또는 type 설정은 덮어쓰지 않습니다.

병합 모드

템플릿 내부에 "usermeta": {"merge": "<mode>"} 를 설정하여 vega_template 이 LLM에서 생성된 차트와 상호작용하는 방식을 제어합니다.

모드

동작

override (기본값)

템플릿 값이 차트를 덮어씁니다. 특정 설정을 적용해야 하는 경우 사용합니다.

extend

기존 차트 값이 유지됩니다. 새 키와 추가 소수 자릿수 항목이 추가되었습니다. LLM이 선택한 항목을 바꾸지 않고 차트에 추가하려는 경우 사용합니다.

두 모드에 모두 적용되는 규칙:

  • data 블록은 덮어쓰지 않습니다.

  • 인코딩 재정의는 템플릿의 field 가 차트의 field 와 일치하거나 템플릿에 field 가 생략된 경우에만 적용됩니다.

  • 병합 후 실제 데이터에 없는 도메인 항목은 자동으로 제거됩니다.

예제: 꺾은선형 차트 강제 적용

{
  "mark": "line",
  "usermeta": { "merge": "override" }
}