Anpassen von Diagrammen in Snowflake Intelligence

Snowflake Intelligence generiert Diagramme automatisch aus Ihren Daten. Sie können diese Diagramme anpassen, Farben, Schriftarten, Diagrammtypen und mehr steuern, indem Sie die Konfiguration zu Ihrem Agenten oder Ihrer semantischen Ansicht hinzufügen.

Übersicht

Die Anpassung funktioniert auf zwei Ebenen:

  • Agentenebene: Gilt für alle Diagramme in jeder mit dem Agenten verbundenen semantischen Ansicht. Verwenden Sie dies für globale Standardeinstellungen wie Markenfarben und Schriftarten.

  • Ebene der semantischen Ansicht: Gilt nur für Diagramme, die aus dieser spezifischen semantischen Ansicht generiert wurden. Verwenden Sie dies für spaltenspezifische Regeln und domänenspezifische Einstellungen für Diagrammtypen.

Auf jeder Ebene stehen zwei Mechanismen zur Verfügung:

  • vega_template: Eine teilweise `Vega-Lite <https://vega.github.io/vega-lite/>`_JSON-Spezifikation, die deterministisch in jedes generierte Diagramm eingefügt wird. Verwenden Sie dies für alles, was immer gelten muss.

  • Freitextanweisungen: Anleitung in natürlicher Sprache, die in den Prompt für die Diagrammerstellung eingefügt wird. Das LLM bemüht sich , diese einzuhalten, dies ist jedoch nicht garantiert.

Bemerkung

Wenn sowohl der Agent als auch die semantische Ansicht eine vega_template definieren, wird die Agentenvorlage zuerst angewendet und die Vorlage der semantischen Ansicht als nächstes. Bei widersprüchlichen Schlüsseln setzt sich die semantische Ansicht durch.

Anpassung auf Agentenebene

Fügen Sie einen <chart_customization>-Block in instructions.orchestration in Ihrer Agentenkonfiguration hinzu. Sie können Schriftthemes und eine globale Standardpalette kombinieren:

<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>

Verwenden Sie die Agentenebene für:

  • Markenfarbenpalette

  • Visuelles Standardthemes (Schemas, Hintergrund)

  • Einstellungen für den domänenübergreifenden Stil

  • Standardwerte für die Formatierung von Zahlen oder Währungen

Vermeiden Sie spaltenspezifische Farbzuordnungen auf Agentenebene. Die Spaltennamen unterscheiden sich zwischen den semantischen Ansichten und werden stillschweigend ignoriert, wenn sie nicht gefunden werden.

Anpassung auf der Ebene der semantischen Ansicht

Fügen Sie einen <chart_customization>-Block im Feld module_custom_instructions.sql_generation der YAML-Datei der semantischen Ansicht hinzu. Dieses Feld hat Vorrang vor dem alten Feld custom_instructions, wenn beide festgelegt sind.

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:
  ...

Verwenden Sie die Ebene der semantischen Ansicht für:

  • Farbzuordnungen pro Spalte

  • Domänenspezifische Regeln für Diagrammtypen

  • Metrikspezifische Formatierung

  • Überschreiben der Standardeinstellungen auf Agentenebene

Vorsicht bei der Verwendung: Vorlagen wirken sich auf jedes Diagramm aus

vega_template wird in jedes Diagramm eingebunden, das auf dieser Ebene erstellt wurde. Es gibt keine Filterung pro Frage oder pro Diagrammtyp. Wenn Sie encoding.y auf Agentenebene hinzufügen, gilt dies gleichermaßen für Balkendiagramme, Liniendiagramme, Streudiagramme und Kreisdiagramme.

Bevor Sie eine Vorlage hinzufügen, sollten Sie Folgendes beachten:

  • Bereich: Vorlagen auf Agentenebene wirken sich auf alle Diagramme in allen semantischen Ansichten aus. Nutzen Sie die Ebene der semantischen Ansicht bevorzugt, wenn eine Regel spezifisch für eine Domäne oder ein Datenset ist.

  • Platzhaltercodierungen: Eine Vorlagencodierung, bei der field (z. B.``“y“: {„axis“: {„format“: „…“}}``) weggelassen wird, gilt für jede y-Achse eines Diagramms, unabhängig davon, welche Spalte dargestellt wird. Verwenden Sie field, um sie an eine bestimmte Spalte zu heften, wenn die semantische Ansicht bekannt ist.

  • „mark“ überschreiben: Das Festlegen von "mark": "line" auf Agentenebene dass jedes Diagramm als Liniendiagramm dargestellt wird, auch dort, wo das LLM korrekt ein Balken- oder Kreisdiagramm wählen würde. Überschreiben Sie mark nur auf der Ebene der semantischen Ansicht, wo Sie Domänenkenntnisse über die Daten haben.

  • „transform“-Arrays: Eine calculate-Transformation in der Vorlage (z. B.``_color``) wird in jedes transform-Array eines Diagramms eingefügt. Wenn die Daten die referenzierte Spalte nicht enthalten, erzeugt Vega-Lite stillschweigend null-Werte für das berechnete Feld.

Wenn Sie unsicher sind, beginnen Sie auf der Ebene der semantischen Ansicht und wechseln Sie erst auf die Ebene des Agenten, nachdem Sie bestätigt haben, dass die Regel für alle Diagramme sicher ist.

Um eine Vorlage vor der Bereitstellung zu validieren, fügen Sie eine repräsentative Diagrammspezifikation (mit bereits eingebundener vega_template) in den Vega-Editor ein. Der Editor zeigt Live-Warnungen und -Fehler in der Konsole an. Eine gültige Vorlage sollte keine Warnungen erzeugen. Häufige Probleme, die auf diese Weise abgefangen werden können: ungültige Eigenschaftsnamen, nicht übereinstimmende Typen, nicht erreichbare calculate-Ausdrücke und Fehler bei der Konfiguration der Skalierung.

Schriftarten

Schrifteinstellungen werden über den config-Block in vega_template gesteuert. Alle Schrifteigenschaften werden global auf das Diagramm angewendet und wirken sich auf jedes generierte Diagramm aus, unabhängig von den Daten.

Bemerkung

Verwenden Sie generische CSS-Schriftfamilien für maximale Kompatibilität. Diagramme in Snowflake Intelligence werden in zwei Kontexten gerendert: in der Snowsight-Browser-UI (clientseitig, die Schriftarten hängen vomOS und Browser der Benutzenden ab) und serverseitig in einem Linux Container für die Validierung und Image-Export. Benannte Schriften wie Arial oder``Georgia`` ist möglicherweise nicht im serverseitigen Container installiert. Generische CSS-Familien werden in beiden Kontexten immer korrekt aufgelöst:

Generische Familie

Wird aufgelöst in

sans-serif

Arial (Windows/macOS) ,DejaVu Sans oder Liberation Sans (Linux)

serif

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

monospace

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

Wenn Sie eine angepasste Markenschrift benötigen, muss diese im serverseitigen Scripting-Container installiert und über CSS``@font-face`` in Snowsight bereitgestellt werden.

{
  "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" }
  }
}

Allgemeine config-Schrifteigenschaften:

Eigenschaft

Gilt für

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

Diagrammüberschrift

axis.labelFont, axis.labelFontSize

Achsenmarkierungsbeschriftungen

axis.titleFont, axis.titleFontSize

Achsentitel (z. B. „Umsatz“)

header.labelFont, header.labelFontSize

Überschriften von Facetten / Small Multiples

legend.labelFont, legend.labelFontSize

Wertbeschriftungen der Legende

legend.titleFont, legend.titleFontSize

Titel der Legende

mark.font

Textzeichen (Anmerkungen)

Sie können neben Schriften auch eine globalen background-Farbe festlegen:

{
  "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" }
  }
}

Farben

LLM-Anweisungen (weich)

Der einfachste Weg, Farbregeln anzuwenden, besteht darin, sie in Freitext zu beschreiben. Das LLM interpretiert diese auf der bestmöglichen Basis.

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

Verwenden Sie dies für eine schnelle, approximierte Farbzuordnung, wenn keine genauen Hex-Werte erforderlich sind.

Genaue Zuordnung von Werten mit _color

Ordnen Sie bestimmte Spaltenwerte zu genauen Hex-Farben mit einer calculate-Transformation zu. Werte, die nicht aufgeführt sind, erhalten eine leere Zeichenfolge, und Vega-Lite gibt diese mit seinen eigenen Standardwerten wieder.

{
  "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" } }
    }
  }
}

Verwenden Sie dies, wenn Sie für jeden bekannten Wert exakte, garantierten Farben benötigen.

Bemerkung

Die _color-Transformation und der encoding.color-Block werden immer in das Diagramm eingefügt, unabhängig davon, anhand welcher Spalte das LLM die Farbe gewählt hat. Dies bedeutet:

  • Die Zuordnung funktioniert nur dann korrekt, wenn der Farbkanal des Diagramms tatsächlich dieselbe Spalte verwendet, auf die im calculate Ausdruck (z. B.``STATUS``) verwiesen wird. Wenn das LLM die Farbe einer anderen Spalte zuweist, ist das Feld _color in den Daten vorhanden, aber die Farben stimmen nicht überein.

  • Pro Vorlage kann nur eine Spalte als Ziel definiert werden.

Angeheftete Werte mit Paletten-Fallback

Heften Sie Farben für Schlüsselwerte an und lassen Sie die übrigen automatisch aus einer Farbpalette zuweisen. Verwenden Sie "merge": "extend", um die bestehenden Farboptionen des LLMs beizubehalten, und fügen Sie nur neue Zuordnungen hinzu.

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

Datenwerten, die nicht in domain enthalten sind, wird automatisch die nächste verfügbare Farbe von scheme zugewiesen. Nach der Zuweisung wird scheme aus der endgültigen Spezifikation entfernt.

Unterstützte Schemanamen: tableau10, tableau20, category10, category20, category20b, category20c, dark2, paired, pastel1, pastel2, set1, set2, set3, accent.

Deaktivieren von Snowsight-Stilen

Standardmäßig wendet Snowflake Intelligence zusätzlich zum generierten Diagramm Snowsight UI-Themeanpassungen an. Wenn Sie dieses Verhalten deaktivieren und das Diagramm genau so rendern möchten, wie es in Ihrer vega_template angegeben ist, legen Sie ui-merge auf "none" in usermeta fest:

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

Dies ist nützlich, wenn Sie die volle Kontrolle über die visuelle Ausgabe wünschen, z. B. wenn Sie ein angepasstes Markentheme anwenden und Sie nicht möchten, dass Snowsight Farben, Schriftarten oder Hintergründe überschreibt.

Bemerkung

ui-merge wird vom clientseitigen Snowsight-Renderer interpretiert, nicht vom Orchestrator-Backend. Dies hat keine Auswirkungen auf die von der Merge-Engine erzeugten Diagrammspezifikationen. Es wird nur gesteuert, wie Snowsight bei der Anzeige des Diagramms im Browser zusätzlich zur endgültigen Spezifikation ein eigenes Theme anwendet.

Zahlen- und Währungsformatierung (experimentell)

Achsen- und Legendenbeschriftungen können mit Zeichenfolgen im D3-Format durch vega_template formatiert werden. Dies ist nützlich, um konsistente Währungssymbole, Dezimalstellen oder SI-Suffixe für alle Diagramme durchzusetzen.

Legen Sie axis.format für quantitative Achsen (x, y) und legend.format für Farb-/Größenlegenden fest:

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

Bemerkung

axis.format wird von Vega-Lite nur angewendet, wenn der Datentyp des Kanals "quantitative" ist. Wenn das LLM einen anderen Typ ableitet (z. B. "ordinal" für ein Jahr oder eine ID-Spalte), wird die Formatzeichenfolge stillschweigend ignoriert. Dies ist eine akzeptierte Beschränkung des vega_template-Ansatzes, da die Zusammenführung ohne Prüfung der abgeleiteten Typen angewendet wird.

Problemumgehung: Erzwingen Sie den Typ explizit in der Vorlage (override-Modus):

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

Dies garantiert, dass das Format angewendet wird, aber es kann andere typabhängige Renderings beeinflussen (Achsenmarkierungen, Binning).

Gängige D3-Formatzeichenfolgen:

Format

Ausgabebeispiel

Verwenden für

$,.0f

1.234.567 $

Währungsbeträge, keine Dezimalstellen

$,.2f

1.234.567,89 $

Währungsbeträge, 2 Dezimalzahlen

,.0f

1.234.567

Große Ganzzahlen mit Tausendertrennzeichen

.1%

42,3 %

Prozentsätze

.2s

1,2 M

Große Zahlen mit SI-Präfix

.2f

3.14

2 feste Dezimalstellen

So wenden Sie die Formatierung auf alle quantitativen Kanäle auf Agentenebene an (ohne den spezifischen Spaltennamen zu kennen):

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

Verwenden Sie "merge": "extend", damit das Format nur zu Kanälen hinzugefügt wird, die das LLM bereits aufgefüllt hat, ohne deren field- oder``type``-Einstellungen zu überschreiben.

Zusammenführungsmodi

Steuern Sie, wie vega_template mit dem LLM-generierten Diagramm interagiert, indem Sie "usermeta": {"merge": "<mode>"} innerhalb der Vorlage festlegen.

Modus

Verhalten

override (Standard)

Vorlagenwerte überschreiben das Diagramm. Verwenden Sie diese Option, wenn Sie eine bestimmte Einstellung erzwingen müssen.

extend

Vorhandene Diagrammwerte bleiben erhalten. Neue Schlüssel und zusätzliche Skalierungseinträge werden hinzugefügt. Verwenden Sie diese Option, wenn Sie dem Diagramm etwas hinzufügen möchten, ohne die Auswahl des LLMs zu ersetzen.

Regeln, die für beide Modi gelten:

  • Der data-Block wird nie überschrieben.

  • Codierungsüberschreibungen gelten nur, wenn das field der Vorlage mit dem field des Diagramms übereinstimmt oder die Vorlage field weglässt.

  • Nach der Zusammenführung werden Domäneneinträge, die in den eigentlichen Daten nicht vorhanden sind, automatisch entfernt.

Beispiel: Erzwingen eines Liniendiagramms

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