[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-explore-omni-omni-to-snowflake-semantic-view":3,"mdc--u7vxnz-key":40,"related-org-explore-omni-omni-to-snowflake-semantic-view":6726,"related-repo-explore-omni-omni-to-snowflake-semantic-view":6875},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":35,"sourceUrl":38,"mdContent":39},"omni-to-snowflake-semantic-view","convert Omni topics to Snowflake views","Convert an Omni Analytics topic into a Snowflake Semantic View YAML definition. Use this skill whenever someone wants to export Omni metrics to Snowflake, create a Semantic View from an Omni topic, harden BI metrics into the warehouse, or bridge Omni's semantic layer with Snowflake Cortex Analyst.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"explore-omni","Explore Omni","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fexplore-omni.png","exploreomni",[13,17,20,23,26],{"name":14,"slug":15,"type":16},"Data Engineering","data-engineering","tag",{"name":18,"slug":19,"type":16},"Omni","omni",{"name":21,"slug":22,"type":16},"YAML","yaml",{"name":24,"slug":25,"type":16},"Analytics","analytics",{"name":27,"slug":28,"type":16},"Snowflake","snowflake",27,"https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fomni-agent-skills","2026-04-06T18:11:25.009706",null,3,[],{"repoUrl":30,"stars":29,"forks":33,"topics":36,"description":37},[],"A collection of skill for working with Omni. These skills help AI agents understand and execute Omni workflows more effectively.","https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fomni-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fomni-integrations\u002Fskills\u002Fomni-to-snowflake-semantic-view","---\nname: omni-to-snowflake-semantic-view\ndescription: \"Convert an Omni Analytics topic into a Snowflake Semantic View YAML definition. Use this skill whenever someone wants to export Omni metrics to Snowflake, create a Semantic View from an Omni topic, harden BI metrics into the warehouse, or bridge Omni's semantic layer with Snowflake Cortex Analyst.\"\n---\n\n# Omni → Snowflake Semantic View\n\nConverts an Omni topic into a Snowflake Semantic View YAML definition by first exploring the Omni model via API, then translating its definitions into the Snowflake Semantic View format.\n\n---\n\n## Prerequisites\n\n```bash\n# Verify the Omni CLI is installed — if not, ask the user to install it\n# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\ncommand -v omni >\u002Fdev\u002Fnull || echo \"ERROR: Omni CLI is not installed.\"\n```\n\n```bash\n# Show available profiles and select the appropriate one\nomni config show\n# If multiple profiles exist, ask the user which to use, then switch:\nomni config use \u003Cprofile-name>\n\n# Confirm the active profile is authenticated and inspect your permissions:\nomni whoami whoami\n```\n\n> **Auth**: a profile authenticates with an **API key** or **OAuth**. If `whoami` (or any call) returns **401**, hand off — ask the user to run `! omni config login \u003Cprofile>` (OAuth 2.1 browser flow; it blocks ~2 min on the browser). Don't run `config login` yourself in a headless\u002FCI session (no browser → timeout); on a local interactive machine you *may*. See the **`omni-api-conventions`** rule for profile setup (`omni config init --auth oauth`) and discovering request-body shapes with `--schema`.\n\n---\n\n> **Tip**: Use `-o json` to force structured output for programmatic parsing, or `-o human` for readable tables. The default is `auto` (human in a TTY, JSON when piped).\n\n## Runtime Environment Detection\n\nBefore starting, determine which environment you are running in — this controls how SQL is executed against Snowflake in Step 7.\n\n### How to detect\n\nCheck for the presence of the built-in Snowflake SQL execution capability:\n\n- **Cortex Code** (Snowflake Notebooks \u002F Cortex Analyst): Native SQL execution is available. No extra tooling required.\n- **Claude Code, Cursor, or any external IDE\u002Fagent**: No native Snowflake connection. You must use one of the CLI options below.\n\n### Detection heuristic\n\n```\nIf the agent can execute a SQL statement like `SELECT CURRENT_USER()` directly without any shell command → you are in Cortex Code.\nOtherwise → you are in an external environment.\n```\n\nIf unsure, ask the user: _\"Are you running this inside Snowflake (Cortex Code \u002F Notebooks), or in an external tool like Claude Code or Cursor?\"_\n\n### External environment: Snowflake connectivity options\n\nFor **Claude Code, Cursor, or any terminal-based agent**, choose one of the following. Check availability in order:\n\n#### Option A — Snowflake CLI (`snow`) ✅ Recommended\n\n```bash\n# Check if available\ncommand -v snow\n\n# Configure a connection (first time)\nsnow connection add\n\n# Execute SQL\nsnow sql -q \"SELECT CURRENT_USER();\" --connection \u003Cconnection_name>\n```\n\nSet a default connection to avoid repeating `--connection` on every call:\n```bash\nsnow connection set-default \u003Cconnection_name>\n```\n\n#### Option B — SnowSQL (classic CLI)\n\n```bash\n# Check if available\ncommand -v snowsql\n\n# Execute SQL\nsnowsql -a \u003Caccount> -u \u003Cuser> -q \"SELECT CURRENT_USER();\"\n```\n\n#### Option C — Python (`snowflake-connector-python`)\n\n```bash\npip install snowflake-connector-python\n```\n\n```python\nimport snowflake.connector\nconn = snowflake.connector.connect(\n    account=\"\u003Caccount>\",\n    user=\"\u003Cuser>\",\n    password=\"\u003Cpassword>\",   # or use key-pair \u002F SSO\n    warehouse=\"\u003Cwarehouse>\",\n    database=\"\u003Cdatabase>\",\n    schema=\"\u003Cschema>\",\n)\nconn.cursor().execute(\"\u003CSQL here>\")\n```\n\n> ✋ **STOP** — Confirm the Snowflake connection method with the user before proceeding to Step 7. Record which method is being used so Step 7 generates the correct execution command.\n\n---\n\n## Workflow\n\n### Step 1 — Gather Requirements\n\nAsk the user:\n1. Which **Topic** do they want to convert?\n2. What should the **Semantic View be named**?\n3. Where should it be created in Snowflake (**database** and **schema**)?\n4. Which **role** should be granted access to the Semantic View?\n\n> ⚠️ **STOP** — Confirm all four answers before proceeding.\n\n---\n\n### Step 2 — Explore the Omni Model\n\n#### 2a. Find the model ID\n\n```bash\nomni models list --modelkind SHARED\n```\n\nIdentify the **Shared Model** and note its `id`. Always prefer the Shared Model over Schema or Workbook models.\n\n#### 2b. Fetch the topic file\n\n```bash\nomni models yaml-get \u003CmodelId> --filename \u003Ctopic_name>.topic\n```\n\n#### 2c. Fetch the relationships file\n\n```bash\nomni models yaml-get \u003CmodelId> --filename relationships\n```\n\n#### 2d. Fetch each view file referenced in the topic\n\nFor every view in `base_view` and `joins`, fetch its YAML:\n\n```bash\nomni models yaml-get \u003CmodelId> --filename \u003Cview_name>.view\n```\n\n> If a view is prefixed with `omni_dbt_`, fetch the file that also starts with `omni_dbt_` (e.g. `omni_dbt_ecomm__order_items.view`).\n\n---\n\n### Step 3 — Identify Tables and Joins\n\n#### Mapping view names to Snowflake tables\n\nThe `base_view` in the topic file is the primary table. Convert view names to Snowflake table references:\n\n| `base_view` \u002F join value | Snowflake table |\n|---|---|\n| `ecomm__order_items` | `ECOMM.ORDER_ITEMS` |\n| `omni_dbt_ecomm__order_items` | `ECOMM.ORDER_ITEMS` (strip `omni_dbt_`) |\n\nThe `__` separator maps to schema (left) and table name (right). If the schema does not exist in Snowflake, skip that table entirely.\n\n#### Reading the join hierarchy\n\nThe `joins` parameter in the topic uses indentation to define the join chain — a table indented beneath another joins into its parent:\n\n```yaml\njoins:\n  user_order_facts: {}        # skip — this is a derived CTE, not a physical table\n  ecomm__users: {}            # joins to base_view (ORDER_ITEMS)\n  ecomm__inventory_items:     # joins to base_view (ORDER_ITEMS)\n    ecomm__products:          # joins to INVENTORY_ITEMS\n      demo__product_images: {}           # joins to PRODUCTS\n      ecomm__distribution_centers: {}   # joins to PRODUCTS\n```\n\n> Skip any view that is a derived table (CTE defined in SQL in Omni). These have no physical Snowflake table to reference.\n\n#### Primary keys\n\nIn each view file, find the dimension with `primary_key: true` — this becomes the `unique: true` dimension in the Semantic View.\n\n> ✋ **STOP** — Confirm the table list with the user before continuing.\n\n---\n\n### Step 4 — Resolve the Field List\n\nThe topic's `fields` parameter controls which fields from the views are included in the Semantic View.\n\n#### Field targeting rules\n\n| Syntax | Meaning |\n|---|---|\n| *(no `fields` parameter)* | Include **all** fields from all views |\n| `all_views.*` | Include all fields from all views |\n| `view.*` | Include all fields in the named view |\n| `tag:\u003Cvalue>` | Include all fields tagged with this value |\n| `view.field` | Include this specific field |\n| `-view.field` | **Exclude** this specific field |\n\n#### How to apply exclusions correctly\n\nExclusions (prefixed with `-`) must be applied **after** all inclusions are resolved. The process is:\n\n1. Start with an empty inclusion set\n2. Process each entry in `fields` in order:\n   - If it is an inclusion rule (`view.*`, `view.field`, `tag:x`) → add matching fields to the set\n   - If it is an exclusion rule (`-view.field`) → **remove** that field from the set, even if it was added by a wildcard\n3. The final set is the complete list of fields to include in the Semantic View\n\n**Example:**\n\n```yaml\nfields:\n  - ecomm__order_items.*          # include all order_items fields\n  - ecomm__users.country          # include this one users field\n  - -ecomm__order_items.cost      # remove cost — excluded even though * was used above\n  - -ecomm__order_items.raw_json  # remove raw_json — same reason\n```\n\nResult: all `order_items` fields **except** `cost` and `raw_json`, plus `users.country`.\n\n> ⚠️ **Critical:** A `-` exclusion always wins. Never include a field that has been explicitly excluded, regardless of what wildcard included it.\n\n---\n\n### Step 5 — Build Relationships\n\nUsing the join hierarchy from Step 3 and the `relationships.yaml` fetched in Step 2c, map each join to a Snowflake Semantic View relationship.\n\nEach entry in `relationships.yaml` looks like:\n\n```yaml\n- join_from_view: ecomm__order_items\n  join_to_view: ecomm__inventory_items\n  join_type: always_left\n  on_sql: ${ecomm__order_items.inventory_item_id} = ${ecomm__inventory_items.id}\n  relationship_type: assumed_many_to_one\n```\n\nThe `on_sql` field tells you the join columns. Extract the column names to populate `relationship_columns` in the output.\n\n**Available relationship parameters:**\n\n| Parameter | Description |\n|---|---|\n| `join_from_view` | Source view the join originates from |\n| `join_to_view` | Target view being joined to |\n| `join_type` | SQL join type (e.g. `always_left`) |\n| `on_sql` | SQL condition — extract column names from this |\n| `relationship_type` | Cardinality (e.g. `assumed_many_to_one`) |\n| `reversible` | Whether the join is bi-directional |\n| `where_sql` | Additional WHERE clause when join is active |\n\n---\n\n### Step 6 — Map Dimensions and Measures\n\nFor each view in the resolved field list, translate its Omni field definitions into Semantic View entries.\n\n> ⚠️ Only translate fields that survived the Step 4 inclusion\u002Fexclusion resolution. Do not add fields that were excluded.\n\n#### Dimensions → `dimensions` or `time_dimensions`\n\nThe field name becomes the dimension name unless a `label` is defined. Carry `description` and `synonyms` directly.\n\n---\n\n**Standard dimension:**\n\n```yaml\n# Omni view YAML\ncity:\n  sql: '\"CITY\"'\n  label: City\n  description: Customer's city\n```\n```yaml\n# Semantic View output\n- name: city\n  expr: CITY\n  description: Customer's city\n  data_type: TEXT\n```\n\n---\n\n**Date\u002Ftimestamp dimension** → use `time_dimensions`:\n\n```yaml\n# Omni\ncreated_at:\n  sql: '\"CREATED_AT\"'\n  type: time\n  label: Created At\n```\n```yaml\n# Semantic View output\ntime_dimensions:\n  - name: created_at\n    expr: CREATED_AT\n    data_type: TIMESTAMP\n```\n\n---\n\n**Group dimension** → translate to a `CASE WHEN` expression:\n\n```yaml\n# Omni\ndevice_type_groups:\n  sql: ${device_type}\n  label: Device Type Groups\n  groups:\n    - filter:\n        is: [ mobile, tablet ]\n      name: Handheld\n    - filter:\n        is: desktop\n      name: Desktop\n  else: Other\n```\n```sql\n-- expr value\nCASE\n  WHEN \"DEVICE_TYPE\" IN ('mobile', 'tablet') THEN 'Handheld'\n  WHEN \"DEVICE_TYPE\" = 'desktop' THEN 'Desktop'\n  ELSE 'Other'\nEND\n```\n\n---\n\n**Bin dimension** → translate to a `CASE WHEN` range expression:\n\n```yaml\n# Omni\nage_bin:\n  sql: ${age}\n  bin_boundaries: [ 18, 35, 50, 65 ]\n```\n```sql\n-- expr value\nCASE\n  WHEN \"AGE\" \u003C 18 THEN 'below 18'\n  WHEN \"AGE\" >= 18 AND \"AGE\" \u003C 35 THEN '>= 18 and \u003C 35'\n  WHEN \"AGE\" >= 35 AND \"AGE\" \u003C 50 THEN '>= 35 and \u003C 50'\n  WHEN \"AGE\" >= 50 AND \"AGE\" \u003C 65 THEN '>= 50 and \u003C 65'\n  WHEN \"AGE\" >= 65 THEN '65 and above'\n  ELSE NULL\nEND\n```\n\n---\n\n**Duration dimension** → translate to a `TIMESTAMPDIFF` expression:\n\n```yaml\n# Omni\nfulfillment_days:\n  duration:\n    sql_start: ${created_at[date]}\n    sql_end: ${delivered_at[date]}\n    intervals: [ days ]\n```\n```sql\n-- expr value (days)\nCASE\n  WHEN TIMESTAMPADD(DAY, 1 * TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\")), DATE_TRUNC('DAY', \"CREATED_AT\"))\n       \u003C= DATE_TRUNC('DAY', \"DELIVERED_AT\")\n  THEN TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\"))\n  ELSE TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\")) - 1\nEND\n```\n\n---\n\n**Boolean dimension** → becomes a named `filter` (not a dimension):\n\n```yaml\n# Omni\nis_returned:\n  sql: '\"IS_RETURNED\"'\n  description: Whether the item was returned\n\ncompleted_orders:\n  sql: ${status} = 'Complete'\n  label: Completed Orders\n```\n```yaml\n# Semantic View output — goes in filters, not dimensions\nfilters:\n  - name: is_returned\n    expr: IS_RETURNED\n    description: Whether the item was returned\n  - name: completed_orders\n    expr: STATUS = 'Complete'\n    description: Completed Orders\n```\n\n---\n\n#### Measures → `metrics`\n\nThe `sql` field references the source column and `aggregate_type` defines the aggregation.\n\n---\n\n**Standard measure:**\n\n```yaml\n# Omni\ntotal_sale_price:\n  sql: ${sale_price}\n  aggregate_type: sum\n  label: Total Sale Price\n  description: Total revenue of orders\n  synonyms: [ Total Revenue, Total Receipts ]\n```\n```yaml\n# Semantic View output\nmetrics:\n  - name: total_sale_price\n    expr: COALESCE(SUM(\"SALE_PRICE\"), 0)\n    description: Total revenue of orders\n    synonyms: [ Total Revenue, Total Receipts ]\n```\n\n---\n\n**Derived measure** (no `aggregate_type`) — references other measures:\n\n```yaml\n# Omni\ngross_margin:\n  sql: ${total_sale_price} - ${total_cost}\n  label: Gross Margin\n```\n```yaml\n# Semantic View output — top-level derived metric\nmetrics:\n  - name: gross_margin\n    expr: total_sale_price - total_cost\n```\n\n---\n\n**Filtered measure** → wraps in `CASE WHEN`:\n\n```yaml\n# Omni\ncalifornia_revenue:\n  sql: ${sale_price}\n  aggregate_type: sum\n  filters:\n    users.state:\n      is: California\n```\n```sql\n-- expr value\nCOALESCE(SUM(CASE WHEN \"users\".\"STATE\" = 'California' THEN \"SALE_PRICE\" ELSE NULL END), 0)\n```\n\nArray and boolean filter variants:\n```yaml\n# is: [New York, New Jersey]  →  \"STATE\" IN ('New York', 'New Jersey')\n# is: true                    →  field IS TRUE\n```\n\n---\n\n#### Filter-Only Fields (Templated Filters)\n\nFilter-only fields in Omni are parameterized inputs defined in a `filters:` block in a view YAML. They don't map to a real column — they inject dynamic values into other fields' SQL at query time via Mustache templates. Snowflake Semantic Views have no equivalent runtime parameter system, so these must be resolved to static SQL during conversion.\n\n**Example filter-only field definition:**\n\n```yaml\n# In a view file — under a top-level `filters:` key\nfilters:\n  status_filter:\n    type: string\n    default_filter:\n      is: \"Complete\"\n  order_date_filter:\n    type: timestamp\n```\n\n---\n\n**Two reference patterns to detect in dimension\u002Fmeasure SQL:**\n\n**Pattern 1 — Block (conditional) syntax:**\n\n```sql\n{{# order_items.status_filter.filter }} order_items.status {{\u002F order_items.status_filter.filter }}\n```\n\nThe block is conditionally active when the user applies a filter. A `{{^ }}` block is the fallback when no filter is applied:\n\n```sql\n{{# order_items.status_filter.filter }} order_items.status {{\u002F order_items.status_filter.filter }}\n{{^ order_items.status_filter.filter }} 1=1 {{\u002F order_items.status_filter.filter }}\n```\n\n**Pattern 2 — Value (direct injection) syntax:**\n\n```sql\n-- Direct value substitution\nDATE_TRUNC('day', created_at) >= '{{filters.order_items.order_date_filter.value}}'\n\n-- Range variants for date filters\ncreated_at BETWEEN '{{filters.order_items.order_date_filter.range_start}}' AND '{{filters.order_items.order_date_filter.range_end}}'\n```\n\nScan all dimension and measure SQL for both patterns using these signatures:\n- `{{# \u003Cview>.\u003Cfield>.filter }}` — block open\n- `{{^ \u003Cview>.\u003Cfield>.filter }}` — block fallback open\n- `{{filters.\u003Cview>.\u003Cfield>.value}}` — direct value\n- `{{filters.\u003Cview>.\u003Cfield>.range_start}}` \u002F `{{filters.\u003Cview>.\u003Cfield>.range_end}}` — date ranges\n\n---\n\n**Resolution logic — apply in order for each reference found:**\n\n**Step 1 — Inline `{{^ }}` fallback (block pattern only):**\n\nIf the SQL contains a `{{^ view.field.filter }}` fallback block, use the fallback expression as the static SQL — it's what executes when no filter is applied.\n\n```sql\n-- Input\n{{# order_items.status_filter.filter }} order_items.status {{\u002F order_items.status_filter.filter }}\n{{^ order_items.status_filter.filter }} 1=1 {{\u002F order_items.status_filter.filter }}\n\n-- Resolved static SQL\n1=1\n```\n\n**Step 2 — `default_filter` on the filter field definition:**\n\nFind the referenced filter-only field in the view YAML and check for a `default_filter` property. Render it as a static SQL condition:\n\n| `default_filter` value | Rendered SQL |\n|---|---|\n| `is: \"Complete\"` | `field = 'Complete'` |\n| `is: [\"New York\", \"CA\"]` | `field IN ('New York', 'CA')` |\n| `is: true` | `field IS TRUE` |\n| `greater_than: 100` | `field > 100` |\n\nFor **value syntax**, substitute the rendered scalar value directly into the SQL string:\n\n```sql\n-- Input\nDATE_TRUNC('day', created_at) >= '{{filters.order_items.order_date_filter.value}}'\n\n-- default_filter: is: \"2024-01-01\"\n-- Resolved\nDATE_TRUNC('day', created_at) >= '2024-01-01'\n```\n\nFor **range syntax**, use `range_start` \u002F `range_end` from the `default_filter` if defined, otherwise warn the user.\n\n**Step 3 — No fallback and no `default_filter` — warn the user:**\n\n> ⚠️ Field `\u003Cview>.\u003Cfield>` references filter-only field `\u003Cview>.\u003Cfilter_field>` but has no `default_filter` and no inline `{{^ }}` fallback. It cannot be statically resolved for a Snowflake Semantic View. Options:\n> 1. Skip this field from the output entirely.\n> 2. Ask the user what static value or condition to hardcode.\n> 3. Use `1=1` (always-true no-op) to preserve the field shape without the filter effect.\n\n**Summary decision tree:**\n\n```\nDoes the SQL reference a filter-only field?\n  (via {{# view.field.filter }} OR {{filters.view.field.value}} etc.)\n  │\n  ├── Block pattern → Does SQL have {{^ view.field.filter }} fallback?\n  │     ├── Yes → Use fallback expression as static SQL\n  │     └── No  → Go to default_filter check ↓\n  │\n  ├── Value pattern → Go to default_filter check ↓\n  │\n  └── default_filter check:\n        ├── Yes → Render default_filter as static SQL \u002F value substitution\n        └── No  → Warn user, ask how to proceed\n```\n\n> ⚠️ Filter-only fields themselves are **never** emitted as dimensions, metrics, or filters in the Semantic View output — they exist only to parameterize other fields' SQL.\n\n---\n\n#### AI Context → `module_custom_instructions`\n\nIf the topic has an `ai_context` parameter, include it as:\n\n```yaml\nmodule_custom_instructions:\n  question_categorization: \u003Cai_context value>\n```\n\n---\n\n#### Sample Queries → `verified_queries`\n\nConvert each entry under `sample_queries` into a SQL statement for `verified_queries`. Use the `prompt` as the `question` and the `description` as context for writing the SQL.\n\n> ✋ **STOP** — Review all dimensions, measures, and relationships with the user before generating the final output.\n\n---\n\n### Step 7 — Generate and Execute the Semantic View\n\n#### Output YAML structure\n\n```yaml\nname: \u003Cname>\ndescription: \u003Cstring>\n\ntables:\n  - name: \u003Cname>\n    description: \u003Cstring>\n    base_table:\n      database: \u003Cdatabase>\n      schema: \u003Cschema>\n      table: \u003Ctable name>\n\n    dimensions:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n        data_type: \u003Cdata type>\n        unique: \u003Cboolean>\n\n    time_dimensions:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n        data_type: \u003Cdata type>\n\n    facts:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n        data_type: \u003Cdata type>\n\n    metrics:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n\n    filters:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n\nrelationships:\n  - name: \u003Cstring>\n    left_table: \u003Ctable>\n    right_table: \u003Ctable>\n    relationship_columns:\n      - left_column: \u003Ccolumn>\n        right_column: \u003Ccolumn>\n\nmetrics:\n  - name: \u003Cname>\n    synonyms: [ \u003Cstring>, ... ]\n    description: \u003Cstring>\n    expr: \u003CSQL expression>\n\nverified_queries:\n  - name: \u003Cstring>\n    question: \u003Cstring>\n    sql: \u003Cstring>\n    use_as_onboarding_question: \u003Cboolean>\n```\n\n> **Valid top-level keys only:** `name`, `description`, `tables`, `relationships`, `metrics`, `verified_queries`, `module_custom_instructions`\n\n---\n\n#### Create the Semantic View\n\nThe SQL is the same regardless of environment. The difference is *how* it is executed.\n\n**SQL to run:**\n\n```sql\nCALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML('\u003Cdatabase>.\u003Cschema>', $$\n\u003Cyaml content here>\n$$);\n```\n\n**Execution by environment:**\n\n| Environment | Command |\n|---|---|\n| Cortex Code | Execute the SQL directly in the active Snowflake session |\n| `snow` CLI | `snow sql -q \"CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(...)\"` or write YAML to a temp file and pipe it |\n| SnowSQL | `snowsql -a \u003Caccount> -u \u003Cuser> -f \u003Csql_file.sql>` |\n| Python | `conn.cursor().execute(\"\u003Csql>\")` |\n\n> **Tip for CLI environments:** If the YAML is long, write it to a temporary `.sql` file first and execute the file rather than passing it inline — this avoids shell escaping issues with the `$$` dollar-quoting.\n\n```bash\n# snow CLI example with a file\nsnow sql -f \u002Ftmp\u002Fcreate_semantic_view.sql\n```\n\n#### Grant access\n\n```sql\nGRANT SELECT ON SEMANTIC VIEW \u003Cdatabase>.\u003Cschema>.\u003Cname> TO ROLE \u003Crole>;\n```\n\nExecute this the same way as the `CREATE` call above, using whichever connection method was established during the Runtime Environment Detection step.\n\n---\n\n## Reference\n\n- [Snowflake Semantic View YAML Spec](https:\u002F\u002Fdocs.snowflake.com\u002Fen\u002Fuser-guide\u002Fviews-semantic\u002Fsemantic-view-yaml-spec)\n- [SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML](https:\u002F\u002Fdocs.snowflake.com\u002Fen\u002Fsql-reference\u002Fstored-procedures\u002Fsystem_create_semantic_view_from_yaml)\n",{"data":41,"body":42},{"name":4,"description":6},{"type":43,"children":44},"root",[45,54,60,64,71,160,276,371,374,411,417,422,429,434,459,465,475,485,491,503,518,650,663,702,708,823,837,862,953,968,971,977,983,988,1046,1060,1063,1069,1075,1109,1129,1135,1203,1209,1256,1262,1282,1346,1377,1380,1386,1392,1404,1486,1498,1504,1515,1656,1664,1670,1691,1704,1707,1713,1726,1732,1874,1880,1900,1973,1981,2068,2110,2131,2134,2140,2153,2165,2261,2281,2289,2443,2446,2452,2457,2465,2484,2512,2515,2523,2611,2696,2699,2715,2799,2878,2881,2899,3106,3163,3166,3182,3277,3353,3356,3372,3469,3530,3533,3551,3668,3798,3801,3813,3832,3835,3843,3968,4076,4079,4096,4154,4216,4219,4235,4332,4354,4359,4382,4385,4391,4404,4412,4531,4534,4542,4550,4564,4577,4599,4607,4653,4658,4713,4716,4724,4739,4752,4804,4820,4832,4943,4954,5006,5039,5054,5118,5126,5135,5150,5153,5165,5178,5213,5216,5228,5271,5284,5287,5293,5299,6375,6428,6431,6437,6449,6457,6488,6496,6588,6617,6653,6659,6673,6686,6689,6695,6720],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"omni-snowflake-semantic-view",[51],{"type":52,"value":53},"text","Omni → Snowflake Semantic View",{"type":46,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"Converts an Omni topic into a Snowflake Semantic View YAML definition by first exploring the Omni model via API, then translating its definitions into the Snowflake Semantic View format.",{"type":46,"tag":61,"props":62,"children":63},"hr",{},[],{"type":46,"tag":65,"props":66,"children":68},"h2",{"id":67},"prerequisites",[69],{"type":52,"value":70},"Prerequisites",{"type":46,"tag":72,"props":73,"children":78},"pre",{"className":74,"code":75,"language":76,"meta":77,"style":77},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Verify the Omni CLI is installed — if not, ask the user to install it\n# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\ncommand -v omni >\u002Fdev\u002Fnull || echo \"ERROR: Omni CLI is not installed.\"\n","bash","",[79],{"type":46,"tag":80,"props":81,"children":82},"code",{"__ignoreMap":77},[83,95,104],{"type":46,"tag":84,"props":85,"children":88},"span",{"class":86,"line":87},"line",1,[89],{"type":46,"tag":84,"props":90,"children":92},{"style":91},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[93],{"type":52,"value":94},"# Verify the Omni CLI is installed — if not, ask the user to install it\n",{"type":46,"tag":84,"props":96,"children":98},{"class":86,"line":97},2,[99],{"type":46,"tag":84,"props":100,"children":101},{"style":91},[102],{"type":52,"value":103},"# See: https:\u002F\u002Fgithub.com\u002Fexploreomni\u002Fcli#readme\n",{"type":46,"tag":84,"props":105,"children":106},{"class":86,"line":33},[107,113,119,124,130,135,140,145,150,155],{"type":46,"tag":84,"props":108,"children":110},{"style":109},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[111],{"type":52,"value":112},"command",{"type":46,"tag":84,"props":114,"children":116},{"style":115},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[117],{"type":52,"value":118}," -v",{"type":46,"tag":84,"props":120,"children":121},{"style":115},[122],{"type":52,"value":123}," omni",{"type":46,"tag":84,"props":125,"children":127},{"style":126},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[128],{"type":52,"value":129}," >",{"type":46,"tag":84,"props":131,"children":132},{"style":115},[133],{"type":52,"value":134},"\u002Fdev\u002Fnull",{"type":46,"tag":84,"props":136,"children":137},{"style":126},[138],{"type":52,"value":139}," ||",{"type":46,"tag":84,"props":141,"children":142},{"style":109},[143],{"type":52,"value":144}," echo",{"type":46,"tag":84,"props":146,"children":147},{"style":126},[148],{"type":52,"value":149}," \"",{"type":46,"tag":84,"props":151,"children":152},{"style":115},[153],{"type":52,"value":154},"ERROR: Omni CLI is not installed.",{"type":46,"tag":84,"props":156,"children":157},{"style":126},[158],{"type":52,"value":159},"\"\n",{"type":46,"tag":72,"props":161,"children":163},{"className":74,"code":162,"language":76,"meta":77,"style":77},"# Show available profiles and select the appropriate one\nomni config show\n# If multiple profiles exist, ask the user which to use, then switch:\nomni config use \u003Cprofile-name>\n\n# Confirm the active profile is authenticated and inspect your permissions:\nomni whoami whoami\n",[164],{"type":46,"tag":80,"props":165,"children":166},{"__ignoreMap":77},[167,175,193,201,239,249,258],{"type":46,"tag":84,"props":168,"children":169},{"class":86,"line":87},[170],{"type":46,"tag":84,"props":171,"children":172},{"style":91},[173],{"type":52,"value":174},"# Show available profiles and select the appropriate one\n",{"type":46,"tag":84,"props":176,"children":177},{"class":86,"line":97},[178,183,188],{"type":46,"tag":84,"props":179,"children":181},{"style":180},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[182],{"type":52,"value":19},{"type":46,"tag":84,"props":184,"children":185},{"style":115},[186],{"type":52,"value":187}," config",{"type":46,"tag":84,"props":189,"children":190},{"style":115},[191],{"type":52,"value":192}," show\n",{"type":46,"tag":84,"props":194,"children":195},{"class":86,"line":33},[196],{"type":46,"tag":84,"props":197,"children":198},{"style":91},[199],{"type":52,"value":200},"# If multiple profiles exist, ask the user which to use, then switch:\n",{"type":46,"tag":84,"props":202,"children":204},{"class":86,"line":203},4,[205,209,213,218,223,228,234],{"type":46,"tag":84,"props":206,"children":207},{"style":180},[208],{"type":52,"value":19},{"type":46,"tag":84,"props":210,"children":211},{"style":115},[212],{"type":52,"value":187},{"type":46,"tag":84,"props":214,"children":215},{"style":115},[216],{"type":52,"value":217}," use",{"type":46,"tag":84,"props":219,"children":220},{"style":126},[221],{"type":52,"value":222}," \u003C",{"type":46,"tag":84,"props":224,"children":225},{"style":115},[226],{"type":52,"value":227},"profile-nam",{"type":46,"tag":84,"props":229,"children":231},{"style":230},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[232],{"type":52,"value":233},"e",{"type":46,"tag":84,"props":235,"children":236},{"style":126},[237],{"type":52,"value":238},">\n",{"type":46,"tag":84,"props":240,"children":242},{"class":86,"line":241},5,[243],{"type":46,"tag":84,"props":244,"children":246},{"emptyLinePlaceholder":245},true,[247],{"type":52,"value":248},"\n",{"type":46,"tag":84,"props":250,"children":252},{"class":86,"line":251},6,[253],{"type":46,"tag":84,"props":254,"children":255},{"style":91},[256],{"type":52,"value":257},"# Confirm the active profile is authenticated and inspect your permissions:\n",{"type":46,"tag":84,"props":259,"children":261},{"class":86,"line":260},7,[262,266,271],{"type":46,"tag":84,"props":263,"children":264},{"style":180},[265],{"type":52,"value":19},{"type":46,"tag":84,"props":267,"children":268},{"style":115},[269],{"type":52,"value":270}," whoami",{"type":46,"tag":84,"props":272,"children":273},{"style":115},[274],{"type":52,"value":275}," whoami\n",{"type":46,"tag":277,"props":278,"children":279},"blockquote",{},[280],{"type":46,"tag":55,"props":281,"children":282},{},[283,289,291,296,298,303,305,311,313,318,320,326,328,334,336,342,344,353,355,361,363,369],{"type":46,"tag":284,"props":285,"children":286},"strong",{},[287],{"type":52,"value":288},"Auth",{"type":52,"value":290},": a profile authenticates with an ",{"type":46,"tag":284,"props":292,"children":293},{},[294],{"type":52,"value":295},"API key",{"type":52,"value":297}," or ",{"type":46,"tag":284,"props":299,"children":300},{},[301],{"type":52,"value":302},"OAuth",{"type":52,"value":304},". If ",{"type":46,"tag":80,"props":306,"children":308},{"className":307},[],[309],{"type":52,"value":310},"whoami",{"type":52,"value":312}," (or any call) returns ",{"type":46,"tag":284,"props":314,"children":315},{},[316],{"type":52,"value":317},"401",{"type":52,"value":319},", hand off — ask the user to run ",{"type":46,"tag":80,"props":321,"children":323},{"className":322},[],[324],{"type":52,"value":325},"! omni config login \u003Cprofile>",{"type":52,"value":327}," (OAuth 2.1 browser flow; it blocks ~2 min on the browser). Don't run ",{"type":46,"tag":80,"props":329,"children":331},{"className":330},[],[332],{"type":52,"value":333},"config login",{"type":52,"value":335}," yourself in a headless\u002FCI session (no browser → timeout); on a local interactive machine you ",{"type":46,"tag":337,"props":338,"children":339},"em",{},[340],{"type":52,"value":341},"may",{"type":52,"value":343},". See the ",{"type":46,"tag":284,"props":345,"children":346},{},[347],{"type":46,"tag":80,"props":348,"children":350},{"className":349},[],[351],{"type":52,"value":352},"omni-api-conventions",{"type":52,"value":354}," rule for profile setup (",{"type":46,"tag":80,"props":356,"children":358},{"className":357},[],[359],{"type":52,"value":360},"omni config init --auth oauth",{"type":52,"value":362},") and discovering request-body shapes with ",{"type":46,"tag":80,"props":364,"children":366},{"className":365},[],[367],{"type":52,"value":368},"--schema",{"type":52,"value":370},".",{"type":46,"tag":61,"props":372,"children":373},{},[],{"type":46,"tag":277,"props":375,"children":376},{},[377],{"type":46,"tag":55,"props":378,"children":379},{},[380,385,387,393,395,401,403,409],{"type":46,"tag":284,"props":381,"children":382},{},[383],{"type":52,"value":384},"Tip",{"type":52,"value":386},": Use ",{"type":46,"tag":80,"props":388,"children":390},{"className":389},[],[391],{"type":52,"value":392},"-o json",{"type":52,"value":394}," to force structured output for programmatic parsing, or ",{"type":46,"tag":80,"props":396,"children":398},{"className":397},[],[399],{"type":52,"value":400},"-o human",{"type":52,"value":402}," for readable tables. The default is ",{"type":46,"tag":80,"props":404,"children":406},{"className":405},[],[407],{"type":52,"value":408},"auto",{"type":52,"value":410}," (human in a TTY, JSON when piped).",{"type":46,"tag":65,"props":412,"children":414},{"id":413},"runtime-environment-detection",[415],{"type":52,"value":416},"Runtime Environment Detection",{"type":46,"tag":55,"props":418,"children":419},{},[420],{"type":52,"value":421},"Before starting, determine which environment you are running in — this controls how SQL is executed against Snowflake in Step 7.",{"type":46,"tag":423,"props":424,"children":426},"h3",{"id":425},"how-to-detect",[427],{"type":52,"value":428},"How to detect",{"type":46,"tag":55,"props":430,"children":431},{},[432],{"type":52,"value":433},"Check for the presence of the built-in Snowflake SQL execution capability:",{"type":46,"tag":435,"props":436,"children":437},"ul",{},[438,449],{"type":46,"tag":439,"props":440,"children":441},"li",{},[442,447],{"type":46,"tag":284,"props":443,"children":444},{},[445],{"type":52,"value":446},"Cortex Code",{"type":52,"value":448}," (Snowflake Notebooks \u002F Cortex Analyst): Native SQL execution is available. No extra tooling required.",{"type":46,"tag":439,"props":450,"children":451},{},[452,457],{"type":46,"tag":284,"props":453,"children":454},{},[455],{"type":52,"value":456},"Claude Code, Cursor, or any external IDE\u002Fagent",{"type":52,"value":458},": No native Snowflake connection. You must use one of the CLI options below.",{"type":46,"tag":423,"props":460,"children":462},{"id":461},"detection-heuristic",[463],{"type":52,"value":464},"Detection heuristic",{"type":46,"tag":72,"props":466,"children":470},{"className":467,"code":469,"language":52},[468],"language-text","If the agent can execute a SQL statement like `SELECT CURRENT_USER()` directly without any shell command → you are in Cortex Code.\nOtherwise → you are in an external environment.\n",[471],{"type":46,"tag":80,"props":472,"children":473},{"__ignoreMap":77},[474],{"type":52,"value":469},{"type":46,"tag":55,"props":476,"children":477},{},[478,480],{"type":52,"value":479},"If unsure, ask the user: ",{"type":46,"tag":337,"props":481,"children":482},{},[483],{"type":52,"value":484},"\"Are you running this inside Snowflake (Cortex Code \u002F Notebooks), or in an external tool like Claude Code or Cursor?\"",{"type":46,"tag":423,"props":486,"children":488},{"id":487},"external-environment-snowflake-connectivity-options",[489],{"type":52,"value":490},"External environment: Snowflake connectivity options",{"type":46,"tag":55,"props":492,"children":493},{},[494,496,501],{"type":52,"value":495},"For ",{"type":46,"tag":284,"props":497,"children":498},{},[499],{"type":52,"value":500},"Claude Code, Cursor, or any terminal-based agent",{"type":52,"value":502},", choose one of the following. Check availability in order:",{"type":46,"tag":504,"props":505,"children":507},"h4",{"id":506},"option-a-snowflake-cli-snow-recommended",[508,510,516],{"type":52,"value":509},"Option A — Snowflake CLI (",{"type":46,"tag":80,"props":511,"children":513},{"className":512},[],[514],{"type":52,"value":515},"snow",{"type":52,"value":517},") ✅ Recommended",{"type":46,"tag":72,"props":519,"children":521},{"className":74,"code":520,"language":76,"meta":77,"style":77},"# Check if available\ncommand -v snow\n\n# Configure a connection (first time)\nsnow connection add\n\n# Execute SQL\nsnow sql -q \"SELECT CURRENT_USER();\" --connection \u003Cconnection_name>\n",[522],{"type":46,"tag":80,"props":523,"children":524},{"__ignoreMap":77},[525,533,549,556,564,581,588,596],{"type":46,"tag":84,"props":526,"children":527},{"class":86,"line":87},[528],{"type":46,"tag":84,"props":529,"children":530},{"style":91},[531],{"type":52,"value":532},"# Check if available\n",{"type":46,"tag":84,"props":534,"children":535},{"class":86,"line":97},[536,540,544],{"type":46,"tag":84,"props":537,"children":538},{"style":109},[539],{"type":52,"value":112},{"type":46,"tag":84,"props":541,"children":542},{"style":115},[543],{"type":52,"value":118},{"type":46,"tag":84,"props":545,"children":546},{"style":115},[547],{"type":52,"value":548}," snow\n",{"type":46,"tag":84,"props":550,"children":551},{"class":86,"line":33},[552],{"type":46,"tag":84,"props":553,"children":554},{"emptyLinePlaceholder":245},[555],{"type":52,"value":248},{"type":46,"tag":84,"props":557,"children":558},{"class":86,"line":203},[559],{"type":46,"tag":84,"props":560,"children":561},{"style":91},[562],{"type":52,"value":563},"# Configure a connection (first time)\n",{"type":46,"tag":84,"props":565,"children":566},{"class":86,"line":241},[567,571,576],{"type":46,"tag":84,"props":568,"children":569},{"style":180},[570],{"type":52,"value":515},{"type":46,"tag":84,"props":572,"children":573},{"style":115},[574],{"type":52,"value":575}," connection",{"type":46,"tag":84,"props":577,"children":578},{"style":115},[579],{"type":52,"value":580}," add\n",{"type":46,"tag":84,"props":582,"children":583},{"class":86,"line":251},[584],{"type":46,"tag":84,"props":585,"children":586},{"emptyLinePlaceholder":245},[587],{"type":52,"value":248},{"type":46,"tag":84,"props":589,"children":590},{"class":86,"line":260},[591],{"type":46,"tag":84,"props":592,"children":593},{"style":91},[594],{"type":52,"value":595},"# Execute SQL\n",{"type":46,"tag":84,"props":597,"children":599},{"class":86,"line":598},8,[600,604,609,614,618,623,628,633,637,642,646],{"type":46,"tag":84,"props":601,"children":602},{"style":180},[603],{"type":52,"value":515},{"type":46,"tag":84,"props":605,"children":606},{"style":115},[607],{"type":52,"value":608}," sql",{"type":46,"tag":84,"props":610,"children":611},{"style":115},[612],{"type":52,"value":613}," -q",{"type":46,"tag":84,"props":615,"children":616},{"style":126},[617],{"type":52,"value":149},{"type":46,"tag":84,"props":619,"children":620},{"style":115},[621],{"type":52,"value":622},"SELECT CURRENT_USER();",{"type":46,"tag":84,"props":624,"children":625},{"style":126},[626],{"type":52,"value":627},"\"",{"type":46,"tag":84,"props":629,"children":630},{"style":115},[631],{"type":52,"value":632}," --connection",{"type":46,"tag":84,"props":634,"children":635},{"style":126},[636],{"type":52,"value":222},{"type":46,"tag":84,"props":638,"children":639},{"style":115},[640],{"type":52,"value":641},"connection_nam",{"type":46,"tag":84,"props":643,"children":644},{"style":230},[645],{"type":52,"value":233},{"type":46,"tag":84,"props":647,"children":648},{"style":126},[649],{"type":52,"value":238},{"type":46,"tag":55,"props":651,"children":652},{},[653,655,661],{"type":52,"value":654},"Set a default connection to avoid repeating ",{"type":46,"tag":80,"props":656,"children":658},{"className":657},[],[659],{"type":52,"value":660},"--connection",{"type":52,"value":662}," on every call:",{"type":46,"tag":72,"props":664,"children":666},{"className":74,"code":665,"language":76,"meta":77,"style":77},"snow connection set-default \u003Cconnection_name>\n",[667],{"type":46,"tag":80,"props":668,"children":669},{"__ignoreMap":77},[670],{"type":46,"tag":84,"props":671,"children":672},{"class":86,"line":87},[673,677,681,686,690,694,698],{"type":46,"tag":84,"props":674,"children":675},{"style":180},[676],{"type":52,"value":515},{"type":46,"tag":84,"props":678,"children":679},{"style":115},[680],{"type":52,"value":575},{"type":46,"tag":84,"props":682,"children":683},{"style":115},[684],{"type":52,"value":685}," set-default",{"type":46,"tag":84,"props":687,"children":688},{"style":126},[689],{"type":52,"value":222},{"type":46,"tag":84,"props":691,"children":692},{"style":115},[693],{"type":52,"value":641},{"type":46,"tag":84,"props":695,"children":696},{"style":230},[697],{"type":52,"value":233},{"type":46,"tag":84,"props":699,"children":700},{"style":126},[701],{"type":52,"value":238},{"type":46,"tag":504,"props":703,"children":705},{"id":704},"option-b-snowsql-classic-cli",[706],{"type":52,"value":707},"Option B — SnowSQL (classic CLI)",{"type":46,"tag":72,"props":709,"children":711},{"className":74,"code":710,"language":76,"meta":77,"style":77},"# Check if available\ncommand -v snowsql\n\n# Execute SQL\nsnowsql -a \u003Caccount> -u \u003Cuser> -q \"SELECT CURRENT_USER();\"\n",[712],{"type":46,"tag":80,"props":713,"children":714},{"__ignoreMap":77},[715,722,738,745,752],{"type":46,"tag":84,"props":716,"children":717},{"class":86,"line":87},[718],{"type":46,"tag":84,"props":719,"children":720},{"style":91},[721],{"type":52,"value":532},{"type":46,"tag":84,"props":723,"children":724},{"class":86,"line":97},[725,729,733],{"type":46,"tag":84,"props":726,"children":727},{"style":109},[728],{"type":52,"value":112},{"type":46,"tag":84,"props":730,"children":731},{"style":115},[732],{"type":52,"value":118},{"type":46,"tag":84,"props":734,"children":735},{"style":115},[736],{"type":52,"value":737}," snowsql\n",{"type":46,"tag":84,"props":739,"children":740},{"class":86,"line":33},[741],{"type":46,"tag":84,"props":742,"children":743},{"emptyLinePlaceholder":245},[744],{"type":52,"value":248},{"type":46,"tag":84,"props":746,"children":747},{"class":86,"line":203},[748],{"type":46,"tag":84,"props":749,"children":750},{"style":91},[751],{"type":52,"value":595},{"type":46,"tag":84,"props":753,"children":754},{"class":86,"line":241},[755,760,765,769,774,779,784,789,793,798,803,807,811,815,819],{"type":46,"tag":84,"props":756,"children":757},{"style":180},[758],{"type":52,"value":759},"snowsql",{"type":46,"tag":84,"props":761,"children":762},{"style":115},[763],{"type":52,"value":764}," -a",{"type":46,"tag":84,"props":766,"children":767},{"style":126},[768],{"type":52,"value":222},{"type":46,"tag":84,"props":770,"children":771},{"style":115},[772],{"type":52,"value":773},"accoun",{"type":46,"tag":84,"props":775,"children":776},{"style":230},[777],{"type":52,"value":778},"t",{"type":46,"tag":84,"props":780,"children":781},{"style":126},[782],{"type":52,"value":783},">",{"type":46,"tag":84,"props":785,"children":786},{"style":115},[787],{"type":52,"value":788}," -u",{"type":46,"tag":84,"props":790,"children":791},{"style":126},[792],{"type":52,"value":222},{"type":46,"tag":84,"props":794,"children":795},{"style":115},[796],{"type":52,"value":797},"use",{"type":46,"tag":84,"props":799,"children":800},{"style":230},[801],{"type":52,"value":802},"r",{"type":46,"tag":84,"props":804,"children":805},{"style":126},[806],{"type":52,"value":783},{"type":46,"tag":84,"props":808,"children":809},{"style":115},[810],{"type":52,"value":613},{"type":46,"tag":84,"props":812,"children":813},{"style":126},[814],{"type":52,"value":149},{"type":46,"tag":84,"props":816,"children":817},{"style":115},[818],{"type":52,"value":622},{"type":46,"tag":84,"props":820,"children":821},{"style":126},[822],{"type":52,"value":159},{"type":46,"tag":504,"props":824,"children":826},{"id":825},"option-c-python-snowflake-connector-python",[827,829,835],{"type":52,"value":828},"Option C — Python (",{"type":46,"tag":80,"props":830,"children":832},{"className":831},[],[833],{"type":52,"value":834},"snowflake-connector-python",{"type":52,"value":836},")",{"type":46,"tag":72,"props":838,"children":840},{"className":74,"code":839,"language":76,"meta":77,"style":77},"pip install snowflake-connector-python\n",[841],{"type":46,"tag":80,"props":842,"children":843},{"__ignoreMap":77},[844],{"type":46,"tag":84,"props":845,"children":846},{"class":86,"line":87},[847,852,857],{"type":46,"tag":84,"props":848,"children":849},{"style":180},[850],{"type":52,"value":851},"pip",{"type":46,"tag":84,"props":853,"children":854},{"style":115},[855],{"type":52,"value":856}," install",{"type":46,"tag":84,"props":858,"children":859},{"style":115},[860],{"type":52,"value":861}," snowflake-connector-python\n",{"type":46,"tag":72,"props":863,"children":867},{"className":864,"code":865,"language":866,"meta":77,"style":77},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import snowflake.connector\nconn = snowflake.connector.connect(\n    account=\"\u003Caccount>\",\n    user=\"\u003Cuser>\",\n    password=\"\u003Cpassword>\",   # or use key-pair \u002F SSO\n    warehouse=\"\u003Cwarehouse>\",\n    database=\"\u003Cdatabase>\",\n    schema=\"\u003Cschema>\",\n)\nconn.cursor().execute(\"\u003CSQL here>\")\n","python",[868],{"type":46,"tag":80,"props":869,"children":870},{"__ignoreMap":77},[871,879,887,895,903,911,919,927,935,944],{"type":46,"tag":84,"props":872,"children":873},{"class":86,"line":87},[874],{"type":46,"tag":84,"props":875,"children":876},{},[877],{"type":52,"value":878},"import snowflake.connector\n",{"type":46,"tag":84,"props":880,"children":881},{"class":86,"line":97},[882],{"type":46,"tag":84,"props":883,"children":884},{},[885],{"type":52,"value":886},"conn = snowflake.connector.connect(\n",{"type":46,"tag":84,"props":888,"children":889},{"class":86,"line":33},[890],{"type":46,"tag":84,"props":891,"children":892},{},[893],{"type":52,"value":894},"    account=\"\u003Caccount>\",\n",{"type":46,"tag":84,"props":896,"children":897},{"class":86,"line":203},[898],{"type":46,"tag":84,"props":899,"children":900},{},[901],{"type":52,"value":902},"    user=\"\u003Cuser>\",\n",{"type":46,"tag":84,"props":904,"children":905},{"class":86,"line":241},[906],{"type":46,"tag":84,"props":907,"children":908},{},[909],{"type":52,"value":910},"    password=\"\u003Cpassword>\",   # or use key-pair \u002F SSO\n",{"type":46,"tag":84,"props":912,"children":913},{"class":86,"line":251},[914],{"type":46,"tag":84,"props":915,"children":916},{},[917],{"type":52,"value":918},"    warehouse=\"\u003Cwarehouse>\",\n",{"type":46,"tag":84,"props":920,"children":921},{"class":86,"line":260},[922],{"type":46,"tag":84,"props":923,"children":924},{},[925],{"type":52,"value":926},"    database=\"\u003Cdatabase>\",\n",{"type":46,"tag":84,"props":928,"children":929},{"class":86,"line":598},[930],{"type":46,"tag":84,"props":931,"children":932},{},[933],{"type":52,"value":934},"    schema=\"\u003Cschema>\",\n",{"type":46,"tag":84,"props":936,"children":938},{"class":86,"line":937},9,[939],{"type":46,"tag":84,"props":940,"children":941},{},[942],{"type":52,"value":943},")\n",{"type":46,"tag":84,"props":945,"children":947},{"class":86,"line":946},10,[948],{"type":46,"tag":84,"props":949,"children":950},{},[951],{"type":52,"value":952},"conn.cursor().execute(\"\u003CSQL here>\")\n",{"type":46,"tag":277,"props":954,"children":955},{},[956],{"type":46,"tag":55,"props":957,"children":958},{},[959,961,966],{"type":52,"value":960},"✋ ",{"type":46,"tag":284,"props":962,"children":963},{},[964],{"type":52,"value":965},"STOP",{"type":52,"value":967}," — Confirm the Snowflake connection method with the user before proceeding to Step 7. Record which method is being used so Step 7 generates the correct execution command.",{"type":46,"tag":61,"props":969,"children":970},{},[],{"type":46,"tag":65,"props":972,"children":974},{"id":973},"workflow",[975],{"type":52,"value":976},"Workflow",{"type":46,"tag":423,"props":978,"children":980},{"id":979},"step-1-gather-requirements",[981],{"type":52,"value":982},"Step 1 — Gather Requirements",{"type":46,"tag":55,"props":984,"children":985},{},[986],{"type":52,"value":987},"Ask the user:",{"type":46,"tag":989,"props":990,"children":991},"ol",{},[992,1004,1016,1035],{"type":46,"tag":439,"props":993,"children":994},{},[995,997,1002],{"type":52,"value":996},"Which ",{"type":46,"tag":284,"props":998,"children":999},{},[1000],{"type":52,"value":1001},"Topic",{"type":52,"value":1003}," do they want to convert?",{"type":46,"tag":439,"props":1005,"children":1006},{},[1007,1009,1014],{"type":52,"value":1008},"What should the ",{"type":46,"tag":284,"props":1010,"children":1011},{},[1012],{"type":52,"value":1013},"Semantic View be named",{"type":52,"value":1015},"?",{"type":46,"tag":439,"props":1017,"children":1018},{},[1019,1021,1026,1028,1033],{"type":52,"value":1020},"Where should it be created in Snowflake (",{"type":46,"tag":284,"props":1022,"children":1023},{},[1024],{"type":52,"value":1025},"database",{"type":52,"value":1027}," and ",{"type":46,"tag":284,"props":1029,"children":1030},{},[1031],{"type":52,"value":1032},"schema",{"type":52,"value":1034},")?",{"type":46,"tag":439,"props":1036,"children":1037},{},[1038,1039,1044],{"type":52,"value":996},{"type":46,"tag":284,"props":1040,"children":1041},{},[1042],{"type":52,"value":1043},"role",{"type":52,"value":1045}," should be granted access to the Semantic View?",{"type":46,"tag":277,"props":1047,"children":1048},{},[1049],{"type":46,"tag":55,"props":1050,"children":1051},{},[1052,1054,1058],{"type":52,"value":1053},"⚠️ ",{"type":46,"tag":284,"props":1055,"children":1056},{},[1057],{"type":52,"value":965},{"type":52,"value":1059}," — Confirm all four answers before proceeding.",{"type":46,"tag":61,"props":1061,"children":1062},{},[],{"type":46,"tag":423,"props":1064,"children":1066},{"id":1065},"step-2-explore-the-omni-model",[1067],{"type":52,"value":1068},"Step 2 — Explore the Omni Model",{"type":46,"tag":504,"props":1070,"children":1072},{"id":1071},"_2a-find-the-model-id",[1073],{"type":52,"value":1074},"2a. Find the model ID",{"type":46,"tag":72,"props":1076,"children":1078},{"className":74,"code":1077,"language":76,"meta":77,"style":77},"omni models list --modelkind SHARED\n",[1079],{"type":46,"tag":80,"props":1080,"children":1081},{"__ignoreMap":77},[1082],{"type":46,"tag":84,"props":1083,"children":1084},{"class":86,"line":87},[1085,1089,1094,1099,1104],{"type":46,"tag":84,"props":1086,"children":1087},{"style":180},[1088],{"type":52,"value":19},{"type":46,"tag":84,"props":1090,"children":1091},{"style":115},[1092],{"type":52,"value":1093}," models",{"type":46,"tag":84,"props":1095,"children":1096},{"style":115},[1097],{"type":52,"value":1098}," list",{"type":46,"tag":84,"props":1100,"children":1101},{"style":115},[1102],{"type":52,"value":1103}," --modelkind",{"type":46,"tag":84,"props":1105,"children":1106},{"style":115},[1107],{"type":52,"value":1108}," SHARED\n",{"type":46,"tag":55,"props":1110,"children":1111},{},[1112,1114,1119,1121,1127],{"type":52,"value":1113},"Identify the ",{"type":46,"tag":284,"props":1115,"children":1116},{},[1117],{"type":52,"value":1118},"Shared Model",{"type":52,"value":1120}," and note its ",{"type":46,"tag":80,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":52,"value":1126},"id",{"type":52,"value":1128},". Always prefer the Shared Model over Schema or Workbook models.",{"type":46,"tag":504,"props":1130,"children":1132},{"id":1131},"_2b-fetch-the-topic-file",[1133],{"type":52,"value":1134},"2b. Fetch the topic file",{"type":46,"tag":72,"props":1136,"children":1138},{"className":74,"code":1137,"language":76,"meta":77,"style":77},"omni models yaml-get \u003CmodelId> --filename \u003Ctopic_name>.topic\n",[1139],{"type":46,"tag":80,"props":1140,"children":1141},{"__ignoreMap":77},[1142],{"type":46,"tag":84,"props":1143,"children":1144},{"class":86,"line":87},[1145,1149,1153,1158,1162,1167,1172,1176,1181,1185,1190,1194,1198],{"type":46,"tag":84,"props":1146,"children":1147},{"style":180},[1148],{"type":52,"value":19},{"type":46,"tag":84,"props":1150,"children":1151},{"style":115},[1152],{"type":52,"value":1093},{"type":46,"tag":84,"props":1154,"children":1155},{"style":115},[1156],{"type":52,"value":1157}," yaml-get",{"type":46,"tag":84,"props":1159,"children":1160},{"style":126},[1161],{"type":52,"value":222},{"type":46,"tag":84,"props":1163,"children":1164},{"style":115},[1165],{"type":52,"value":1166},"modelI",{"type":46,"tag":84,"props":1168,"children":1169},{"style":230},[1170],{"type":52,"value":1171},"d",{"type":46,"tag":84,"props":1173,"children":1174},{"style":126},[1175],{"type":52,"value":783},{"type":46,"tag":84,"props":1177,"children":1178},{"style":115},[1179],{"type":52,"value":1180}," --filename",{"type":46,"tag":84,"props":1182,"children":1183},{"style":126},[1184],{"type":52,"value":222},{"type":46,"tag":84,"props":1186,"children":1187},{"style":115},[1188],{"type":52,"value":1189},"topic_nam",{"type":46,"tag":84,"props":1191,"children":1192},{"style":230},[1193],{"type":52,"value":233},{"type":46,"tag":84,"props":1195,"children":1196},{"style":126},[1197],{"type":52,"value":783},{"type":46,"tag":84,"props":1199,"children":1200},{"style":115},[1201],{"type":52,"value":1202},".topic\n",{"type":46,"tag":504,"props":1204,"children":1206},{"id":1205},"_2c-fetch-the-relationships-file",[1207],{"type":52,"value":1208},"2c. Fetch the relationships file",{"type":46,"tag":72,"props":1210,"children":1212},{"className":74,"code":1211,"language":76,"meta":77,"style":77},"omni models yaml-get \u003CmodelId> --filename relationships\n",[1213],{"type":46,"tag":80,"props":1214,"children":1215},{"__ignoreMap":77},[1216],{"type":46,"tag":84,"props":1217,"children":1218},{"class":86,"line":87},[1219,1223,1227,1231,1235,1239,1243,1247,1251],{"type":46,"tag":84,"props":1220,"children":1221},{"style":180},[1222],{"type":52,"value":19},{"type":46,"tag":84,"props":1224,"children":1225},{"style":115},[1226],{"type":52,"value":1093},{"type":46,"tag":84,"props":1228,"children":1229},{"style":115},[1230],{"type":52,"value":1157},{"type":46,"tag":84,"props":1232,"children":1233},{"style":126},[1234],{"type":52,"value":222},{"type":46,"tag":84,"props":1236,"children":1237},{"style":115},[1238],{"type":52,"value":1166},{"type":46,"tag":84,"props":1240,"children":1241},{"style":230},[1242],{"type":52,"value":1171},{"type":46,"tag":84,"props":1244,"children":1245},{"style":126},[1246],{"type":52,"value":783},{"type":46,"tag":84,"props":1248,"children":1249},{"style":115},[1250],{"type":52,"value":1180},{"type":46,"tag":84,"props":1252,"children":1253},{"style":115},[1254],{"type":52,"value":1255}," relationships\n",{"type":46,"tag":504,"props":1257,"children":1259},{"id":1258},"_2d-fetch-each-view-file-referenced-in-the-topic",[1260],{"type":52,"value":1261},"2d. Fetch each view file referenced in the topic",{"type":46,"tag":55,"props":1263,"children":1264},{},[1265,1267,1273,1274,1280],{"type":52,"value":1266},"For every view in ",{"type":46,"tag":80,"props":1268,"children":1270},{"className":1269},[],[1271],{"type":52,"value":1272},"base_view",{"type":52,"value":1027},{"type":46,"tag":80,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":52,"value":1279},"joins",{"type":52,"value":1281},", fetch its YAML:",{"type":46,"tag":72,"props":1283,"children":1285},{"className":74,"code":1284,"language":76,"meta":77,"style":77},"omni models yaml-get \u003CmodelId> --filename \u003Cview_name>.view\n",[1286],{"type":46,"tag":80,"props":1287,"children":1288},{"__ignoreMap":77},[1289],{"type":46,"tag":84,"props":1290,"children":1291},{"class":86,"line":87},[1292,1296,1300,1304,1308,1312,1316,1320,1324,1328,1333,1337,1341],{"type":46,"tag":84,"props":1293,"children":1294},{"style":180},[1295],{"type":52,"value":19},{"type":46,"tag":84,"props":1297,"children":1298},{"style":115},[1299],{"type":52,"value":1093},{"type":46,"tag":84,"props":1301,"children":1302},{"style":115},[1303],{"type":52,"value":1157},{"type":46,"tag":84,"props":1305,"children":1306},{"style":126},[1307],{"type":52,"value":222},{"type":46,"tag":84,"props":1309,"children":1310},{"style":115},[1311],{"type":52,"value":1166},{"type":46,"tag":84,"props":1313,"children":1314},{"style":230},[1315],{"type":52,"value":1171},{"type":46,"tag":84,"props":1317,"children":1318},{"style":126},[1319],{"type":52,"value":783},{"type":46,"tag":84,"props":1321,"children":1322},{"style":115},[1323],{"type":52,"value":1180},{"type":46,"tag":84,"props":1325,"children":1326},{"style":126},[1327],{"type":52,"value":222},{"type":46,"tag":84,"props":1329,"children":1330},{"style":115},[1331],{"type":52,"value":1332},"view_nam",{"type":46,"tag":84,"props":1334,"children":1335},{"style":230},[1336],{"type":52,"value":233},{"type":46,"tag":84,"props":1338,"children":1339},{"style":126},[1340],{"type":52,"value":783},{"type":46,"tag":84,"props":1342,"children":1343},{"style":115},[1344],{"type":52,"value":1345},".view\n",{"type":46,"tag":277,"props":1347,"children":1348},{},[1349],{"type":46,"tag":55,"props":1350,"children":1351},{},[1352,1354,1360,1362,1367,1369,1375],{"type":52,"value":1353},"If a view is prefixed with ",{"type":46,"tag":80,"props":1355,"children":1357},{"className":1356},[],[1358],{"type":52,"value":1359},"omni_dbt_",{"type":52,"value":1361},", fetch the file that also starts with ",{"type":46,"tag":80,"props":1363,"children":1365},{"className":1364},[],[1366],{"type":52,"value":1359},{"type":52,"value":1368}," (e.g. ",{"type":46,"tag":80,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":52,"value":1374},"omni_dbt_ecomm__order_items.view",{"type":52,"value":1376},").",{"type":46,"tag":61,"props":1378,"children":1379},{},[],{"type":46,"tag":423,"props":1381,"children":1383},{"id":1382},"step-3-identify-tables-and-joins",[1384],{"type":52,"value":1385},"Step 3 — Identify Tables and Joins",{"type":46,"tag":504,"props":1387,"children":1389},{"id":1388},"mapping-view-names-to-snowflake-tables",[1390],{"type":52,"value":1391},"Mapping view names to Snowflake tables",{"type":46,"tag":55,"props":1393,"children":1394},{},[1395,1397,1402],{"type":52,"value":1396},"The ",{"type":46,"tag":80,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":52,"value":1272},{"type":52,"value":1403}," in the topic file is the primary table. Convert view names to Snowflake table references:",{"type":46,"tag":1405,"props":1406,"children":1407},"table",{},[1408,1432],{"type":46,"tag":1409,"props":1410,"children":1411},"thead",{},[1412],{"type":46,"tag":1413,"props":1414,"children":1415},"tr",{},[1416,1427],{"type":46,"tag":1417,"props":1418,"children":1419},"th",{},[1420,1425],{"type":46,"tag":80,"props":1421,"children":1423},{"className":1422},[],[1424],{"type":52,"value":1272},{"type":52,"value":1426}," \u002F join value",{"type":46,"tag":1417,"props":1428,"children":1429},{},[1430],{"type":52,"value":1431},"Snowflake table",{"type":46,"tag":1433,"props":1434,"children":1435},"tbody",{},[1436,1458],{"type":46,"tag":1413,"props":1437,"children":1438},{},[1439,1449],{"type":46,"tag":1440,"props":1441,"children":1442},"td",{},[1443],{"type":46,"tag":80,"props":1444,"children":1446},{"className":1445},[],[1447],{"type":52,"value":1448},"ecomm__order_items",{"type":46,"tag":1440,"props":1450,"children":1451},{},[1452],{"type":46,"tag":80,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":52,"value":1457},"ECOMM.ORDER_ITEMS",{"type":46,"tag":1413,"props":1459,"children":1460},{},[1461,1470],{"type":46,"tag":1440,"props":1462,"children":1463},{},[1464],{"type":46,"tag":80,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":52,"value":1469},"omni_dbt_ecomm__order_items",{"type":46,"tag":1440,"props":1471,"children":1472},{},[1473,1478,1480,1485],{"type":46,"tag":80,"props":1474,"children":1476},{"className":1475},[],[1477],{"type":52,"value":1457},{"type":52,"value":1479}," (strip ",{"type":46,"tag":80,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":52,"value":1359},{"type":52,"value":836},{"type":46,"tag":55,"props":1487,"children":1488},{},[1489,1490,1496],{"type":52,"value":1396},{"type":46,"tag":80,"props":1491,"children":1493},{"className":1492},[],[1494],{"type":52,"value":1495},"__",{"type":52,"value":1497}," separator maps to schema (left) and table name (right). If the schema does not exist in Snowflake, skip that table entirely.",{"type":46,"tag":504,"props":1499,"children":1501},{"id":1500},"reading-the-join-hierarchy",[1502],{"type":52,"value":1503},"Reading the join hierarchy",{"type":46,"tag":55,"props":1505,"children":1506},{},[1507,1508,1513],{"type":52,"value":1396},{"type":46,"tag":80,"props":1509,"children":1511},{"className":1510},[],[1512],{"type":52,"value":1279},{"type":52,"value":1514}," parameter in the topic uses indentation to define the join chain — a table indented beneath another joins into its parent:",{"type":46,"tag":72,"props":1516,"children":1519},{"className":1517,"code":1518,"language":22,"meta":77,"style":77},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","joins:\n  user_order_facts: {}        # skip — this is a derived CTE, not a physical table\n  ecomm__users: {}            # joins to base_view (ORDER_ITEMS)\n  ecomm__inventory_items:     # joins to base_view (ORDER_ITEMS)\n    ecomm__products:          # joins to INVENTORY_ITEMS\n      demo__product_images: {}           # joins to PRODUCTS\n      ecomm__distribution_centers: {}   # joins to PRODUCTS\n",[1520],{"type":46,"tag":80,"props":1521,"children":1522},{"__ignoreMap":77},[1523,1536,1559,1580,1597,1614,1635],{"type":46,"tag":84,"props":1524,"children":1525},{"class":86,"line":87},[1526,1531],{"type":46,"tag":84,"props":1527,"children":1529},{"style":1528},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1530],{"type":52,"value":1279},{"type":46,"tag":84,"props":1532,"children":1533},{"style":126},[1534],{"type":52,"value":1535},":\n",{"type":46,"tag":84,"props":1537,"children":1538},{"class":86,"line":97},[1539,1544,1549,1554],{"type":46,"tag":84,"props":1540,"children":1541},{"style":1528},[1542],{"type":52,"value":1543},"  user_order_facts",{"type":46,"tag":84,"props":1545,"children":1546},{"style":126},[1547],{"type":52,"value":1548},":",{"type":46,"tag":84,"props":1550,"children":1551},{"style":126},[1552],{"type":52,"value":1553}," {}",{"type":46,"tag":84,"props":1555,"children":1556},{"style":91},[1557],{"type":52,"value":1558},"        # skip — this is a derived CTE, not a physical table\n",{"type":46,"tag":84,"props":1560,"children":1561},{"class":86,"line":33},[1562,1567,1571,1575],{"type":46,"tag":84,"props":1563,"children":1564},{"style":1528},[1565],{"type":52,"value":1566},"  ecomm__users",{"type":46,"tag":84,"props":1568,"children":1569},{"style":126},[1570],{"type":52,"value":1548},{"type":46,"tag":84,"props":1572,"children":1573},{"style":126},[1574],{"type":52,"value":1553},{"type":46,"tag":84,"props":1576,"children":1577},{"style":91},[1578],{"type":52,"value":1579},"            # joins to base_view (ORDER_ITEMS)\n",{"type":46,"tag":84,"props":1581,"children":1582},{"class":86,"line":203},[1583,1588,1592],{"type":46,"tag":84,"props":1584,"children":1585},{"style":1528},[1586],{"type":52,"value":1587},"  ecomm__inventory_items",{"type":46,"tag":84,"props":1589,"children":1590},{"style":126},[1591],{"type":52,"value":1548},{"type":46,"tag":84,"props":1593,"children":1594},{"style":91},[1595],{"type":52,"value":1596},"     # joins to base_view (ORDER_ITEMS)\n",{"type":46,"tag":84,"props":1598,"children":1599},{"class":86,"line":241},[1600,1605,1609],{"type":46,"tag":84,"props":1601,"children":1602},{"style":1528},[1603],{"type":52,"value":1604},"    ecomm__products",{"type":46,"tag":84,"props":1606,"children":1607},{"style":126},[1608],{"type":52,"value":1548},{"type":46,"tag":84,"props":1610,"children":1611},{"style":91},[1612],{"type":52,"value":1613},"          # joins to INVENTORY_ITEMS\n",{"type":46,"tag":84,"props":1615,"children":1616},{"class":86,"line":251},[1617,1622,1626,1630],{"type":46,"tag":84,"props":1618,"children":1619},{"style":1528},[1620],{"type":52,"value":1621},"      demo__product_images",{"type":46,"tag":84,"props":1623,"children":1624},{"style":126},[1625],{"type":52,"value":1548},{"type":46,"tag":84,"props":1627,"children":1628},{"style":126},[1629],{"type":52,"value":1553},{"type":46,"tag":84,"props":1631,"children":1632},{"style":91},[1633],{"type":52,"value":1634},"           # joins to PRODUCTS\n",{"type":46,"tag":84,"props":1636,"children":1637},{"class":86,"line":260},[1638,1643,1647,1651],{"type":46,"tag":84,"props":1639,"children":1640},{"style":1528},[1641],{"type":52,"value":1642},"      ecomm__distribution_centers",{"type":46,"tag":84,"props":1644,"children":1645},{"style":126},[1646],{"type":52,"value":1548},{"type":46,"tag":84,"props":1648,"children":1649},{"style":126},[1650],{"type":52,"value":1553},{"type":46,"tag":84,"props":1652,"children":1653},{"style":91},[1654],{"type":52,"value":1655},"   # joins to PRODUCTS\n",{"type":46,"tag":277,"props":1657,"children":1658},{},[1659],{"type":46,"tag":55,"props":1660,"children":1661},{},[1662],{"type":52,"value":1663},"Skip any view that is a derived table (CTE defined in SQL in Omni). These have no physical Snowflake table to reference.",{"type":46,"tag":504,"props":1665,"children":1667},{"id":1666},"primary-keys",[1668],{"type":52,"value":1669},"Primary keys",{"type":46,"tag":55,"props":1671,"children":1672},{},[1673,1675,1681,1683,1689],{"type":52,"value":1674},"In each view file, find the dimension with ",{"type":46,"tag":80,"props":1676,"children":1678},{"className":1677},[],[1679],{"type":52,"value":1680},"primary_key: true",{"type":52,"value":1682}," — this becomes the ",{"type":46,"tag":80,"props":1684,"children":1686},{"className":1685},[],[1687],{"type":52,"value":1688},"unique: true",{"type":52,"value":1690}," dimension in the Semantic View.",{"type":46,"tag":277,"props":1692,"children":1693},{},[1694],{"type":46,"tag":55,"props":1695,"children":1696},{},[1697,1698,1702],{"type":52,"value":960},{"type":46,"tag":284,"props":1699,"children":1700},{},[1701],{"type":52,"value":965},{"type":52,"value":1703}," — Confirm the table list with the user before continuing.",{"type":46,"tag":61,"props":1705,"children":1706},{},[],{"type":46,"tag":423,"props":1708,"children":1710},{"id":1709},"step-4-resolve-the-field-list",[1711],{"type":52,"value":1712},"Step 4 — Resolve the Field List",{"type":46,"tag":55,"props":1714,"children":1715},{},[1716,1718,1724],{"type":52,"value":1717},"The topic's ",{"type":46,"tag":80,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":52,"value":1723},"fields",{"type":52,"value":1725}," parameter controls which fields from the views are included in the Semantic View.",{"type":46,"tag":504,"props":1727,"children":1729},{"id":1728},"field-targeting-rules",[1730],{"type":52,"value":1731},"Field targeting rules",{"type":46,"tag":1405,"props":1733,"children":1734},{},[1735,1751],{"type":46,"tag":1409,"props":1736,"children":1737},{},[1738],{"type":46,"tag":1413,"props":1739,"children":1740},{},[1741,1746],{"type":46,"tag":1417,"props":1742,"children":1743},{},[1744],{"type":52,"value":1745},"Syntax",{"type":46,"tag":1417,"props":1747,"children":1748},{},[1749],{"type":52,"value":1750},"Meaning",{"type":46,"tag":1433,"props":1752,"children":1753},{},[1754,1784,1801,1818,1835,1852],{"type":46,"tag":1413,"props":1755,"children":1756},{},[1757,1772],{"type":46,"tag":1440,"props":1758,"children":1759},{},[1760],{"type":46,"tag":337,"props":1761,"children":1762},{},[1763,1765,1770],{"type":52,"value":1764},"(no ",{"type":46,"tag":80,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":52,"value":1723},{"type":52,"value":1771}," parameter)",{"type":46,"tag":1440,"props":1773,"children":1774},{},[1775,1777,1782],{"type":52,"value":1776},"Include ",{"type":46,"tag":284,"props":1778,"children":1779},{},[1780],{"type":52,"value":1781},"all",{"type":52,"value":1783}," fields from all views",{"type":46,"tag":1413,"props":1785,"children":1786},{},[1787,1796],{"type":46,"tag":1440,"props":1788,"children":1789},{},[1790],{"type":46,"tag":80,"props":1791,"children":1793},{"className":1792},[],[1794],{"type":52,"value":1795},"all_views.*",{"type":46,"tag":1440,"props":1797,"children":1798},{},[1799],{"type":52,"value":1800},"Include all fields from all views",{"type":46,"tag":1413,"props":1802,"children":1803},{},[1804,1813],{"type":46,"tag":1440,"props":1805,"children":1806},{},[1807],{"type":46,"tag":80,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":52,"value":1812},"view.*",{"type":46,"tag":1440,"props":1814,"children":1815},{},[1816],{"type":52,"value":1817},"Include all fields in the named view",{"type":46,"tag":1413,"props":1819,"children":1820},{},[1821,1830],{"type":46,"tag":1440,"props":1822,"children":1823},{},[1824],{"type":46,"tag":80,"props":1825,"children":1827},{"className":1826},[],[1828],{"type":52,"value":1829},"tag:\u003Cvalue>",{"type":46,"tag":1440,"props":1831,"children":1832},{},[1833],{"type":52,"value":1834},"Include all fields tagged with this value",{"type":46,"tag":1413,"props":1836,"children":1837},{},[1838,1847],{"type":46,"tag":1440,"props":1839,"children":1840},{},[1841],{"type":46,"tag":80,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":52,"value":1846},"view.field",{"type":46,"tag":1440,"props":1848,"children":1849},{},[1850],{"type":52,"value":1851},"Include this specific field",{"type":46,"tag":1413,"props":1853,"children":1854},{},[1855,1864],{"type":46,"tag":1440,"props":1856,"children":1857},{},[1858],{"type":46,"tag":80,"props":1859,"children":1861},{"className":1860},[],[1862],{"type":52,"value":1863},"-view.field",{"type":46,"tag":1440,"props":1865,"children":1866},{},[1867,1872],{"type":46,"tag":284,"props":1868,"children":1869},{},[1870],{"type":52,"value":1871},"Exclude",{"type":52,"value":1873}," this specific field",{"type":46,"tag":504,"props":1875,"children":1877},{"id":1876},"how-to-apply-exclusions-correctly",[1878],{"type":52,"value":1879},"How to apply exclusions correctly",{"type":46,"tag":55,"props":1881,"children":1882},{},[1883,1885,1891,1893,1898],{"type":52,"value":1884},"Exclusions (prefixed with ",{"type":46,"tag":80,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":52,"value":1890},"-",{"type":52,"value":1892},") must be applied ",{"type":46,"tag":284,"props":1894,"children":1895},{},[1896],{"type":52,"value":1897},"after",{"type":52,"value":1899}," all inclusions are resolved. The process is:",{"type":46,"tag":989,"props":1901,"children":1902},{},[1903,1908,1968],{"type":46,"tag":439,"props":1904,"children":1905},{},[1906],{"type":52,"value":1907},"Start with an empty inclusion set",{"type":46,"tag":439,"props":1909,"children":1910},{},[1911,1913,1918,1920],{"type":52,"value":1912},"Process each entry in ",{"type":46,"tag":80,"props":1914,"children":1916},{"className":1915},[],[1917],{"type":52,"value":1723},{"type":52,"value":1919}," in order:\n",{"type":46,"tag":435,"props":1921,"children":1922},{},[1923,1949],{"type":46,"tag":439,"props":1924,"children":1925},{},[1926,1928,1933,1935,1940,1941,1947],{"type":52,"value":1927},"If it is an inclusion rule (",{"type":46,"tag":80,"props":1929,"children":1931},{"className":1930},[],[1932],{"type":52,"value":1812},{"type":52,"value":1934},", ",{"type":46,"tag":80,"props":1936,"children":1938},{"className":1937},[],[1939],{"type":52,"value":1846},{"type":52,"value":1934},{"type":46,"tag":80,"props":1942,"children":1944},{"className":1943},[],[1945],{"type":52,"value":1946},"tag:x",{"type":52,"value":1948},") → add matching fields to the set",{"type":46,"tag":439,"props":1950,"children":1951},{},[1952,1954,1959,1961,1966],{"type":52,"value":1953},"If it is an exclusion rule (",{"type":46,"tag":80,"props":1955,"children":1957},{"className":1956},[],[1958],{"type":52,"value":1863},{"type":52,"value":1960},") → ",{"type":46,"tag":284,"props":1962,"children":1963},{},[1964],{"type":52,"value":1965},"remove",{"type":52,"value":1967}," that field from the set, even if it was added by a wildcard",{"type":46,"tag":439,"props":1969,"children":1970},{},[1971],{"type":52,"value":1972},"The final set is the complete list of fields to include in the Semantic View",{"type":46,"tag":55,"props":1974,"children":1975},{},[1976],{"type":46,"tag":284,"props":1977,"children":1978},{},[1979],{"type":52,"value":1980},"Example:",{"type":46,"tag":72,"props":1982,"children":1984},{"className":1517,"code":1983,"language":22,"meta":77,"style":77},"fields:\n  - ecomm__order_items.*          # include all order_items fields\n  - ecomm__users.country          # include this one users field\n  - -ecomm__order_items.cost      # remove cost — excluded even though * was used above\n  - -ecomm__order_items.raw_json  # remove raw_json — same reason\n",[1985],{"type":46,"tag":80,"props":1986,"children":1987},{"__ignoreMap":77},[1988,1999,2017,2034,2051],{"type":46,"tag":84,"props":1989,"children":1990},{"class":86,"line":87},[1991,1995],{"type":46,"tag":84,"props":1992,"children":1993},{"style":1528},[1994],{"type":52,"value":1723},{"type":46,"tag":84,"props":1996,"children":1997},{"style":126},[1998],{"type":52,"value":1535},{"type":46,"tag":84,"props":2000,"children":2001},{"class":86,"line":97},[2002,2007,2012],{"type":46,"tag":84,"props":2003,"children":2004},{"style":126},[2005],{"type":52,"value":2006},"  -",{"type":46,"tag":84,"props":2008,"children":2009},{"style":115},[2010],{"type":52,"value":2011}," ecomm__order_items.*",{"type":46,"tag":84,"props":2013,"children":2014},{"style":91},[2015],{"type":52,"value":2016},"          # include all order_items fields\n",{"type":46,"tag":84,"props":2018,"children":2019},{"class":86,"line":33},[2020,2024,2029],{"type":46,"tag":84,"props":2021,"children":2022},{"style":126},[2023],{"type":52,"value":2006},{"type":46,"tag":84,"props":2025,"children":2026},{"style":115},[2027],{"type":52,"value":2028}," ecomm__users.country",{"type":46,"tag":84,"props":2030,"children":2031},{"style":91},[2032],{"type":52,"value":2033},"          # include this one users field\n",{"type":46,"tag":84,"props":2035,"children":2036},{"class":86,"line":203},[2037,2041,2046],{"type":46,"tag":84,"props":2038,"children":2039},{"style":126},[2040],{"type":52,"value":2006},{"type":46,"tag":84,"props":2042,"children":2043},{"style":115},[2044],{"type":52,"value":2045}," -ecomm__order_items.cost",{"type":46,"tag":84,"props":2047,"children":2048},{"style":91},[2049],{"type":52,"value":2050},"      # remove cost — excluded even though * was used above\n",{"type":46,"tag":84,"props":2052,"children":2053},{"class":86,"line":241},[2054,2058,2063],{"type":46,"tag":84,"props":2055,"children":2056},{"style":126},[2057],{"type":52,"value":2006},{"type":46,"tag":84,"props":2059,"children":2060},{"style":115},[2061],{"type":52,"value":2062}," -ecomm__order_items.raw_json",{"type":46,"tag":84,"props":2064,"children":2065},{"style":91},[2066],{"type":52,"value":2067},"  # remove raw_json — same reason\n",{"type":46,"tag":55,"props":2069,"children":2070},{},[2071,2073,2079,2081,2086,2088,2094,2095,2101,2103,2109],{"type":52,"value":2072},"Result: all ",{"type":46,"tag":80,"props":2074,"children":2076},{"className":2075},[],[2077],{"type":52,"value":2078},"order_items",{"type":52,"value":2080}," fields ",{"type":46,"tag":284,"props":2082,"children":2083},{},[2084],{"type":52,"value":2085},"except",{"type":52,"value":2087}," ",{"type":46,"tag":80,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":52,"value":2093},"cost",{"type":52,"value":1027},{"type":46,"tag":80,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":52,"value":2100},"raw_json",{"type":52,"value":2102},", plus ",{"type":46,"tag":80,"props":2104,"children":2106},{"className":2105},[],[2107],{"type":52,"value":2108},"users.country",{"type":52,"value":370},{"type":46,"tag":277,"props":2111,"children":2112},{},[2113],{"type":46,"tag":55,"props":2114,"children":2115},{},[2116,2117,2122,2124,2129],{"type":52,"value":1053},{"type":46,"tag":284,"props":2118,"children":2119},{},[2120],{"type":52,"value":2121},"Critical:",{"type":52,"value":2123}," A ",{"type":46,"tag":80,"props":2125,"children":2127},{"className":2126},[],[2128],{"type":52,"value":1890},{"type":52,"value":2130}," exclusion always wins. Never include a field that has been explicitly excluded, regardless of what wildcard included it.",{"type":46,"tag":61,"props":2132,"children":2133},{},[],{"type":46,"tag":423,"props":2135,"children":2137},{"id":2136},"step-5-build-relationships",[2138],{"type":52,"value":2139},"Step 5 — Build Relationships",{"type":46,"tag":55,"props":2141,"children":2142},{},[2143,2145,2151],{"type":52,"value":2144},"Using the join hierarchy from Step 3 and the ",{"type":46,"tag":80,"props":2146,"children":2148},{"className":2147},[],[2149],{"type":52,"value":2150},"relationships.yaml",{"type":52,"value":2152}," fetched in Step 2c, map each join to a Snowflake Semantic View relationship.",{"type":46,"tag":55,"props":2154,"children":2155},{},[2156,2158,2163],{"type":52,"value":2157},"Each entry in ",{"type":46,"tag":80,"props":2159,"children":2161},{"className":2160},[],[2162],{"type":52,"value":2150},{"type":52,"value":2164}," looks like:",{"type":46,"tag":72,"props":2166,"children":2168},{"className":1517,"code":2167,"language":22,"meta":77,"style":77},"- join_from_view: ecomm__order_items\n  join_to_view: ecomm__inventory_items\n  join_type: always_left\n  on_sql: ${ecomm__order_items.inventory_item_id} = ${ecomm__inventory_items.id}\n  relationship_type: assumed_many_to_one\n",[2169],{"type":46,"tag":80,"props":2170,"children":2171},{"__ignoreMap":77},[2172,2193,2210,2227,2244],{"type":46,"tag":84,"props":2173,"children":2174},{"class":86,"line":87},[2175,2179,2184,2188],{"type":46,"tag":84,"props":2176,"children":2177},{"style":126},[2178],{"type":52,"value":1890},{"type":46,"tag":84,"props":2180,"children":2181},{"style":1528},[2182],{"type":52,"value":2183}," join_from_view",{"type":46,"tag":84,"props":2185,"children":2186},{"style":126},[2187],{"type":52,"value":1548},{"type":46,"tag":84,"props":2189,"children":2190},{"style":115},[2191],{"type":52,"value":2192}," ecomm__order_items\n",{"type":46,"tag":84,"props":2194,"children":2195},{"class":86,"line":97},[2196,2201,2205],{"type":46,"tag":84,"props":2197,"children":2198},{"style":1528},[2199],{"type":52,"value":2200},"  join_to_view",{"type":46,"tag":84,"props":2202,"children":2203},{"style":126},[2204],{"type":52,"value":1548},{"type":46,"tag":84,"props":2206,"children":2207},{"style":115},[2208],{"type":52,"value":2209}," ecomm__inventory_items\n",{"type":46,"tag":84,"props":2211,"children":2212},{"class":86,"line":33},[2213,2218,2222],{"type":46,"tag":84,"props":2214,"children":2215},{"style":1528},[2216],{"type":52,"value":2217},"  join_type",{"type":46,"tag":84,"props":2219,"children":2220},{"style":126},[2221],{"type":52,"value":1548},{"type":46,"tag":84,"props":2223,"children":2224},{"style":115},[2225],{"type":52,"value":2226}," always_left\n",{"type":46,"tag":84,"props":2228,"children":2229},{"class":86,"line":203},[2230,2235,2239],{"type":46,"tag":84,"props":2231,"children":2232},{"style":1528},[2233],{"type":52,"value":2234},"  on_sql",{"type":46,"tag":84,"props":2236,"children":2237},{"style":126},[2238],{"type":52,"value":1548},{"type":46,"tag":84,"props":2240,"children":2241},{"style":115},[2242],{"type":52,"value":2243}," ${ecomm__order_items.inventory_item_id} = ${ecomm__inventory_items.id}\n",{"type":46,"tag":84,"props":2245,"children":2246},{"class":86,"line":241},[2247,2252,2256],{"type":46,"tag":84,"props":2248,"children":2249},{"style":1528},[2250],{"type":52,"value":2251},"  relationship_type",{"type":46,"tag":84,"props":2253,"children":2254},{"style":126},[2255],{"type":52,"value":1548},{"type":46,"tag":84,"props":2257,"children":2258},{"style":115},[2259],{"type":52,"value":2260}," assumed_many_to_one\n",{"type":46,"tag":55,"props":2262,"children":2263},{},[2264,2265,2271,2273,2279],{"type":52,"value":1396},{"type":46,"tag":80,"props":2266,"children":2268},{"className":2267},[],[2269],{"type":52,"value":2270},"on_sql",{"type":52,"value":2272}," field tells you the join columns. Extract the column names to populate ",{"type":46,"tag":80,"props":2274,"children":2276},{"className":2275},[],[2277],{"type":52,"value":2278},"relationship_columns",{"type":52,"value":2280}," in the output.",{"type":46,"tag":55,"props":2282,"children":2283},{},[2284],{"type":46,"tag":284,"props":2285,"children":2286},{},[2287],{"type":52,"value":2288},"Available relationship parameters:",{"type":46,"tag":1405,"props":2290,"children":2291},{},[2292,2308],{"type":46,"tag":1409,"props":2293,"children":2294},{},[2295],{"type":46,"tag":1413,"props":2296,"children":2297},{},[2298,2303],{"type":46,"tag":1417,"props":2299,"children":2300},{},[2301],{"type":52,"value":2302},"Parameter",{"type":46,"tag":1417,"props":2304,"children":2305},{},[2306],{"type":52,"value":2307},"Description",{"type":46,"tag":1433,"props":2309,"children":2310},{},[2311,2328,2345,2369,2385,2409,2426],{"type":46,"tag":1413,"props":2312,"children":2313},{},[2314,2323],{"type":46,"tag":1440,"props":2315,"children":2316},{},[2317],{"type":46,"tag":80,"props":2318,"children":2320},{"className":2319},[],[2321],{"type":52,"value":2322},"join_from_view",{"type":46,"tag":1440,"props":2324,"children":2325},{},[2326],{"type":52,"value":2327},"Source view the join originates from",{"type":46,"tag":1413,"props":2329,"children":2330},{},[2331,2340],{"type":46,"tag":1440,"props":2332,"children":2333},{},[2334],{"type":46,"tag":80,"props":2335,"children":2337},{"className":2336},[],[2338],{"type":52,"value":2339},"join_to_view",{"type":46,"tag":1440,"props":2341,"children":2342},{},[2343],{"type":52,"value":2344},"Target view being joined to",{"type":46,"tag":1413,"props":2346,"children":2347},{},[2348,2357],{"type":46,"tag":1440,"props":2349,"children":2350},{},[2351],{"type":46,"tag":80,"props":2352,"children":2354},{"className":2353},[],[2355],{"type":52,"value":2356},"join_type",{"type":46,"tag":1440,"props":2358,"children":2359},{},[2360,2362,2368],{"type":52,"value":2361},"SQL join type (e.g. ",{"type":46,"tag":80,"props":2363,"children":2365},{"className":2364},[],[2366],{"type":52,"value":2367},"always_left",{"type":52,"value":836},{"type":46,"tag":1413,"props":2370,"children":2371},{},[2372,2380],{"type":46,"tag":1440,"props":2373,"children":2374},{},[2375],{"type":46,"tag":80,"props":2376,"children":2378},{"className":2377},[],[2379],{"type":52,"value":2270},{"type":46,"tag":1440,"props":2381,"children":2382},{},[2383],{"type":52,"value":2384},"SQL condition — extract column names from this",{"type":46,"tag":1413,"props":2386,"children":2387},{},[2388,2397],{"type":46,"tag":1440,"props":2389,"children":2390},{},[2391],{"type":46,"tag":80,"props":2392,"children":2394},{"className":2393},[],[2395],{"type":52,"value":2396},"relationship_type",{"type":46,"tag":1440,"props":2398,"children":2399},{},[2400,2402,2408],{"type":52,"value":2401},"Cardinality (e.g. ",{"type":46,"tag":80,"props":2403,"children":2405},{"className":2404},[],[2406],{"type":52,"value":2407},"assumed_many_to_one",{"type":52,"value":836},{"type":46,"tag":1413,"props":2410,"children":2411},{},[2412,2421],{"type":46,"tag":1440,"props":2413,"children":2414},{},[2415],{"type":46,"tag":80,"props":2416,"children":2418},{"className":2417},[],[2419],{"type":52,"value":2420},"reversible",{"type":46,"tag":1440,"props":2422,"children":2423},{},[2424],{"type":52,"value":2425},"Whether the join is bi-directional",{"type":46,"tag":1413,"props":2427,"children":2428},{},[2429,2438],{"type":46,"tag":1440,"props":2430,"children":2431},{},[2432],{"type":46,"tag":80,"props":2433,"children":2435},{"className":2434},[],[2436],{"type":52,"value":2437},"where_sql",{"type":46,"tag":1440,"props":2439,"children":2440},{},[2441],{"type":52,"value":2442},"Additional WHERE clause when join is active",{"type":46,"tag":61,"props":2444,"children":2445},{},[],{"type":46,"tag":423,"props":2447,"children":2449},{"id":2448},"step-6-map-dimensions-and-measures",[2450],{"type":52,"value":2451},"Step 6 — Map Dimensions and Measures",{"type":46,"tag":55,"props":2453,"children":2454},{},[2455],{"type":52,"value":2456},"For each view in the resolved field list, translate its Omni field definitions into Semantic View entries.",{"type":46,"tag":277,"props":2458,"children":2459},{},[2460],{"type":46,"tag":55,"props":2461,"children":2462},{},[2463],{"type":52,"value":2464},"⚠️ Only translate fields that survived the Step 4 inclusion\u002Fexclusion resolution. Do not add fields that were excluded.",{"type":46,"tag":504,"props":2466,"children":2468},{"id":2467},"dimensions-dimensions-or-time_dimensions",[2469,2471,2477,2478],{"type":52,"value":2470},"Dimensions → ",{"type":46,"tag":80,"props":2472,"children":2474},{"className":2473},[],[2475],{"type":52,"value":2476},"dimensions",{"type":52,"value":297},{"type":46,"tag":80,"props":2479,"children":2481},{"className":2480},[],[2482],{"type":52,"value":2483},"time_dimensions",{"type":46,"tag":55,"props":2485,"children":2486},{},[2487,2489,2495,2497,2503,2504,2510],{"type":52,"value":2488},"The field name becomes the dimension name unless a ",{"type":46,"tag":80,"props":2490,"children":2492},{"className":2491},[],[2493],{"type":52,"value":2494},"label",{"type":52,"value":2496}," is defined. Carry ",{"type":46,"tag":80,"props":2498,"children":2500},{"className":2499},[],[2501],{"type":52,"value":2502},"description",{"type":52,"value":1027},{"type":46,"tag":80,"props":2505,"children":2507},{"className":2506},[],[2508],{"type":52,"value":2509},"synonyms",{"type":52,"value":2511}," directly.",{"type":46,"tag":61,"props":2513,"children":2514},{},[],{"type":46,"tag":55,"props":2516,"children":2517},{},[2518],{"type":46,"tag":284,"props":2519,"children":2520},{},[2521],{"type":52,"value":2522},"Standard dimension:",{"type":46,"tag":72,"props":2524,"children":2526},{"className":1517,"code":2525,"language":22,"meta":77,"style":77},"# Omni view YAML\ncity:\n  sql: '\"CITY\"'\n  label: City\n  description: Customer's city\n",[2527],{"type":46,"tag":80,"props":2528,"children":2529},{"__ignoreMap":77},[2530,2538,2550,2577,2594],{"type":46,"tag":84,"props":2531,"children":2532},{"class":86,"line":87},[2533],{"type":46,"tag":84,"props":2534,"children":2535},{"style":91},[2536],{"type":52,"value":2537},"# Omni view YAML\n",{"type":46,"tag":84,"props":2539,"children":2540},{"class":86,"line":97},[2541,2546],{"type":46,"tag":84,"props":2542,"children":2543},{"style":1528},[2544],{"type":52,"value":2545},"city",{"type":46,"tag":84,"props":2547,"children":2548},{"style":126},[2549],{"type":52,"value":1535},{"type":46,"tag":84,"props":2551,"children":2552},{"class":86,"line":33},[2553,2558,2562,2567,2572],{"type":46,"tag":84,"props":2554,"children":2555},{"style":1528},[2556],{"type":52,"value":2557},"  sql",{"type":46,"tag":84,"props":2559,"children":2560},{"style":126},[2561],{"type":52,"value":1548},{"type":46,"tag":84,"props":2563,"children":2564},{"style":126},[2565],{"type":52,"value":2566}," '",{"type":46,"tag":84,"props":2568,"children":2569},{"style":115},[2570],{"type":52,"value":2571},"\"CITY\"",{"type":46,"tag":84,"props":2573,"children":2574},{"style":126},[2575],{"type":52,"value":2576},"'\n",{"type":46,"tag":84,"props":2578,"children":2579},{"class":86,"line":203},[2580,2585,2589],{"type":46,"tag":84,"props":2581,"children":2582},{"style":1528},[2583],{"type":52,"value":2584},"  label",{"type":46,"tag":84,"props":2586,"children":2587},{"style":126},[2588],{"type":52,"value":1548},{"type":46,"tag":84,"props":2590,"children":2591},{"style":115},[2592],{"type":52,"value":2593}," City\n",{"type":46,"tag":84,"props":2595,"children":2596},{"class":86,"line":241},[2597,2602,2606],{"type":46,"tag":84,"props":2598,"children":2599},{"style":1528},[2600],{"type":52,"value":2601},"  description",{"type":46,"tag":84,"props":2603,"children":2604},{"style":126},[2605],{"type":52,"value":1548},{"type":46,"tag":84,"props":2607,"children":2608},{"style":115},[2609],{"type":52,"value":2610}," Customer's city\n",{"type":46,"tag":72,"props":2612,"children":2614},{"className":1517,"code":2613,"language":22,"meta":77,"style":77},"# Semantic View output\n- name: city\n  expr: CITY\n  description: Customer's city\n  data_type: TEXT\n",[2615],{"type":46,"tag":80,"props":2616,"children":2617},{"__ignoreMap":77},[2618,2626,2647,2664,2679],{"type":46,"tag":84,"props":2619,"children":2620},{"class":86,"line":87},[2621],{"type":46,"tag":84,"props":2622,"children":2623},{"style":91},[2624],{"type":52,"value":2625},"# Semantic View output\n",{"type":46,"tag":84,"props":2627,"children":2628},{"class":86,"line":97},[2629,2633,2638,2642],{"type":46,"tag":84,"props":2630,"children":2631},{"style":126},[2632],{"type":52,"value":1890},{"type":46,"tag":84,"props":2634,"children":2635},{"style":1528},[2636],{"type":52,"value":2637}," name",{"type":46,"tag":84,"props":2639,"children":2640},{"style":126},[2641],{"type":52,"value":1548},{"type":46,"tag":84,"props":2643,"children":2644},{"style":115},[2645],{"type":52,"value":2646}," city\n",{"type":46,"tag":84,"props":2648,"children":2649},{"class":86,"line":33},[2650,2655,2659],{"type":46,"tag":84,"props":2651,"children":2652},{"style":1528},[2653],{"type":52,"value":2654},"  expr",{"type":46,"tag":84,"props":2656,"children":2657},{"style":126},[2658],{"type":52,"value":1548},{"type":46,"tag":84,"props":2660,"children":2661},{"style":115},[2662],{"type":52,"value":2663}," CITY\n",{"type":46,"tag":84,"props":2665,"children":2666},{"class":86,"line":203},[2667,2671,2675],{"type":46,"tag":84,"props":2668,"children":2669},{"style":1528},[2670],{"type":52,"value":2601},{"type":46,"tag":84,"props":2672,"children":2673},{"style":126},[2674],{"type":52,"value":1548},{"type":46,"tag":84,"props":2676,"children":2677},{"style":115},[2678],{"type":52,"value":2610},{"type":46,"tag":84,"props":2680,"children":2681},{"class":86,"line":241},[2682,2687,2691],{"type":46,"tag":84,"props":2683,"children":2684},{"style":1528},[2685],{"type":52,"value":2686},"  data_type",{"type":46,"tag":84,"props":2688,"children":2689},{"style":126},[2690],{"type":52,"value":1548},{"type":46,"tag":84,"props":2692,"children":2693},{"style":115},[2694],{"type":52,"value":2695}," TEXT\n",{"type":46,"tag":61,"props":2697,"children":2698},{},[],{"type":46,"tag":55,"props":2700,"children":2701},{},[2702,2707,2709,2714],{"type":46,"tag":284,"props":2703,"children":2704},{},[2705],{"type":52,"value":2706},"Date\u002Ftimestamp dimension",{"type":52,"value":2708}," → use ",{"type":46,"tag":80,"props":2710,"children":2712},{"className":2711},[],[2713],{"type":52,"value":2483},{"type":52,"value":1548},{"type":46,"tag":72,"props":2716,"children":2718},{"className":1517,"code":2717,"language":22,"meta":77,"style":77},"# Omni\ncreated_at:\n  sql: '\"CREATED_AT\"'\n  type: time\n  label: Created At\n",[2719],{"type":46,"tag":80,"props":2720,"children":2721},{"__ignoreMap":77},[2722,2730,2742,2766,2783],{"type":46,"tag":84,"props":2723,"children":2724},{"class":86,"line":87},[2725],{"type":46,"tag":84,"props":2726,"children":2727},{"style":91},[2728],{"type":52,"value":2729},"# Omni\n",{"type":46,"tag":84,"props":2731,"children":2732},{"class":86,"line":97},[2733,2738],{"type":46,"tag":84,"props":2734,"children":2735},{"style":1528},[2736],{"type":52,"value":2737},"created_at",{"type":46,"tag":84,"props":2739,"children":2740},{"style":126},[2741],{"type":52,"value":1535},{"type":46,"tag":84,"props":2743,"children":2744},{"class":86,"line":33},[2745,2749,2753,2757,2762],{"type":46,"tag":84,"props":2746,"children":2747},{"style":1528},[2748],{"type":52,"value":2557},{"type":46,"tag":84,"props":2750,"children":2751},{"style":126},[2752],{"type":52,"value":1548},{"type":46,"tag":84,"props":2754,"children":2755},{"style":126},[2756],{"type":52,"value":2566},{"type":46,"tag":84,"props":2758,"children":2759},{"style":115},[2760],{"type":52,"value":2761},"\"CREATED_AT\"",{"type":46,"tag":84,"props":2763,"children":2764},{"style":126},[2765],{"type":52,"value":2576},{"type":46,"tag":84,"props":2767,"children":2768},{"class":86,"line":203},[2769,2774,2778],{"type":46,"tag":84,"props":2770,"children":2771},{"style":1528},[2772],{"type":52,"value":2773},"  type",{"type":46,"tag":84,"props":2775,"children":2776},{"style":126},[2777],{"type":52,"value":1548},{"type":46,"tag":84,"props":2779,"children":2780},{"style":115},[2781],{"type":52,"value":2782}," time\n",{"type":46,"tag":84,"props":2784,"children":2785},{"class":86,"line":241},[2786,2790,2794],{"type":46,"tag":84,"props":2787,"children":2788},{"style":1528},[2789],{"type":52,"value":2584},{"type":46,"tag":84,"props":2791,"children":2792},{"style":126},[2793],{"type":52,"value":1548},{"type":46,"tag":84,"props":2795,"children":2796},{"style":115},[2797],{"type":52,"value":2798}," Created At\n",{"type":46,"tag":72,"props":2800,"children":2802},{"className":1517,"code":2801,"language":22,"meta":77,"style":77},"# Semantic View output\ntime_dimensions:\n  - name: created_at\n    expr: CREATED_AT\n    data_type: TIMESTAMP\n",[2803],{"type":46,"tag":80,"props":2804,"children":2805},{"__ignoreMap":77},[2806,2813,2824,2844,2861],{"type":46,"tag":84,"props":2807,"children":2808},{"class":86,"line":87},[2809],{"type":46,"tag":84,"props":2810,"children":2811},{"style":91},[2812],{"type":52,"value":2625},{"type":46,"tag":84,"props":2814,"children":2815},{"class":86,"line":97},[2816,2820],{"type":46,"tag":84,"props":2817,"children":2818},{"style":1528},[2819],{"type":52,"value":2483},{"type":46,"tag":84,"props":2821,"children":2822},{"style":126},[2823],{"type":52,"value":1535},{"type":46,"tag":84,"props":2825,"children":2826},{"class":86,"line":33},[2827,2831,2835,2839],{"type":46,"tag":84,"props":2828,"children":2829},{"style":126},[2830],{"type":52,"value":2006},{"type":46,"tag":84,"props":2832,"children":2833},{"style":1528},[2834],{"type":52,"value":2637},{"type":46,"tag":84,"props":2836,"children":2837},{"style":126},[2838],{"type":52,"value":1548},{"type":46,"tag":84,"props":2840,"children":2841},{"style":115},[2842],{"type":52,"value":2843}," created_at\n",{"type":46,"tag":84,"props":2845,"children":2846},{"class":86,"line":203},[2847,2852,2856],{"type":46,"tag":84,"props":2848,"children":2849},{"style":1528},[2850],{"type":52,"value":2851},"    expr",{"type":46,"tag":84,"props":2853,"children":2854},{"style":126},[2855],{"type":52,"value":1548},{"type":46,"tag":84,"props":2857,"children":2858},{"style":115},[2859],{"type":52,"value":2860}," CREATED_AT\n",{"type":46,"tag":84,"props":2862,"children":2863},{"class":86,"line":241},[2864,2869,2873],{"type":46,"tag":84,"props":2865,"children":2866},{"style":1528},[2867],{"type":52,"value":2868},"    data_type",{"type":46,"tag":84,"props":2870,"children":2871},{"style":126},[2872],{"type":52,"value":1548},{"type":46,"tag":84,"props":2874,"children":2875},{"style":115},[2876],{"type":52,"value":2877}," TIMESTAMP\n",{"type":46,"tag":61,"props":2879,"children":2880},{},[],{"type":46,"tag":55,"props":2882,"children":2883},{},[2884,2889,2891,2897],{"type":46,"tag":284,"props":2885,"children":2886},{},[2887],{"type":52,"value":2888},"Group dimension",{"type":52,"value":2890}," → translate to a ",{"type":46,"tag":80,"props":2892,"children":2894},{"className":2893},[],[2895],{"type":52,"value":2896},"CASE WHEN",{"type":52,"value":2898}," expression:",{"type":46,"tag":72,"props":2900,"children":2902},{"className":1517,"code":2901,"language":22,"meta":77,"style":77},"# Omni\ndevice_type_groups:\n  sql: ${device_type}\n  label: Device Type Groups\n  groups:\n    - filter:\n        is: [ mobile, tablet ]\n      name: Handheld\n    - filter:\n        is: desktop\n      name: Desktop\n  else: Other\n",[2903],{"type":46,"tag":80,"props":2904,"children":2905},{"__ignoreMap":77},[2906,2913,2925,2941,2957,2969,2986,3023,3040,3055,3071,3088],{"type":46,"tag":84,"props":2907,"children":2908},{"class":86,"line":87},[2909],{"type":46,"tag":84,"props":2910,"children":2911},{"style":91},[2912],{"type":52,"value":2729},{"type":46,"tag":84,"props":2914,"children":2915},{"class":86,"line":97},[2916,2921],{"type":46,"tag":84,"props":2917,"children":2918},{"style":1528},[2919],{"type":52,"value":2920},"device_type_groups",{"type":46,"tag":84,"props":2922,"children":2923},{"style":126},[2924],{"type":52,"value":1535},{"type":46,"tag":84,"props":2926,"children":2927},{"class":86,"line":33},[2928,2932,2936],{"type":46,"tag":84,"props":2929,"children":2930},{"style":1528},[2931],{"type":52,"value":2557},{"type":46,"tag":84,"props":2933,"children":2934},{"style":126},[2935],{"type":52,"value":1548},{"type":46,"tag":84,"props":2937,"children":2938},{"style":115},[2939],{"type":52,"value":2940}," ${device_type}\n",{"type":46,"tag":84,"props":2942,"children":2943},{"class":86,"line":203},[2944,2948,2952],{"type":46,"tag":84,"props":2945,"children":2946},{"style":1528},[2947],{"type":52,"value":2584},{"type":46,"tag":84,"props":2949,"children":2950},{"style":126},[2951],{"type":52,"value":1548},{"type":46,"tag":84,"props":2953,"children":2954},{"style":115},[2955],{"type":52,"value":2956}," Device Type Groups\n",{"type":46,"tag":84,"props":2958,"children":2959},{"class":86,"line":241},[2960,2965],{"type":46,"tag":84,"props":2961,"children":2962},{"style":1528},[2963],{"type":52,"value":2964},"  groups",{"type":46,"tag":84,"props":2966,"children":2967},{"style":126},[2968],{"type":52,"value":1535},{"type":46,"tag":84,"props":2970,"children":2971},{"class":86,"line":251},[2972,2977,2982],{"type":46,"tag":84,"props":2973,"children":2974},{"style":126},[2975],{"type":52,"value":2976},"    -",{"type":46,"tag":84,"props":2978,"children":2979},{"style":1528},[2980],{"type":52,"value":2981}," filter",{"type":46,"tag":84,"props":2983,"children":2984},{"style":126},[2985],{"type":52,"value":1535},{"type":46,"tag":84,"props":2987,"children":2988},{"class":86,"line":260},[2989,2994,2998,3003,3008,3013,3018],{"type":46,"tag":84,"props":2990,"children":2991},{"style":1528},[2992],{"type":52,"value":2993},"        is",{"type":46,"tag":84,"props":2995,"children":2996},{"style":126},[2997],{"type":52,"value":1548},{"type":46,"tag":84,"props":2999,"children":3000},{"style":126},[3001],{"type":52,"value":3002}," [",{"type":46,"tag":84,"props":3004,"children":3005},{"style":115},[3006],{"type":52,"value":3007}," mobile",{"type":46,"tag":84,"props":3009,"children":3010},{"style":126},[3011],{"type":52,"value":3012},",",{"type":46,"tag":84,"props":3014,"children":3015},{"style":115},[3016],{"type":52,"value":3017}," tablet",{"type":46,"tag":84,"props":3019,"children":3020},{"style":126},[3021],{"type":52,"value":3022}," ]\n",{"type":46,"tag":84,"props":3024,"children":3025},{"class":86,"line":598},[3026,3031,3035],{"type":46,"tag":84,"props":3027,"children":3028},{"style":1528},[3029],{"type":52,"value":3030},"      name",{"type":46,"tag":84,"props":3032,"children":3033},{"style":126},[3034],{"type":52,"value":1548},{"type":46,"tag":84,"props":3036,"children":3037},{"style":115},[3038],{"type":52,"value":3039}," Handheld\n",{"type":46,"tag":84,"props":3041,"children":3042},{"class":86,"line":937},[3043,3047,3051],{"type":46,"tag":84,"props":3044,"children":3045},{"style":126},[3046],{"type":52,"value":2976},{"type":46,"tag":84,"props":3048,"children":3049},{"style":1528},[3050],{"type":52,"value":2981},{"type":46,"tag":84,"props":3052,"children":3053},{"style":126},[3054],{"type":52,"value":1535},{"type":46,"tag":84,"props":3056,"children":3057},{"class":86,"line":946},[3058,3062,3066],{"type":46,"tag":84,"props":3059,"children":3060},{"style":1528},[3061],{"type":52,"value":2993},{"type":46,"tag":84,"props":3063,"children":3064},{"style":126},[3065],{"type":52,"value":1548},{"type":46,"tag":84,"props":3067,"children":3068},{"style":115},[3069],{"type":52,"value":3070}," desktop\n",{"type":46,"tag":84,"props":3072,"children":3074},{"class":86,"line":3073},11,[3075,3079,3083],{"type":46,"tag":84,"props":3076,"children":3077},{"style":1528},[3078],{"type":52,"value":3030},{"type":46,"tag":84,"props":3080,"children":3081},{"style":126},[3082],{"type":52,"value":1548},{"type":46,"tag":84,"props":3084,"children":3085},{"style":115},[3086],{"type":52,"value":3087}," Desktop\n",{"type":46,"tag":84,"props":3089,"children":3091},{"class":86,"line":3090},12,[3092,3097,3101],{"type":46,"tag":84,"props":3093,"children":3094},{"style":1528},[3095],{"type":52,"value":3096},"  else",{"type":46,"tag":84,"props":3098,"children":3099},{"style":126},[3100],{"type":52,"value":1548},{"type":46,"tag":84,"props":3102,"children":3103},{"style":115},[3104],{"type":52,"value":3105}," Other\n",{"type":46,"tag":72,"props":3107,"children":3111},{"className":3108,"code":3109,"language":3110,"meta":77,"style":77},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- expr value\nCASE\n  WHEN \"DEVICE_TYPE\" IN ('mobile', 'tablet') THEN 'Handheld'\n  WHEN \"DEVICE_TYPE\" = 'desktop' THEN 'Desktop'\n  ELSE 'Other'\nEND\n","sql",[3112],{"type":46,"tag":80,"props":3113,"children":3114},{"__ignoreMap":77},[3115,3123,3131,3139,3147,3155],{"type":46,"tag":84,"props":3116,"children":3117},{"class":86,"line":87},[3118],{"type":46,"tag":84,"props":3119,"children":3120},{},[3121],{"type":52,"value":3122},"-- expr value\n",{"type":46,"tag":84,"props":3124,"children":3125},{"class":86,"line":97},[3126],{"type":46,"tag":84,"props":3127,"children":3128},{},[3129],{"type":52,"value":3130},"CASE\n",{"type":46,"tag":84,"props":3132,"children":3133},{"class":86,"line":33},[3134],{"type":46,"tag":84,"props":3135,"children":3136},{},[3137],{"type":52,"value":3138},"  WHEN \"DEVICE_TYPE\" IN ('mobile', 'tablet') THEN 'Handheld'\n",{"type":46,"tag":84,"props":3140,"children":3141},{"class":86,"line":203},[3142],{"type":46,"tag":84,"props":3143,"children":3144},{},[3145],{"type":52,"value":3146},"  WHEN \"DEVICE_TYPE\" = 'desktop' THEN 'Desktop'\n",{"type":46,"tag":84,"props":3148,"children":3149},{"class":86,"line":241},[3150],{"type":46,"tag":84,"props":3151,"children":3152},{},[3153],{"type":52,"value":3154},"  ELSE 'Other'\n",{"type":46,"tag":84,"props":3156,"children":3157},{"class":86,"line":251},[3158],{"type":46,"tag":84,"props":3159,"children":3160},{},[3161],{"type":52,"value":3162},"END\n",{"type":46,"tag":61,"props":3164,"children":3165},{},[],{"type":46,"tag":55,"props":3167,"children":3168},{},[3169,3174,3175,3180],{"type":46,"tag":284,"props":3170,"children":3171},{},[3172],{"type":52,"value":3173},"Bin dimension",{"type":52,"value":2890},{"type":46,"tag":80,"props":3176,"children":3178},{"className":3177},[],[3179],{"type":52,"value":2896},{"type":52,"value":3181}," range expression:",{"type":46,"tag":72,"props":3183,"children":3185},{"className":1517,"code":3184,"language":22,"meta":77,"style":77},"# Omni\nage_bin:\n  sql: ${age}\n  bin_boundaries: [ 18, 35, 50, 65 ]\n",[3186],{"type":46,"tag":80,"props":3187,"children":3188},{"__ignoreMap":77},[3189,3196,3208,3224],{"type":46,"tag":84,"props":3190,"children":3191},{"class":86,"line":87},[3192],{"type":46,"tag":84,"props":3193,"children":3194},{"style":91},[3195],{"type":52,"value":2729},{"type":46,"tag":84,"props":3197,"children":3198},{"class":86,"line":97},[3199,3204],{"type":46,"tag":84,"props":3200,"children":3201},{"style":1528},[3202],{"type":52,"value":3203},"age_bin",{"type":46,"tag":84,"props":3205,"children":3206},{"style":126},[3207],{"type":52,"value":1535},{"type":46,"tag":84,"props":3209,"children":3210},{"class":86,"line":33},[3211,3215,3219],{"type":46,"tag":84,"props":3212,"children":3213},{"style":1528},[3214],{"type":52,"value":2557},{"type":46,"tag":84,"props":3216,"children":3217},{"style":126},[3218],{"type":52,"value":1548},{"type":46,"tag":84,"props":3220,"children":3221},{"style":115},[3222],{"type":52,"value":3223}," ${age}\n",{"type":46,"tag":84,"props":3225,"children":3226},{"class":86,"line":203},[3227,3232,3236,3240,3246,3250,3255,3259,3264,3268,3273],{"type":46,"tag":84,"props":3228,"children":3229},{"style":1528},[3230],{"type":52,"value":3231},"  bin_boundaries",{"type":46,"tag":84,"props":3233,"children":3234},{"style":126},[3235],{"type":52,"value":1548},{"type":46,"tag":84,"props":3237,"children":3238},{"style":126},[3239],{"type":52,"value":3002},{"type":46,"tag":84,"props":3241,"children":3243},{"style":3242},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[3244],{"type":52,"value":3245}," 18",{"type":46,"tag":84,"props":3247,"children":3248},{"style":126},[3249],{"type":52,"value":3012},{"type":46,"tag":84,"props":3251,"children":3252},{"style":3242},[3253],{"type":52,"value":3254}," 35",{"type":46,"tag":84,"props":3256,"children":3257},{"style":126},[3258],{"type":52,"value":3012},{"type":46,"tag":84,"props":3260,"children":3261},{"style":3242},[3262],{"type":52,"value":3263}," 50",{"type":46,"tag":84,"props":3265,"children":3266},{"style":126},[3267],{"type":52,"value":3012},{"type":46,"tag":84,"props":3269,"children":3270},{"style":3242},[3271],{"type":52,"value":3272}," 65",{"type":46,"tag":84,"props":3274,"children":3275},{"style":126},[3276],{"type":52,"value":3022},{"type":46,"tag":72,"props":3278,"children":3280},{"className":3108,"code":3279,"language":3110,"meta":77,"style":77},"-- expr value\nCASE\n  WHEN \"AGE\" \u003C 18 THEN 'below 18'\n  WHEN \"AGE\" >= 18 AND \"AGE\" \u003C 35 THEN '>= 18 and \u003C 35'\n  WHEN \"AGE\" >= 35 AND \"AGE\" \u003C 50 THEN '>= 35 and \u003C 50'\n  WHEN \"AGE\" >= 50 AND \"AGE\" \u003C 65 THEN '>= 50 and \u003C 65'\n  WHEN \"AGE\" >= 65 THEN '65 and above'\n  ELSE NULL\nEND\n",[3281],{"type":46,"tag":80,"props":3282,"children":3283},{"__ignoreMap":77},[3284,3291,3298,3306,3314,3322,3330,3338,3346],{"type":46,"tag":84,"props":3285,"children":3286},{"class":86,"line":87},[3287],{"type":46,"tag":84,"props":3288,"children":3289},{},[3290],{"type":52,"value":3122},{"type":46,"tag":84,"props":3292,"children":3293},{"class":86,"line":97},[3294],{"type":46,"tag":84,"props":3295,"children":3296},{},[3297],{"type":52,"value":3130},{"type":46,"tag":84,"props":3299,"children":3300},{"class":86,"line":33},[3301],{"type":46,"tag":84,"props":3302,"children":3303},{},[3304],{"type":52,"value":3305},"  WHEN \"AGE\" \u003C 18 THEN 'below 18'\n",{"type":46,"tag":84,"props":3307,"children":3308},{"class":86,"line":203},[3309],{"type":46,"tag":84,"props":3310,"children":3311},{},[3312],{"type":52,"value":3313},"  WHEN \"AGE\" >= 18 AND \"AGE\" \u003C 35 THEN '>= 18 and \u003C 35'\n",{"type":46,"tag":84,"props":3315,"children":3316},{"class":86,"line":241},[3317],{"type":46,"tag":84,"props":3318,"children":3319},{},[3320],{"type":52,"value":3321},"  WHEN \"AGE\" >= 35 AND \"AGE\" \u003C 50 THEN '>= 35 and \u003C 50'\n",{"type":46,"tag":84,"props":3323,"children":3324},{"class":86,"line":251},[3325],{"type":46,"tag":84,"props":3326,"children":3327},{},[3328],{"type":52,"value":3329},"  WHEN \"AGE\" >= 50 AND \"AGE\" \u003C 65 THEN '>= 50 and \u003C 65'\n",{"type":46,"tag":84,"props":3331,"children":3332},{"class":86,"line":260},[3333],{"type":46,"tag":84,"props":3334,"children":3335},{},[3336],{"type":52,"value":3337},"  WHEN \"AGE\" >= 65 THEN '65 and above'\n",{"type":46,"tag":84,"props":3339,"children":3340},{"class":86,"line":598},[3341],{"type":46,"tag":84,"props":3342,"children":3343},{},[3344],{"type":52,"value":3345},"  ELSE NULL\n",{"type":46,"tag":84,"props":3347,"children":3348},{"class":86,"line":937},[3349],{"type":46,"tag":84,"props":3350,"children":3351},{},[3352],{"type":52,"value":3162},{"type":46,"tag":61,"props":3354,"children":3355},{},[],{"type":46,"tag":55,"props":3357,"children":3358},{},[3359,3364,3365,3371],{"type":46,"tag":284,"props":3360,"children":3361},{},[3362],{"type":52,"value":3363},"Duration dimension",{"type":52,"value":2890},{"type":46,"tag":80,"props":3366,"children":3368},{"className":3367},[],[3369],{"type":52,"value":3370},"TIMESTAMPDIFF",{"type":52,"value":2898},{"type":46,"tag":72,"props":3373,"children":3375},{"className":1517,"code":3374,"language":22,"meta":77,"style":77},"# Omni\nfulfillment_days:\n  duration:\n    sql_start: ${created_at[date]}\n    sql_end: ${delivered_at[date]}\n    intervals: [ days ]\n",[3376],{"type":46,"tag":80,"props":3377,"children":3378},{"__ignoreMap":77},[3379,3386,3398,3410,3427,3444],{"type":46,"tag":84,"props":3380,"children":3381},{"class":86,"line":87},[3382],{"type":46,"tag":84,"props":3383,"children":3384},{"style":91},[3385],{"type":52,"value":2729},{"type":46,"tag":84,"props":3387,"children":3388},{"class":86,"line":97},[3389,3394],{"type":46,"tag":84,"props":3390,"children":3391},{"style":1528},[3392],{"type":52,"value":3393},"fulfillment_days",{"type":46,"tag":84,"props":3395,"children":3396},{"style":126},[3397],{"type":52,"value":1535},{"type":46,"tag":84,"props":3399,"children":3400},{"class":86,"line":33},[3401,3406],{"type":46,"tag":84,"props":3402,"children":3403},{"style":1528},[3404],{"type":52,"value":3405},"  duration",{"type":46,"tag":84,"props":3407,"children":3408},{"style":126},[3409],{"type":52,"value":1535},{"type":46,"tag":84,"props":3411,"children":3412},{"class":86,"line":203},[3413,3418,3422],{"type":46,"tag":84,"props":3414,"children":3415},{"style":1528},[3416],{"type":52,"value":3417},"    sql_start",{"type":46,"tag":84,"props":3419,"children":3420},{"style":126},[3421],{"type":52,"value":1548},{"type":46,"tag":84,"props":3423,"children":3424},{"style":115},[3425],{"type":52,"value":3426}," ${created_at[date]}\n",{"type":46,"tag":84,"props":3428,"children":3429},{"class":86,"line":241},[3430,3435,3439],{"type":46,"tag":84,"props":3431,"children":3432},{"style":1528},[3433],{"type":52,"value":3434},"    sql_end",{"type":46,"tag":84,"props":3436,"children":3437},{"style":126},[3438],{"type":52,"value":1548},{"type":46,"tag":84,"props":3440,"children":3441},{"style":115},[3442],{"type":52,"value":3443}," ${delivered_at[date]}\n",{"type":46,"tag":84,"props":3445,"children":3446},{"class":86,"line":251},[3447,3452,3456,3460,3465],{"type":46,"tag":84,"props":3448,"children":3449},{"style":1528},[3450],{"type":52,"value":3451},"    intervals",{"type":46,"tag":84,"props":3453,"children":3454},{"style":126},[3455],{"type":52,"value":1548},{"type":46,"tag":84,"props":3457,"children":3458},{"style":126},[3459],{"type":52,"value":3002},{"type":46,"tag":84,"props":3461,"children":3462},{"style":115},[3463],{"type":52,"value":3464}," days",{"type":46,"tag":84,"props":3466,"children":3467},{"style":126},[3468],{"type":52,"value":3022},{"type":46,"tag":72,"props":3470,"children":3472},{"className":3108,"code":3471,"language":3110,"meta":77,"style":77},"-- expr value (days)\nCASE\n  WHEN TIMESTAMPADD(DAY, 1 * TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\")), DATE_TRUNC('DAY', \"CREATED_AT\"))\n       \u003C= DATE_TRUNC('DAY', \"DELIVERED_AT\")\n  THEN TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\"))\n  ELSE TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\")) - 1\nEND\n",[3473],{"type":46,"tag":80,"props":3474,"children":3475},{"__ignoreMap":77},[3476,3484,3491,3499,3507,3515,3523],{"type":46,"tag":84,"props":3477,"children":3478},{"class":86,"line":87},[3479],{"type":46,"tag":84,"props":3480,"children":3481},{},[3482],{"type":52,"value":3483},"-- expr value (days)\n",{"type":46,"tag":84,"props":3485,"children":3486},{"class":86,"line":97},[3487],{"type":46,"tag":84,"props":3488,"children":3489},{},[3490],{"type":52,"value":3130},{"type":46,"tag":84,"props":3492,"children":3493},{"class":86,"line":33},[3494],{"type":46,"tag":84,"props":3495,"children":3496},{},[3497],{"type":52,"value":3498},"  WHEN TIMESTAMPADD(DAY, 1 * TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\")), DATE_TRUNC('DAY', \"CREATED_AT\"))\n",{"type":46,"tag":84,"props":3500,"children":3501},{"class":86,"line":203},[3502],{"type":46,"tag":84,"props":3503,"children":3504},{},[3505],{"type":52,"value":3506},"       \u003C= DATE_TRUNC('DAY', \"DELIVERED_AT\")\n",{"type":46,"tag":84,"props":3508,"children":3509},{"class":86,"line":241},[3510],{"type":46,"tag":84,"props":3511,"children":3512},{},[3513],{"type":52,"value":3514},"  THEN TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\"))\n",{"type":46,"tag":84,"props":3516,"children":3517},{"class":86,"line":251},[3518],{"type":46,"tag":84,"props":3519,"children":3520},{},[3521],{"type":52,"value":3522},"  ELSE TIMESTAMPDIFF(DAY, DATE_TRUNC('DAY', \"CREATED_AT\"), DATE_TRUNC('DAY', \"DELIVERED_AT\")) - 1\n",{"type":46,"tag":84,"props":3524,"children":3525},{"class":86,"line":260},[3526],{"type":46,"tag":84,"props":3527,"children":3528},{},[3529],{"type":52,"value":3162},{"type":46,"tag":61,"props":3531,"children":3532},{},[],{"type":46,"tag":55,"props":3534,"children":3535},{},[3536,3541,3543,3549],{"type":46,"tag":284,"props":3537,"children":3538},{},[3539],{"type":52,"value":3540},"Boolean dimension",{"type":52,"value":3542}," → becomes a named ",{"type":46,"tag":80,"props":3544,"children":3546},{"className":3545},[],[3547],{"type":52,"value":3548},"filter",{"type":52,"value":3550}," (not a dimension):",{"type":46,"tag":72,"props":3552,"children":3554},{"className":1517,"code":3553,"language":22,"meta":77,"style":77},"# Omni\nis_returned:\n  sql: '\"IS_RETURNED\"'\n  description: Whether the item was returned\n\ncompleted_orders:\n  sql: ${status} = 'Complete'\n  label: Completed Orders\n",[3555],{"type":46,"tag":80,"props":3556,"children":3557},{"__ignoreMap":77},[3558,3565,3577,3601,3617,3624,3636,3652],{"type":46,"tag":84,"props":3559,"children":3560},{"class":86,"line":87},[3561],{"type":46,"tag":84,"props":3562,"children":3563},{"style":91},[3564],{"type":52,"value":2729},{"type":46,"tag":84,"props":3566,"children":3567},{"class":86,"line":97},[3568,3573],{"type":46,"tag":84,"props":3569,"children":3570},{"style":1528},[3571],{"type":52,"value":3572},"is_returned",{"type":46,"tag":84,"props":3574,"children":3575},{"style":126},[3576],{"type":52,"value":1535},{"type":46,"tag":84,"props":3578,"children":3579},{"class":86,"line":33},[3580,3584,3588,3592,3597],{"type":46,"tag":84,"props":3581,"children":3582},{"style":1528},[3583],{"type":52,"value":2557},{"type":46,"tag":84,"props":3585,"children":3586},{"style":126},[3587],{"type":52,"value":1548},{"type":46,"tag":84,"props":3589,"children":3590},{"style":126},[3591],{"type":52,"value":2566},{"type":46,"tag":84,"props":3593,"children":3594},{"style":115},[3595],{"type":52,"value":3596},"\"IS_RETURNED\"",{"type":46,"tag":84,"props":3598,"children":3599},{"style":126},[3600],{"type":52,"value":2576},{"type":46,"tag":84,"props":3602,"children":3603},{"class":86,"line":203},[3604,3608,3612],{"type":46,"tag":84,"props":3605,"children":3606},{"style":1528},[3607],{"type":52,"value":2601},{"type":46,"tag":84,"props":3609,"children":3610},{"style":126},[3611],{"type":52,"value":1548},{"type":46,"tag":84,"props":3613,"children":3614},{"style":115},[3615],{"type":52,"value":3616}," Whether the item was returned\n",{"type":46,"tag":84,"props":3618,"children":3619},{"class":86,"line":241},[3620],{"type":46,"tag":84,"props":3621,"children":3622},{"emptyLinePlaceholder":245},[3623],{"type":52,"value":248},{"type":46,"tag":84,"props":3625,"children":3626},{"class":86,"line":251},[3627,3632],{"type":46,"tag":84,"props":3628,"children":3629},{"style":1528},[3630],{"type":52,"value":3631},"completed_orders",{"type":46,"tag":84,"props":3633,"children":3634},{"style":126},[3635],{"type":52,"value":1535},{"type":46,"tag":84,"props":3637,"children":3638},{"class":86,"line":260},[3639,3643,3647],{"type":46,"tag":84,"props":3640,"children":3641},{"style":1528},[3642],{"type":52,"value":2557},{"type":46,"tag":84,"props":3644,"children":3645},{"style":126},[3646],{"type":52,"value":1548},{"type":46,"tag":84,"props":3648,"children":3649},{"style":115},[3650],{"type":52,"value":3651}," ${status} = 'Complete'\n",{"type":46,"tag":84,"props":3653,"children":3654},{"class":86,"line":598},[3655,3659,3663],{"type":46,"tag":84,"props":3656,"children":3657},{"style":1528},[3658],{"type":52,"value":2584},{"type":46,"tag":84,"props":3660,"children":3661},{"style":126},[3662],{"type":52,"value":1548},{"type":46,"tag":84,"props":3664,"children":3665},{"style":115},[3666],{"type":52,"value":3667}," Completed Orders\n",{"type":46,"tag":72,"props":3669,"children":3671},{"className":1517,"code":3670,"language":22,"meta":77,"style":77},"# Semantic View output — goes in filters, not dimensions\nfilters:\n  - name: is_returned\n    expr: IS_RETURNED\n    description: Whether the item was returned\n  - name: completed_orders\n    expr: STATUS = 'Complete'\n    description: Completed Orders\n",[3672],{"type":46,"tag":80,"props":3673,"children":3674},{"__ignoreMap":77},[3675,3683,3695,3715,3731,3747,3767,3783],{"type":46,"tag":84,"props":3676,"children":3677},{"class":86,"line":87},[3678],{"type":46,"tag":84,"props":3679,"children":3680},{"style":91},[3681],{"type":52,"value":3682},"# Semantic View output — goes in filters, not dimensions\n",{"type":46,"tag":84,"props":3684,"children":3685},{"class":86,"line":97},[3686,3691],{"type":46,"tag":84,"props":3687,"children":3688},{"style":1528},[3689],{"type":52,"value":3690},"filters",{"type":46,"tag":84,"props":3692,"children":3693},{"style":126},[3694],{"type":52,"value":1535},{"type":46,"tag":84,"props":3696,"children":3697},{"class":86,"line":33},[3698,3702,3706,3710],{"type":46,"tag":84,"props":3699,"children":3700},{"style":126},[3701],{"type":52,"value":2006},{"type":46,"tag":84,"props":3703,"children":3704},{"style":1528},[3705],{"type":52,"value":2637},{"type":46,"tag":84,"props":3707,"children":3708},{"style":126},[3709],{"type":52,"value":1548},{"type":46,"tag":84,"props":3711,"children":3712},{"style":115},[3713],{"type":52,"value":3714}," is_returned\n",{"type":46,"tag":84,"props":3716,"children":3717},{"class":86,"line":203},[3718,3722,3726],{"type":46,"tag":84,"props":3719,"children":3720},{"style":1528},[3721],{"type":52,"value":2851},{"type":46,"tag":84,"props":3723,"children":3724},{"style":126},[3725],{"type":52,"value":1548},{"type":46,"tag":84,"props":3727,"children":3728},{"style":115},[3729],{"type":52,"value":3730}," IS_RETURNED\n",{"type":46,"tag":84,"props":3732,"children":3733},{"class":86,"line":241},[3734,3739,3743],{"type":46,"tag":84,"props":3735,"children":3736},{"style":1528},[3737],{"type":52,"value":3738},"    description",{"type":46,"tag":84,"props":3740,"children":3741},{"style":126},[3742],{"type":52,"value":1548},{"type":46,"tag":84,"props":3744,"children":3745},{"style":115},[3746],{"type":52,"value":3616},{"type":46,"tag":84,"props":3748,"children":3749},{"class":86,"line":251},[3750,3754,3758,3762],{"type":46,"tag":84,"props":3751,"children":3752},{"style":126},[3753],{"type":52,"value":2006},{"type":46,"tag":84,"props":3755,"children":3756},{"style":1528},[3757],{"type":52,"value":2637},{"type":46,"tag":84,"props":3759,"children":3760},{"style":126},[3761],{"type":52,"value":1548},{"type":46,"tag":84,"props":3763,"children":3764},{"style":115},[3765],{"type":52,"value":3766}," completed_orders\n",{"type":46,"tag":84,"props":3768,"children":3769},{"class":86,"line":260},[3770,3774,3778],{"type":46,"tag":84,"props":3771,"children":3772},{"style":1528},[3773],{"type":52,"value":2851},{"type":46,"tag":84,"props":3775,"children":3776},{"style":126},[3777],{"type":52,"value":1548},{"type":46,"tag":84,"props":3779,"children":3780},{"style":115},[3781],{"type":52,"value":3782}," STATUS = 'Complete'\n",{"type":46,"tag":84,"props":3784,"children":3785},{"class":86,"line":598},[3786,3790,3794],{"type":46,"tag":84,"props":3787,"children":3788},{"style":1528},[3789],{"type":52,"value":3738},{"type":46,"tag":84,"props":3791,"children":3792},{"style":126},[3793],{"type":52,"value":1548},{"type":46,"tag":84,"props":3795,"children":3796},{"style":115},[3797],{"type":52,"value":3667},{"type":46,"tag":61,"props":3799,"children":3800},{},[],{"type":46,"tag":504,"props":3802,"children":3804},{"id":3803},"measures-metrics",[3805,3807],{"type":52,"value":3806},"Measures → ",{"type":46,"tag":80,"props":3808,"children":3810},{"className":3809},[],[3811],{"type":52,"value":3812},"metrics",{"type":46,"tag":55,"props":3814,"children":3815},{},[3816,3817,3822,3824,3830],{"type":52,"value":1396},{"type":46,"tag":80,"props":3818,"children":3820},{"className":3819},[],[3821],{"type":52,"value":3110},{"type":52,"value":3823}," field references the source column and ",{"type":46,"tag":80,"props":3825,"children":3827},{"className":3826},[],[3828],{"type":52,"value":3829},"aggregate_type",{"type":52,"value":3831}," defines the aggregation.",{"type":46,"tag":61,"props":3833,"children":3834},{},[],{"type":46,"tag":55,"props":3836,"children":3837},{},[3838],{"type":46,"tag":284,"props":3839,"children":3840},{},[3841],{"type":52,"value":3842},"Standard measure:",{"type":46,"tag":72,"props":3844,"children":3846},{"className":1517,"code":3845,"language":22,"meta":77,"style":77},"# Omni\ntotal_sale_price:\n  sql: ${sale_price}\n  aggregate_type: sum\n  label: Total Sale Price\n  description: Total revenue of orders\n  synonyms: [ Total Revenue, Total Receipts ]\n",[3847],{"type":46,"tag":80,"props":3848,"children":3849},{"__ignoreMap":77},[3850,3857,3869,3885,3902,3918,3934],{"type":46,"tag":84,"props":3851,"children":3852},{"class":86,"line":87},[3853],{"type":46,"tag":84,"props":3854,"children":3855},{"style":91},[3856],{"type":52,"value":2729},{"type":46,"tag":84,"props":3858,"children":3859},{"class":86,"line":97},[3860,3865],{"type":46,"tag":84,"props":3861,"children":3862},{"style":1528},[3863],{"type":52,"value":3864},"total_sale_price",{"type":46,"tag":84,"props":3866,"children":3867},{"style":126},[3868],{"type":52,"value":1535},{"type":46,"tag":84,"props":3870,"children":3871},{"class":86,"line":33},[3872,3876,3880],{"type":46,"tag":84,"props":3873,"children":3874},{"style":1528},[3875],{"type":52,"value":2557},{"type":46,"tag":84,"props":3877,"children":3878},{"style":126},[3879],{"type":52,"value":1548},{"type":46,"tag":84,"props":3881,"children":3882},{"style":115},[3883],{"type":52,"value":3884}," ${sale_price}\n",{"type":46,"tag":84,"props":3886,"children":3887},{"class":86,"line":203},[3888,3893,3897],{"type":46,"tag":84,"props":3889,"children":3890},{"style":1528},[3891],{"type":52,"value":3892},"  aggregate_type",{"type":46,"tag":84,"props":3894,"children":3895},{"style":126},[3896],{"type":52,"value":1548},{"type":46,"tag":84,"props":3898,"children":3899},{"style":115},[3900],{"type":52,"value":3901}," sum\n",{"type":46,"tag":84,"props":3903,"children":3904},{"class":86,"line":241},[3905,3909,3913],{"type":46,"tag":84,"props":3906,"children":3907},{"style":1528},[3908],{"type":52,"value":2584},{"type":46,"tag":84,"props":3910,"children":3911},{"style":126},[3912],{"type":52,"value":1548},{"type":46,"tag":84,"props":3914,"children":3915},{"style":115},[3916],{"type":52,"value":3917}," Total Sale Price\n",{"type":46,"tag":84,"props":3919,"children":3920},{"class":86,"line":251},[3921,3925,3929],{"type":46,"tag":84,"props":3922,"children":3923},{"style":1528},[3924],{"type":52,"value":2601},{"type":46,"tag":84,"props":3926,"children":3927},{"style":126},[3928],{"type":52,"value":1548},{"type":46,"tag":84,"props":3930,"children":3931},{"style":115},[3932],{"type":52,"value":3933}," Total revenue of orders\n",{"type":46,"tag":84,"props":3935,"children":3936},{"class":86,"line":260},[3937,3942,3946,3950,3955,3959,3964],{"type":46,"tag":84,"props":3938,"children":3939},{"style":1528},[3940],{"type":52,"value":3941},"  synonyms",{"type":46,"tag":84,"props":3943,"children":3944},{"style":126},[3945],{"type":52,"value":1548},{"type":46,"tag":84,"props":3947,"children":3948},{"style":126},[3949],{"type":52,"value":3002},{"type":46,"tag":84,"props":3951,"children":3952},{"style":115},[3953],{"type":52,"value":3954}," Total Revenue",{"type":46,"tag":84,"props":3956,"children":3957},{"style":126},[3958],{"type":52,"value":3012},{"type":46,"tag":84,"props":3960,"children":3961},{"style":115},[3962],{"type":52,"value":3963}," Total Receipts",{"type":46,"tag":84,"props":3965,"children":3966},{"style":126},[3967],{"type":52,"value":3022},{"type":46,"tag":72,"props":3969,"children":3971},{"className":1517,"code":3970,"language":22,"meta":77,"style":77},"# Semantic View output\nmetrics:\n  - name: total_sale_price\n    expr: COALESCE(SUM(\"SALE_PRICE\"), 0)\n    description: Total revenue of orders\n    synonyms: [ Total Revenue, Total Receipts ]\n",[3972],{"type":46,"tag":80,"props":3973,"children":3974},{"__ignoreMap":77},[3975,3982,3993,4013,4029,4044],{"type":46,"tag":84,"props":3976,"children":3977},{"class":86,"line":87},[3978],{"type":46,"tag":84,"props":3979,"children":3980},{"style":91},[3981],{"type":52,"value":2625},{"type":46,"tag":84,"props":3983,"children":3984},{"class":86,"line":97},[3985,3989],{"type":46,"tag":84,"props":3986,"children":3987},{"style":1528},[3988],{"type":52,"value":3812},{"type":46,"tag":84,"props":3990,"children":3991},{"style":126},[3992],{"type":52,"value":1535},{"type":46,"tag":84,"props":3994,"children":3995},{"class":86,"line":33},[3996,4000,4004,4008],{"type":46,"tag":84,"props":3997,"children":3998},{"style":126},[3999],{"type":52,"value":2006},{"type":46,"tag":84,"props":4001,"children":4002},{"style":1528},[4003],{"type":52,"value":2637},{"type":46,"tag":84,"props":4005,"children":4006},{"style":126},[4007],{"type":52,"value":1548},{"type":46,"tag":84,"props":4009,"children":4010},{"style":115},[4011],{"type":52,"value":4012}," total_sale_price\n",{"type":46,"tag":84,"props":4014,"children":4015},{"class":86,"line":203},[4016,4020,4024],{"type":46,"tag":84,"props":4017,"children":4018},{"style":1528},[4019],{"type":52,"value":2851},{"type":46,"tag":84,"props":4021,"children":4022},{"style":126},[4023],{"type":52,"value":1548},{"type":46,"tag":84,"props":4025,"children":4026},{"style":115},[4027],{"type":52,"value":4028}," COALESCE(SUM(\"SALE_PRICE\"), 0)\n",{"type":46,"tag":84,"props":4030,"children":4031},{"class":86,"line":241},[4032,4036,4040],{"type":46,"tag":84,"props":4033,"children":4034},{"style":1528},[4035],{"type":52,"value":3738},{"type":46,"tag":84,"props":4037,"children":4038},{"style":126},[4039],{"type":52,"value":1548},{"type":46,"tag":84,"props":4041,"children":4042},{"style":115},[4043],{"type":52,"value":3933},{"type":46,"tag":84,"props":4045,"children":4046},{"class":86,"line":251},[4047,4052,4056,4060,4064,4068,4072],{"type":46,"tag":84,"props":4048,"children":4049},{"style":1528},[4050],{"type":52,"value":4051},"    synonyms",{"type":46,"tag":84,"props":4053,"children":4054},{"style":126},[4055],{"type":52,"value":1548},{"type":46,"tag":84,"props":4057,"children":4058},{"style":126},[4059],{"type":52,"value":3002},{"type":46,"tag":84,"props":4061,"children":4062},{"style":115},[4063],{"type":52,"value":3954},{"type":46,"tag":84,"props":4065,"children":4066},{"style":126},[4067],{"type":52,"value":3012},{"type":46,"tag":84,"props":4069,"children":4070},{"style":115},[4071],{"type":52,"value":3963},{"type":46,"tag":84,"props":4073,"children":4074},{"style":126},[4075],{"type":52,"value":3022},{"type":46,"tag":61,"props":4077,"children":4078},{},[],{"type":46,"tag":55,"props":4080,"children":4081},{},[4082,4087,4089,4094],{"type":46,"tag":284,"props":4083,"children":4084},{},[4085],{"type":52,"value":4086},"Derived measure",{"type":52,"value":4088}," (no ",{"type":46,"tag":80,"props":4090,"children":4092},{"className":4091},[],[4093],{"type":52,"value":3829},{"type":52,"value":4095},") — references other measures:",{"type":46,"tag":72,"props":4097,"children":4099},{"className":1517,"code":4098,"language":22,"meta":77,"style":77},"# Omni\ngross_margin:\n  sql: ${total_sale_price} - ${total_cost}\n  label: Gross Margin\n",[4100],{"type":46,"tag":80,"props":4101,"children":4102},{"__ignoreMap":77},[4103,4110,4122,4138],{"type":46,"tag":84,"props":4104,"children":4105},{"class":86,"line":87},[4106],{"type":46,"tag":84,"props":4107,"children":4108},{"style":91},[4109],{"type":52,"value":2729},{"type":46,"tag":84,"props":4111,"children":4112},{"class":86,"line":97},[4113,4118],{"type":46,"tag":84,"props":4114,"children":4115},{"style":1528},[4116],{"type":52,"value":4117},"gross_margin",{"type":46,"tag":84,"props":4119,"children":4120},{"style":126},[4121],{"type":52,"value":1535},{"type":46,"tag":84,"props":4123,"children":4124},{"class":86,"line":33},[4125,4129,4133],{"type":46,"tag":84,"props":4126,"children":4127},{"style":1528},[4128],{"type":52,"value":2557},{"type":46,"tag":84,"props":4130,"children":4131},{"style":126},[4132],{"type":52,"value":1548},{"type":46,"tag":84,"props":4134,"children":4135},{"style":115},[4136],{"type":52,"value":4137}," ${total_sale_price} - ${total_cost}\n",{"type":46,"tag":84,"props":4139,"children":4140},{"class":86,"line":203},[4141,4145,4149],{"type":46,"tag":84,"props":4142,"children":4143},{"style":1528},[4144],{"type":52,"value":2584},{"type":46,"tag":84,"props":4146,"children":4147},{"style":126},[4148],{"type":52,"value":1548},{"type":46,"tag":84,"props":4150,"children":4151},{"style":115},[4152],{"type":52,"value":4153}," Gross Margin\n",{"type":46,"tag":72,"props":4155,"children":4157},{"className":1517,"code":4156,"language":22,"meta":77,"style":77},"# Semantic View output — top-level derived metric\nmetrics:\n  - name: gross_margin\n    expr: total_sale_price - total_cost\n",[4158],{"type":46,"tag":80,"props":4159,"children":4160},{"__ignoreMap":77},[4161,4169,4180,4200],{"type":46,"tag":84,"props":4162,"children":4163},{"class":86,"line":87},[4164],{"type":46,"tag":84,"props":4165,"children":4166},{"style":91},[4167],{"type":52,"value":4168},"# Semantic View output — top-level derived metric\n",{"type":46,"tag":84,"props":4170,"children":4171},{"class":86,"line":97},[4172,4176],{"type":46,"tag":84,"props":4173,"children":4174},{"style":1528},[4175],{"type":52,"value":3812},{"type":46,"tag":84,"props":4177,"children":4178},{"style":126},[4179],{"type":52,"value":1535},{"type":46,"tag":84,"props":4181,"children":4182},{"class":86,"line":33},[4183,4187,4191,4195],{"type":46,"tag":84,"props":4184,"children":4185},{"style":126},[4186],{"type":52,"value":2006},{"type":46,"tag":84,"props":4188,"children":4189},{"style":1528},[4190],{"type":52,"value":2637},{"type":46,"tag":84,"props":4192,"children":4193},{"style":126},[4194],{"type":52,"value":1548},{"type":46,"tag":84,"props":4196,"children":4197},{"style":115},[4198],{"type":52,"value":4199}," gross_margin\n",{"type":46,"tag":84,"props":4201,"children":4202},{"class":86,"line":203},[4203,4207,4211],{"type":46,"tag":84,"props":4204,"children":4205},{"style":1528},[4206],{"type":52,"value":2851},{"type":46,"tag":84,"props":4208,"children":4209},{"style":126},[4210],{"type":52,"value":1548},{"type":46,"tag":84,"props":4212,"children":4213},{"style":115},[4214],{"type":52,"value":4215}," total_sale_price - total_cost\n",{"type":46,"tag":61,"props":4217,"children":4218},{},[],{"type":46,"tag":55,"props":4220,"children":4221},{},[4222,4227,4229,4234],{"type":46,"tag":284,"props":4223,"children":4224},{},[4225],{"type":52,"value":4226},"Filtered measure",{"type":52,"value":4228}," → wraps in ",{"type":46,"tag":80,"props":4230,"children":4232},{"className":4231},[],[4233],{"type":52,"value":2896},{"type":52,"value":1548},{"type":46,"tag":72,"props":4236,"children":4238},{"className":1517,"code":4237,"language":22,"meta":77,"style":77},"# Omni\ncalifornia_revenue:\n  sql: ${sale_price}\n  aggregate_type: sum\n  filters:\n    users.state:\n      is: California\n",[4239],{"type":46,"tag":80,"props":4240,"children":4241},{"__ignoreMap":77},[4242,4249,4261,4276,4291,4303,4315],{"type":46,"tag":84,"props":4243,"children":4244},{"class":86,"line":87},[4245],{"type":46,"tag":84,"props":4246,"children":4247},{"style":91},[4248],{"type":52,"value":2729},{"type":46,"tag":84,"props":4250,"children":4251},{"class":86,"line":97},[4252,4257],{"type":46,"tag":84,"props":4253,"children":4254},{"style":1528},[4255],{"type":52,"value":4256},"california_revenue",{"type":46,"tag":84,"props":4258,"children":4259},{"style":126},[4260],{"type":52,"value":1535},{"type":46,"tag":84,"props":4262,"children":4263},{"class":86,"line":33},[4264,4268,4272],{"type":46,"tag":84,"props":4265,"children":4266},{"style":1528},[4267],{"type":52,"value":2557},{"type":46,"tag":84,"props":4269,"children":4270},{"style":126},[4271],{"type":52,"value":1548},{"type":46,"tag":84,"props":4273,"children":4274},{"style":115},[4275],{"type":52,"value":3884},{"type":46,"tag":84,"props":4277,"children":4278},{"class":86,"line":203},[4279,4283,4287],{"type":46,"tag":84,"props":4280,"children":4281},{"style":1528},[4282],{"type":52,"value":3892},{"type":46,"tag":84,"props":4284,"children":4285},{"style":126},[4286],{"type":52,"value":1548},{"type":46,"tag":84,"props":4288,"children":4289},{"style":115},[4290],{"type":52,"value":3901},{"type":46,"tag":84,"props":4292,"children":4293},{"class":86,"line":241},[4294,4299],{"type":46,"tag":84,"props":4295,"children":4296},{"style":1528},[4297],{"type":52,"value":4298},"  filters",{"type":46,"tag":84,"props":4300,"children":4301},{"style":126},[4302],{"type":52,"value":1535},{"type":46,"tag":84,"props":4304,"children":4305},{"class":86,"line":251},[4306,4311],{"type":46,"tag":84,"props":4307,"children":4308},{"style":1528},[4309],{"type":52,"value":4310},"    users.state",{"type":46,"tag":84,"props":4312,"children":4313},{"style":126},[4314],{"type":52,"value":1535},{"type":46,"tag":84,"props":4316,"children":4317},{"class":86,"line":260},[4318,4323,4327],{"type":46,"tag":84,"props":4319,"children":4320},{"style":1528},[4321],{"type":52,"value":4322},"      is",{"type":46,"tag":84,"props":4324,"children":4325},{"style":126},[4326],{"type":52,"value":1548},{"type":46,"tag":84,"props":4328,"children":4329},{"style":115},[4330],{"type":52,"value":4331}," California\n",{"type":46,"tag":72,"props":4333,"children":4335},{"className":3108,"code":4334,"language":3110,"meta":77,"style":77},"-- expr value\nCOALESCE(SUM(CASE WHEN \"users\".\"STATE\" = 'California' THEN \"SALE_PRICE\" ELSE NULL END), 0)\n",[4336],{"type":46,"tag":80,"props":4337,"children":4338},{"__ignoreMap":77},[4339,4346],{"type":46,"tag":84,"props":4340,"children":4341},{"class":86,"line":87},[4342],{"type":46,"tag":84,"props":4343,"children":4344},{},[4345],{"type":52,"value":3122},{"type":46,"tag":84,"props":4347,"children":4348},{"class":86,"line":97},[4349],{"type":46,"tag":84,"props":4350,"children":4351},{},[4352],{"type":52,"value":4353},"COALESCE(SUM(CASE WHEN \"users\".\"STATE\" = 'California' THEN \"SALE_PRICE\" ELSE NULL END), 0)\n",{"type":46,"tag":55,"props":4355,"children":4356},{},[4357],{"type":52,"value":4358},"Array and boolean filter variants:",{"type":46,"tag":72,"props":4360,"children":4362},{"className":1517,"code":4361,"language":22,"meta":77,"style":77},"# is: [New York, New Jersey]  →  \"STATE\" IN ('New York', 'New Jersey')\n# is: true                    →  field IS TRUE\n",[4363],{"type":46,"tag":80,"props":4364,"children":4365},{"__ignoreMap":77},[4366,4374],{"type":46,"tag":84,"props":4367,"children":4368},{"class":86,"line":87},[4369],{"type":46,"tag":84,"props":4370,"children":4371},{"style":91},[4372],{"type":52,"value":4373},"# is: [New York, New Jersey]  →  \"STATE\" IN ('New York', 'New Jersey')\n",{"type":46,"tag":84,"props":4375,"children":4376},{"class":86,"line":97},[4377],{"type":46,"tag":84,"props":4378,"children":4379},{"style":91},[4380],{"type":52,"value":4381},"# is: true                    →  field IS TRUE\n",{"type":46,"tag":61,"props":4383,"children":4384},{},[],{"type":46,"tag":504,"props":4386,"children":4388},{"id":4387},"filter-only-fields-templated-filters",[4389],{"type":52,"value":4390},"Filter-Only Fields (Templated Filters)",{"type":46,"tag":55,"props":4392,"children":4393},{},[4394,4396,4402],{"type":52,"value":4395},"Filter-only fields in Omni are parameterized inputs defined in a ",{"type":46,"tag":80,"props":4397,"children":4399},{"className":4398},[],[4400],{"type":52,"value":4401},"filters:",{"type":52,"value":4403}," block in a view YAML. They don't map to a real column — they inject dynamic values into other fields' SQL at query time via Mustache templates. Snowflake Semantic Views have no equivalent runtime parameter system, so these must be resolved to static SQL during conversion.",{"type":46,"tag":55,"props":4405,"children":4406},{},[4407],{"type":46,"tag":284,"props":4408,"children":4409},{},[4410],{"type":52,"value":4411},"Example filter-only field definition:",{"type":46,"tag":72,"props":4413,"children":4415},{"className":1517,"code":4414,"language":22,"meta":77,"style":77},"# In a view file — under a top-level `filters:` key\nfilters:\n  status_filter:\n    type: string\n    default_filter:\n      is: \"Complete\"\n  order_date_filter:\n    type: timestamp\n",[4416],{"type":46,"tag":80,"props":4417,"children":4418},{"__ignoreMap":77},[4419,4427,4438,4450,4467,4479,4503,4515],{"type":46,"tag":84,"props":4420,"children":4421},{"class":86,"line":87},[4422],{"type":46,"tag":84,"props":4423,"children":4424},{"style":91},[4425],{"type":52,"value":4426},"# In a view file — under a top-level `filters:` key\n",{"type":46,"tag":84,"props":4428,"children":4429},{"class":86,"line":97},[4430,4434],{"type":46,"tag":84,"props":4431,"children":4432},{"style":1528},[4433],{"type":52,"value":3690},{"type":46,"tag":84,"props":4435,"children":4436},{"style":126},[4437],{"type":52,"value":1535},{"type":46,"tag":84,"props":4439,"children":4440},{"class":86,"line":33},[4441,4446],{"type":46,"tag":84,"props":4442,"children":4443},{"style":1528},[4444],{"type":52,"value":4445},"  status_filter",{"type":46,"tag":84,"props":4447,"children":4448},{"style":126},[4449],{"type":52,"value":1535},{"type":46,"tag":84,"props":4451,"children":4452},{"class":86,"line":203},[4453,4458,4462],{"type":46,"tag":84,"props":4454,"children":4455},{"style":1528},[4456],{"type":52,"value":4457},"    type",{"type":46,"tag":84,"props":4459,"children":4460},{"style":126},[4461],{"type":52,"value":1548},{"type":46,"tag":84,"props":4463,"children":4464},{"style":115},[4465],{"type":52,"value":4466}," string\n",{"type":46,"tag":84,"props":4468,"children":4469},{"class":86,"line":241},[4470,4475],{"type":46,"tag":84,"props":4471,"children":4472},{"style":1528},[4473],{"type":52,"value":4474},"    default_filter",{"type":46,"tag":84,"props":4476,"children":4477},{"style":126},[4478],{"type":52,"value":1535},{"type":46,"tag":84,"props":4480,"children":4481},{"class":86,"line":251},[4482,4486,4490,4494,4499],{"type":46,"tag":84,"props":4483,"children":4484},{"style":1528},[4485],{"type":52,"value":4322},{"type":46,"tag":84,"props":4487,"children":4488},{"style":126},[4489],{"type":52,"value":1548},{"type":46,"tag":84,"props":4491,"children":4492},{"style":126},[4493],{"type":52,"value":149},{"type":46,"tag":84,"props":4495,"children":4496},{"style":115},[4497],{"type":52,"value":4498},"Complete",{"type":46,"tag":84,"props":4500,"children":4501},{"style":126},[4502],{"type":52,"value":159},{"type":46,"tag":84,"props":4504,"children":4505},{"class":86,"line":260},[4506,4511],{"type":46,"tag":84,"props":4507,"children":4508},{"style":1528},[4509],{"type":52,"value":4510},"  order_date_filter",{"type":46,"tag":84,"props":4512,"children":4513},{"style":126},[4514],{"type":52,"value":1535},{"type":46,"tag":84,"props":4516,"children":4517},{"class":86,"line":598},[4518,4522,4526],{"type":46,"tag":84,"props":4519,"children":4520},{"style":1528},[4521],{"type":52,"value":4457},{"type":46,"tag":84,"props":4523,"children":4524},{"style":126},[4525],{"type":52,"value":1548},{"type":46,"tag":84,"props":4527,"children":4528},{"style":115},[4529],{"type":52,"value":4530}," timestamp\n",{"type":46,"tag":61,"props":4532,"children":4533},{},[],{"type":46,"tag":55,"props":4535,"children":4536},{},[4537],{"type":46,"tag":284,"props":4538,"children":4539},{},[4540],{"type":52,"value":4541},"Two reference patterns to detect in dimension\u002Fmeasure SQL:",{"type":46,"tag":55,"props":4543,"children":4544},{},[4545],{"type":46,"tag":284,"props":4546,"children":4547},{},[4548],{"type":52,"value":4549},"Pattern 1 — Block (conditional) syntax:",{"type":46,"tag":72,"props":4551,"children":4553},{"className":3108,"code":4552,"language":3110,"meta":77,"style":77},"{{# order_items.status_filter.filter }} order_items.status {{\u002F order_items.status_filter.filter }}\n",[4554],{"type":46,"tag":80,"props":4555,"children":4556},{"__ignoreMap":77},[4557],{"type":46,"tag":84,"props":4558,"children":4559},{"class":86,"line":87},[4560],{"type":46,"tag":84,"props":4561,"children":4562},{},[4563],{"type":52,"value":4552},{"type":46,"tag":55,"props":4565,"children":4566},{},[4567,4569,4575],{"type":52,"value":4568},"The block is conditionally active when the user applies a filter. A ",{"type":46,"tag":80,"props":4570,"children":4572},{"className":4571},[],[4573],{"type":52,"value":4574},"{{^ }}",{"type":52,"value":4576}," block is the fallback when no filter is applied:",{"type":46,"tag":72,"props":4578,"children":4580},{"className":3108,"code":4579,"language":3110,"meta":77,"style":77},"{{# order_items.status_filter.filter }} order_items.status {{\u002F order_items.status_filter.filter }}\n{{^ order_items.status_filter.filter }} 1=1 {{\u002F order_items.status_filter.filter }}\n",[4581],{"type":46,"tag":80,"props":4582,"children":4583},{"__ignoreMap":77},[4584,4591],{"type":46,"tag":84,"props":4585,"children":4586},{"class":86,"line":87},[4587],{"type":46,"tag":84,"props":4588,"children":4589},{},[4590],{"type":52,"value":4552},{"type":46,"tag":84,"props":4592,"children":4593},{"class":86,"line":97},[4594],{"type":46,"tag":84,"props":4595,"children":4596},{},[4597],{"type":52,"value":4598},"{{^ order_items.status_filter.filter }} 1=1 {{\u002F order_items.status_filter.filter }}\n",{"type":46,"tag":55,"props":4600,"children":4601},{},[4602],{"type":46,"tag":284,"props":4603,"children":4604},{},[4605],{"type":52,"value":4606},"Pattern 2 — Value (direct injection) syntax:",{"type":46,"tag":72,"props":4608,"children":4610},{"className":3108,"code":4609,"language":3110,"meta":77,"style":77},"-- Direct value substitution\nDATE_TRUNC('day', created_at) >= '{{filters.order_items.order_date_filter.value}}'\n\n-- Range variants for date filters\ncreated_at BETWEEN '{{filters.order_items.order_date_filter.range_start}}' AND '{{filters.order_items.order_date_filter.range_end}}'\n",[4611],{"type":46,"tag":80,"props":4612,"children":4613},{"__ignoreMap":77},[4614,4622,4630,4637,4645],{"type":46,"tag":84,"props":4615,"children":4616},{"class":86,"line":87},[4617],{"type":46,"tag":84,"props":4618,"children":4619},{},[4620],{"type":52,"value":4621},"-- Direct value substitution\n",{"type":46,"tag":84,"props":4623,"children":4624},{"class":86,"line":97},[4625],{"type":46,"tag":84,"props":4626,"children":4627},{},[4628],{"type":52,"value":4629},"DATE_TRUNC('day', created_at) >= '{{filters.order_items.order_date_filter.value}}'\n",{"type":46,"tag":84,"props":4631,"children":4632},{"class":86,"line":33},[4633],{"type":46,"tag":84,"props":4634,"children":4635},{"emptyLinePlaceholder":245},[4636],{"type":52,"value":248},{"type":46,"tag":84,"props":4638,"children":4639},{"class":86,"line":203},[4640],{"type":46,"tag":84,"props":4641,"children":4642},{},[4643],{"type":52,"value":4644},"-- Range variants for date filters\n",{"type":46,"tag":84,"props":4646,"children":4647},{"class":86,"line":241},[4648],{"type":46,"tag":84,"props":4649,"children":4650},{},[4651],{"type":52,"value":4652},"created_at BETWEEN '{{filters.order_items.order_date_filter.range_start}}' AND '{{filters.order_items.order_date_filter.range_end}}'\n",{"type":46,"tag":55,"props":4654,"children":4655},{},[4656],{"type":52,"value":4657},"Scan all dimension and measure SQL for both patterns using these signatures:",{"type":46,"tag":435,"props":4659,"children":4660},{},[4661,4672,4683,4694],{"type":46,"tag":439,"props":4662,"children":4663},{},[4664,4670],{"type":46,"tag":80,"props":4665,"children":4667},{"className":4666},[],[4668],{"type":52,"value":4669},"{{# \u003Cview>.\u003Cfield>.filter }}",{"type":52,"value":4671}," — block open",{"type":46,"tag":439,"props":4673,"children":4674},{},[4675,4681],{"type":46,"tag":80,"props":4676,"children":4678},{"className":4677},[],[4679],{"type":52,"value":4680},"{{^ \u003Cview>.\u003Cfield>.filter }}",{"type":52,"value":4682}," — block fallback open",{"type":46,"tag":439,"props":4684,"children":4685},{},[4686,4692],{"type":46,"tag":80,"props":4687,"children":4689},{"className":4688},[],[4690],{"type":52,"value":4691},"{{filters.\u003Cview>.\u003Cfield>.value}}",{"type":52,"value":4693}," — direct value",{"type":46,"tag":439,"props":4695,"children":4696},{},[4697,4703,4705,4711],{"type":46,"tag":80,"props":4698,"children":4700},{"className":4699},[],[4701],{"type":52,"value":4702},"{{filters.\u003Cview>.\u003Cfield>.range_start}}",{"type":52,"value":4704}," \u002F ",{"type":46,"tag":80,"props":4706,"children":4708},{"className":4707},[],[4709],{"type":52,"value":4710},"{{filters.\u003Cview>.\u003Cfield>.range_end}}",{"type":52,"value":4712}," — date ranges",{"type":46,"tag":61,"props":4714,"children":4715},{},[],{"type":46,"tag":55,"props":4717,"children":4718},{},[4719],{"type":46,"tag":284,"props":4720,"children":4721},{},[4722],{"type":52,"value":4723},"Resolution logic — apply in order for each reference found:",{"type":46,"tag":55,"props":4725,"children":4726},{},[4727],{"type":46,"tag":284,"props":4728,"children":4729},{},[4730,4732,4737],{"type":52,"value":4731},"Step 1 — Inline ",{"type":46,"tag":80,"props":4733,"children":4735},{"className":4734},[],[4736],{"type":52,"value":4574},{"type":52,"value":4738}," fallback (block pattern only):",{"type":46,"tag":55,"props":4740,"children":4741},{},[4742,4744,4750],{"type":52,"value":4743},"If the SQL contains a ",{"type":46,"tag":80,"props":4745,"children":4747},{"className":4746},[],[4748],{"type":52,"value":4749},"{{^ view.field.filter }}",{"type":52,"value":4751}," fallback block, use the fallback expression as the static SQL — it's what executes when no filter is applied.",{"type":46,"tag":72,"props":4753,"children":4755},{"className":3108,"code":4754,"language":3110,"meta":77,"style":77},"-- Input\n{{# order_items.status_filter.filter }} order_items.status {{\u002F order_items.status_filter.filter }}\n{{^ order_items.status_filter.filter }} 1=1 {{\u002F order_items.status_filter.filter }}\n\n-- Resolved static SQL\n1=1\n",[4756],{"type":46,"tag":80,"props":4757,"children":4758},{"__ignoreMap":77},[4759,4767,4774,4781,4788,4796],{"type":46,"tag":84,"props":4760,"children":4761},{"class":86,"line":87},[4762],{"type":46,"tag":84,"props":4763,"children":4764},{},[4765],{"type":52,"value":4766},"-- Input\n",{"type":46,"tag":84,"props":4768,"children":4769},{"class":86,"line":97},[4770],{"type":46,"tag":84,"props":4771,"children":4772},{},[4773],{"type":52,"value":4552},{"type":46,"tag":84,"props":4775,"children":4776},{"class":86,"line":33},[4777],{"type":46,"tag":84,"props":4778,"children":4779},{},[4780],{"type":52,"value":4598},{"type":46,"tag":84,"props":4782,"children":4783},{"class":86,"line":203},[4784],{"type":46,"tag":84,"props":4785,"children":4786},{"emptyLinePlaceholder":245},[4787],{"type":52,"value":248},{"type":46,"tag":84,"props":4789,"children":4790},{"class":86,"line":241},[4791],{"type":46,"tag":84,"props":4792,"children":4793},{},[4794],{"type":52,"value":4795},"-- Resolved static SQL\n",{"type":46,"tag":84,"props":4797,"children":4798},{"class":86,"line":251},[4799],{"type":46,"tag":84,"props":4800,"children":4801},{},[4802],{"type":52,"value":4803},"1=1\n",{"type":46,"tag":55,"props":4805,"children":4806},{},[4807],{"type":46,"tag":284,"props":4808,"children":4809},{},[4810,4812,4818],{"type":52,"value":4811},"Step 2 — ",{"type":46,"tag":80,"props":4813,"children":4815},{"className":4814},[],[4816],{"type":52,"value":4817},"default_filter",{"type":52,"value":4819}," on the filter field definition:",{"type":46,"tag":55,"props":4821,"children":4822},{},[4823,4825,4830],{"type":52,"value":4824},"Find the referenced filter-only field in the view YAML and check for a ",{"type":46,"tag":80,"props":4826,"children":4828},{"className":4827},[],[4829],{"type":52,"value":4817},{"type":52,"value":4831}," property. Render it as a static SQL condition:",{"type":46,"tag":1405,"props":4833,"children":4834},{},[4835,4856],{"type":46,"tag":1409,"props":4836,"children":4837},{},[4838],{"type":46,"tag":1413,"props":4839,"children":4840},{},[4841,4851],{"type":46,"tag":1417,"props":4842,"children":4843},{},[4844,4849],{"type":46,"tag":80,"props":4845,"children":4847},{"className":4846},[],[4848],{"type":52,"value":4817},{"type":52,"value":4850}," value",{"type":46,"tag":1417,"props":4852,"children":4853},{},[4854],{"type":52,"value":4855},"Rendered SQL",{"type":46,"tag":1433,"props":4857,"children":4858},{},[4859,4880,4901,4922],{"type":46,"tag":1413,"props":4860,"children":4861},{},[4862,4871],{"type":46,"tag":1440,"props":4863,"children":4864},{},[4865],{"type":46,"tag":80,"props":4866,"children":4868},{"className":4867},[],[4869],{"type":52,"value":4870},"is: \"Complete\"",{"type":46,"tag":1440,"props":4872,"children":4873},{},[4874],{"type":46,"tag":80,"props":4875,"children":4877},{"className":4876},[],[4878],{"type":52,"value":4879},"field = 'Complete'",{"type":46,"tag":1413,"props":4881,"children":4882},{},[4883,4892],{"type":46,"tag":1440,"props":4884,"children":4885},{},[4886],{"type":46,"tag":80,"props":4887,"children":4889},{"className":4888},[],[4890],{"type":52,"value":4891},"is: [\"New York\", \"CA\"]",{"type":46,"tag":1440,"props":4893,"children":4894},{},[4895],{"type":46,"tag":80,"props":4896,"children":4898},{"className":4897},[],[4899],{"type":52,"value":4900},"field IN ('New York', 'CA')",{"type":46,"tag":1413,"props":4902,"children":4903},{},[4904,4913],{"type":46,"tag":1440,"props":4905,"children":4906},{},[4907],{"type":46,"tag":80,"props":4908,"children":4910},{"className":4909},[],[4911],{"type":52,"value":4912},"is: true",{"type":46,"tag":1440,"props":4914,"children":4915},{},[4916],{"type":46,"tag":80,"props":4917,"children":4919},{"className":4918},[],[4920],{"type":52,"value":4921},"field IS TRUE",{"type":46,"tag":1413,"props":4923,"children":4924},{},[4925,4934],{"type":46,"tag":1440,"props":4926,"children":4927},{},[4928],{"type":46,"tag":80,"props":4929,"children":4931},{"className":4930},[],[4932],{"type":52,"value":4933},"greater_than: 100",{"type":46,"tag":1440,"props":4935,"children":4936},{},[4937],{"type":46,"tag":80,"props":4938,"children":4940},{"className":4939},[],[4941],{"type":52,"value":4942},"field > 100",{"type":46,"tag":55,"props":4944,"children":4945},{},[4946,4947,4952],{"type":52,"value":495},{"type":46,"tag":284,"props":4948,"children":4949},{},[4950],{"type":52,"value":4951},"value syntax",{"type":52,"value":4953},", substitute the rendered scalar value directly into the SQL string:",{"type":46,"tag":72,"props":4955,"children":4957},{"className":3108,"code":4956,"language":3110,"meta":77,"style":77},"-- Input\nDATE_TRUNC('day', created_at) >= '{{filters.order_items.order_date_filter.value}}'\n\n-- default_filter: is: \"2024-01-01\"\n-- Resolved\nDATE_TRUNC('day', created_at) >= '2024-01-01'\n",[4958],{"type":46,"tag":80,"props":4959,"children":4960},{"__ignoreMap":77},[4961,4968,4975,4982,4990,4998],{"type":46,"tag":84,"props":4962,"children":4963},{"class":86,"line":87},[4964],{"type":46,"tag":84,"props":4965,"children":4966},{},[4967],{"type":52,"value":4766},{"type":46,"tag":84,"props":4969,"children":4970},{"class":86,"line":97},[4971],{"type":46,"tag":84,"props":4972,"children":4973},{},[4974],{"type":52,"value":4629},{"type":46,"tag":84,"props":4976,"children":4977},{"class":86,"line":33},[4978],{"type":46,"tag":84,"props":4979,"children":4980},{"emptyLinePlaceholder":245},[4981],{"type":52,"value":248},{"type":46,"tag":84,"props":4983,"children":4984},{"class":86,"line":203},[4985],{"type":46,"tag":84,"props":4986,"children":4987},{},[4988],{"type":52,"value":4989},"-- default_filter: is: \"2024-01-01\"\n",{"type":46,"tag":84,"props":4991,"children":4992},{"class":86,"line":241},[4993],{"type":46,"tag":84,"props":4994,"children":4995},{},[4996],{"type":52,"value":4997},"-- Resolved\n",{"type":46,"tag":84,"props":4999,"children":5000},{"class":86,"line":251},[5001],{"type":46,"tag":84,"props":5002,"children":5003},{},[5004],{"type":52,"value":5005},"DATE_TRUNC('day', created_at) >= '2024-01-01'\n",{"type":46,"tag":55,"props":5007,"children":5008},{},[5009,5010,5015,5017,5023,5024,5030,5032,5037],{"type":52,"value":495},{"type":46,"tag":284,"props":5011,"children":5012},{},[5013],{"type":52,"value":5014},"range syntax",{"type":52,"value":5016},", use ",{"type":46,"tag":80,"props":5018,"children":5020},{"className":5019},[],[5021],{"type":52,"value":5022},"range_start",{"type":52,"value":4704},{"type":46,"tag":80,"props":5025,"children":5027},{"className":5026},[],[5028],{"type":52,"value":5029},"range_end",{"type":52,"value":5031}," from the ",{"type":46,"tag":80,"props":5033,"children":5035},{"className":5034},[],[5036],{"type":52,"value":4817},{"type":52,"value":5038}," if defined, otherwise warn the user.",{"type":46,"tag":55,"props":5040,"children":5041},{},[5042],{"type":46,"tag":284,"props":5043,"children":5044},{},[5045,5047,5052],{"type":52,"value":5046},"Step 3 — No fallback and no ",{"type":46,"tag":80,"props":5048,"children":5050},{"className":5049},[],[5051],{"type":52,"value":4817},{"type":52,"value":5053}," — warn the user:",{"type":46,"tag":277,"props":5055,"children":5056},{},[5057,5092],{"type":46,"tag":55,"props":5058,"children":5059},{},[5060,5062,5068,5070,5076,5078,5083,5085,5090],{"type":52,"value":5061},"⚠️ Field ",{"type":46,"tag":80,"props":5063,"children":5065},{"className":5064},[],[5066],{"type":52,"value":5067},"\u003Cview>.\u003Cfield>",{"type":52,"value":5069}," references filter-only field ",{"type":46,"tag":80,"props":5071,"children":5073},{"className":5072},[],[5074],{"type":52,"value":5075},"\u003Cview>.\u003Cfilter_field>",{"type":52,"value":5077}," but has no ",{"type":46,"tag":80,"props":5079,"children":5081},{"className":5080},[],[5082],{"type":52,"value":4817},{"type":52,"value":5084}," and no inline ",{"type":46,"tag":80,"props":5086,"children":5088},{"className":5087},[],[5089],{"type":52,"value":4574},{"type":52,"value":5091}," fallback. It cannot be statically resolved for a Snowflake Semantic View. Options:",{"type":46,"tag":989,"props":5093,"children":5094},{},[5095,5100,5105],{"type":46,"tag":439,"props":5096,"children":5097},{},[5098],{"type":52,"value":5099},"Skip this field from the output entirely.",{"type":46,"tag":439,"props":5101,"children":5102},{},[5103],{"type":52,"value":5104},"Ask the user what static value or condition to hardcode.",{"type":46,"tag":439,"props":5106,"children":5107},{},[5108,5110,5116],{"type":52,"value":5109},"Use ",{"type":46,"tag":80,"props":5111,"children":5113},{"className":5112},[],[5114],{"type":52,"value":5115},"1=1",{"type":52,"value":5117}," (always-true no-op) to preserve the field shape without the filter effect.",{"type":46,"tag":55,"props":5119,"children":5120},{},[5121],{"type":46,"tag":284,"props":5122,"children":5123},{},[5124],{"type":52,"value":5125},"Summary decision tree:",{"type":46,"tag":72,"props":5127,"children":5130},{"className":5128,"code":5129,"language":52},[468],"Does the SQL reference a filter-only field?\n  (via {{# view.field.filter }} OR {{filters.view.field.value}} etc.)\n  │\n  ├── Block pattern → Does SQL have {{^ view.field.filter }} fallback?\n  │     ├── Yes → Use fallback expression as static SQL\n  │     └── No  → Go to default_filter check ↓\n  │\n  ├── Value pattern → Go to default_filter check ↓\n  │\n  └── default_filter check:\n        ├── Yes → Render default_filter as static SQL \u002F value substitution\n        └── No  → Warn user, ask how to proceed\n",[5131],{"type":46,"tag":80,"props":5132,"children":5133},{"__ignoreMap":77},[5134],{"type":52,"value":5129},{"type":46,"tag":277,"props":5136,"children":5137},{},[5138],{"type":46,"tag":55,"props":5139,"children":5140},{},[5141,5143,5148],{"type":52,"value":5142},"⚠️ Filter-only fields themselves are ",{"type":46,"tag":284,"props":5144,"children":5145},{},[5146],{"type":52,"value":5147},"never",{"type":52,"value":5149}," emitted as dimensions, metrics, or filters in the Semantic View output — they exist only to parameterize other fields' SQL.",{"type":46,"tag":61,"props":5151,"children":5152},{},[],{"type":46,"tag":504,"props":5154,"children":5156},{"id":5155},"ai-context-module_custom_instructions",[5157,5159],{"type":52,"value":5158},"AI Context → ",{"type":46,"tag":80,"props":5160,"children":5162},{"className":5161},[],[5163],{"type":52,"value":5164},"module_custom_instructions",{"type":46,"tag":55,"props":5166,"children":5167},{},[5168,5170,5176],{"type":52,"value":5169},"If the topic has an ",{"type":46,"tag":80,"props":5171,"children":5173},{"className":5172},[],[5174],{"type":52,"value":5175},"ai_context",{"type":52,"value":5177}," parameter, include it as:",{"type":46,"tag":72,"props":5179,"children":5181},{"className":1517,"code":5180,"language":22,"meta":77,"style":77},"module_custom_instructions:\n  question_categorization: \u003Cai_context value>\n",[5182],{"type":46,"tag":80,"props":5183,"children":5184},{"__ignoreMap":77},[5185,5196],{"type":46,"tag":84,"props":5186,"children":5187},{"class":86,"line":87},[5188,5192],{"type":46,"tag":84,"props":5189,"children":5190},{"style":1528},[5191],{"type":52,"value":5164},{"type":46,"tag":84,"props":5193,"children":5194},{"style":126},[5195],{"type":52,"value":1535},{"type":46,"tag":84,"props":5197,"children":5198},{"class":86,"line":97},[5199,5204,5208],{"type":46,"tag":84,"props":5200,"children":5201},{"style":1528},[5202],{"type":52,"value":5203},"  question_categorization",{"type":46,"tag":84,"props":5205,"children":5206},{"style":126},[5207],{"type":52,"value":1548},{"type":46,"tag":84,"props":5209,"children":5210},{"style":115},[5211],{"type":52,"value":5212}," \u003Cai_context value>\n",{"type":46,"tag":61,"props":5214,"children":5215},{},[],{"type":46,"tag":504,"props":5217,"children":5219},{"id":5218},"sample-queries-verified_queries",[5220,5222],{"type":52,"value":5221},"Sample Queries → ",{"type":46,"tag":80,"props":5223,"children":5225},{"className":5224},[],[5226],{"type":52,"value":5227},"verified_queries",{"type":46,"tag":55,"props":5229,"children":5230},{},[5231,5233,5239,5241,5246,5248,5254,5256,5262,5264,5269],{"type":52,"value":5232},"Convert each entry under ",{"type":46,"tag":80,"props":5234,"children":5236},{"className":5235},[],[5237],{"type":52,"value":5238},"sample_queries",{"type":52,"value":5240}," into a SQL statement for ",{"type":46,"tag":80,"props":5242,"children":5244},{"className":5243},[],[5245],{"type":52,"value":5227},{"type":52,"value":5247},". Use the ",{"type":46,"tag":80,"props":5249,"children":5251},{"className":5250},[],[5252],{"type":52,"value":5253},"prompt",{"type":52,"value":5255}," as the ",{"type":46,"tag":80,"props":5257,"children":5259},{"className":5258},[],[5260],{"type":52,"value":5261},"question",{"type":52,"value":5263}," and the ",{"type":46,"tag":80,"props":5265,"children":5267},{"className":5266},[],[5268],{"type":52,"value":2502},{"type":52,"value":5270}," as context for writing the SQL.",{"type":46,"tag":277,"props":5272,"children":5273},{},[5274],{"type":46,"tag":55,"props":5275,"children":5276},{},[5277,5278,5282],{"type":52,"value":960},{"type":46,"tag":284,"props":5279,"children":5280},{},[5281],{"type":52,"value":965},{"type":52,"value":5283}," — Review all dimensions, measures, and relationships with the user before generating the final output.",{"type":46,"tag":61,"props":5285,"children":5286},{},[],{"type":46,"tag":423,"props":5288,"children":5290},{"id":5289},"step-7-generate-and-execute-the-semantic-view",[5291],{"type":52,"value":5292},"Step 7 — Generate and Execute the Semantic View",{"type":46,"tag":504,"props":5294,"children":5296},{"id":5295},"output-yaml-structure",[5297],{"type":52,"value":5298},"Output YAML structure",{"type":46,"tag":72,"props":5300,"children":5302},{"className":1517,"code":5301,"language":22,"meta":77,"style":77},"name: \u003Cname>\ndescription: \u003Cstring>\n\ntables:\n  - name: \u003Cname>\n    description: \u003Cstring>\n    base_table:\n      database: \u003Cdatabase>\n      schema: \u003Cschema>\n      table: \u003Ctable name>\n\n    dimensions:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n        data_type: \u003Cdata type>\n        unique: \u003Cboolean>\n\n    time_dimensions:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n        data_type: \u003Cdata type>\n\n    facts:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n        data_type: \u003Cdata type>\n\n    metrics:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n\n    filters:\n      - name: \u003Cname>\n        synonyms: [ \u003Cstring>, ... ]\n        description: \u003Cstring>\n        expr: \u003CSQL expression>\n\nrelationships:\n  - name: \u003Cstring>\n    left_table: \u003Ctable>\n    right_table: \u003Ctable>\n    relationship_columns:\n      - left_column: \u003Ccolumn>\n        right_column: \u003Ccolumn>\n\nmetrics:\n  - name: \u003Cname>\n    synonyms: [ \u003Cstring>, ... ]\n    description: \u003Cstring>\n    expr: \u003CSQL expression>\n\nverified_queries:\n  - name: \u003Cstring>\n    question: \u003Cstring>\n    sql: \u003Cstring>\n    use_as_onboarding_question: \u003Cboolean>\n",[5303],{"type":46,"tag":80,"props":5304,"children":5305},{"__ignoreMap":77},[5306,5323,5339,5346,5358,5377,5392,5404,5421,5438,5455,5462,5474,5495,5530,5547,5565,5583,5601,5609,5622,5642,5674,5690,5706,5722,5730,5742,5762,5794,5810,5826,5842,5850,5863,5883,5915,5931,5947,5955,5968,5988,6020,6036,6052,6060,6073,6093,6111,6128,6141,6163,6180,6188,6200,6220,6252,6268,6284,6292,6304,6324,6341,6358],{"type":46,"tag":84,"props":5307,"children":5308},{"class":86,"line":87},[5309,5314,5318],{"type":46,"tag":84,"props":5310,"children":5311},{"style":1528},[5312],{"type":52,"value":5313},"name",{"type":46,"tag":84,"props":5315,"children":5316},{"style":126},[5317],{"type":52,"value":1548},{"type":46,"tag":84,"props":5319,"children":5320},{"style":115},[5321],{"type":52,"value":5322}," \u003Cname>\n",{"type":46,"tag":84,"props":5324,"children":5325},{"class":86,"line":97},[5326,5330,5334],{"type":46,"tag":84,"props":5327,"children":5328},{"style":1528},[5329],{"type":52,"value":2502},{"type":46,"tag":84,"props":5331,"children":5332},{"style":126},[5333],{"type":52,"value":1548},{"type":46,"tag":84,"props":5335,"children":5336},{"style":115},[5337],{"type":52,"value":5338}," \u003Cstring>\n",{"type":46,"tag":84,"props":5340,"children":5341},{"class":86,"line":33},[5342],{"type":46,"tag":84,"props":5343,"children":5344},{"emptyLinePlaceholder":245},[5345],{"type":52,"value":248},{"type":46,"tag":84,"props":5347,"children":5348},{"class":86,"line":203},[5349,5354],{"type":46,"tag":84,"props":5350,"children":5351},{"style":1528},[5352],{"type":52,"value":5353},"tables",{"type":46,"tag":84,"props":5355,"children":5356},{"style":126},[5357],{"type":52,"value":1535},{"type":46,"tag":84,"props":5359,"children":5360},{"class":86,"line":241},[5361,5365,5369,5373],{"type":46,"tag":84,"props":5362,"children":5363},{"style":126},[5364],{"type":52,"value":2006},{"type":46,"tag":84,"props":5366,"children":5367},{"style":1528},[5368],{"type":52,"value":2637},{"type":46,"tag":84,"props":5370,"children":5371},{"style":126},[5372],{"type":52,"value":1548},{"type":46,"tag":84,"props":5374,"children":5375},{"style":115},[5376],{"type":52,"value":5322},{"type":46,"tag":84,"props":5378,"children":5379},{"class":86,"line":251},[5380,5384,5388],{"type":46,"tag":84,"props":5381,"children":5382},{"style":1528},[5383],{"type":52,"value":3738},{"type":46,"tag":84,"props":5385,"children":5386},{"style":126},[5387],{"type":52,"value":1548},{"type":46,"tag":84,"props":5389,"children":5390},{"style":115},[5391],{"type":52,"value":5338},{"type":46,"tag":84,"props":5393,"children":5394},{"class":86,"line":260},[5395,5400],{"type":46,"tag":84,"props":5396,"children":5397},{"style":1528},[5398],{"type":52,"value":5399},"    base_table",{"type":46,"tag":84,"props":5401,"children":5402},{"style":126},[5403],{"type":52,"value":1535},{"type":46,"tag":84,"props":5405,"children":5406},{"class":86,"line":598},[5407,5412,5416],{"type":46,"tag":84,"props":5408,"children":5409},{"style":1528},[5410],{"type":52,"value":5411},"      database",{"type":46,"tag":84,"props":5413,"children":5414},{"style":126},[5415],{"type":52,"value":1548},{"type":46,"tag":84,"props":5417,"children":5418},{"style":115},[5419],{"type":52,"value":5420}," \u003Cdatabase>\n",{"type":46,"tag":84,"props":5422,"children":5423},{"class":86,"line":937},[5424,5429,5433],{"type":46,"tag":84,"props":5425,"children":5426},{"style":1528},[5427],{"type":52,"value":5428},"      schema",{"type":46,"tag":84,"props":5430,"children":5431},{"style":126},[5432],{"type":52,"value":1548},{"type":46,"tag":84,"props":5434,"children":5435},{"style":115},[5436],{"type":52,"value":5437}," \u003Cschema>\n",{"type":46,"tag":84,"props":5439,"children":5440},{"class":86,"line":946},[5441,5446,5450],{"type":46,"tag":84,"props":5442,"children":5443},{"style":1528},[5444],{"type":52,"value":5445},"      table",{"type":46,"tag":84,"props":5447,"children":5448},{"style":126},[5449],{"type":52,"value":1548},{"type":46,"tag":84,"props":5451,"children":5452},{"style":115},[5453],{"type":52,"value":5454}," \u003Ctable name>\n",{"type":46,"tag":84,"props":5456,"children":5457},{"class":86,"line":3073},[5458],{"type":46,"tag":84,"props":5459,"children":5460},{"emptyLinePlaceholder":245},[5461],{"type":52,"value":248},{"type":46,"tag":84,"props":5463,"children":5464},{"class":86,"line":3090},[5465,5470],{"type":46,"tag":84,"props":5466,"children":5467},{"style":1528},[5468],{"type":52,"value":5469},"    dimensions",{"type":46,"tag":84,"props":5471,"children":5472},{"style":126},[5473],{"type":52,"value":1535},{"type":46,"tag":84,"props":5475,"children":5477},{"class":86,"line":5476},13,[5478,5483,5487,5491],{"type":46,"tag":84,"props":5479,"children":5480},{"style":126},[5481],{"type":52,"value":5482},"      -",{"type":46,"tag":84,"props":5484,"children":5485},{"style":1528},[5486],{"type":52,"value":2637},{"type":46,"tag":84,"props":5488,"children":5489},{"style":126},[5490],{"type":52,"value":1548},{"type":46,"tag":84,"props":5492,"children":5493},{"style":115},[5494],{"type":52,"value":5322},{"type":46,"tag":84,"props":5496,"children":5498},{"class":86,"line":5497},14,[5499,5504,5508,5512,5517,5521,5526],{"type":46,"tag":84,"props":5500,"children":5501},{"style":1528},[5502],{"type":52,"value":5503},"        synonyms",{"type":46,"tag":84,"props":5505,"children":5506},{"style":126},[5507],{"type":52,"value":1548},{"type":46,"tag":84,"props":5509,"children":5510},{"style":126},[5511],{"type":52,"value":3002},{"type":46,"tag":84,"props":5513,"children":5514},{"style":115},[5515],{"type":52,"value":5516}," \u003Cstring>",{"type":46,"tag":84,"props":5518,"children":5519},{"style":126},[5520],{"type":52,"value":3012},{"type":46,"tag":84,"props":5522,"children":5523},{"style":3242},[5524],{"type":52,"value":5525}," ...",{"type":46,"tag":84,"props":5527,"children":5528},{"style":126},[5529],{"type":52,"value":3022},{"type":46,"tag":84,"props":5531,"children":5533},{"class":86,"line":5532},15,[5534,5539,5543],{"type":46,"tag":84,"props":5535,"children":5536},{"style":1528},[5537],{"type":52,"value":5538},"        description",{"type":46,"tag":84,"props":5540,"children":5541},{"style":126},[5542],{"type":52,"value":1548},{"type":46,"tag":84,"props":5544,"children":5545},{"style":115},[5546],{"type":52,"value":5338},{"type":46,"tag":84,"props":5548,"children":5550},{"class":86,"line":5549},16,[5551,5556,5560],{"type":46,"tag":84,"props":5552,"children":5553},{"style":1528},[5554],{"type":52,"value":5555},"        expr",{"type":46,"tag":84,"props":5557,"children":5558},{"style":126},[5559],{"type":52,"value":1548},{"type":46,"tag":84,"props":5561,"children":5562},{"style":115},[5563],{"type":52,"value":5564}," \u003CSQL expression>\n",{"type":46,"tag":84,"props":5566,"children":5568},{"class":86,"line":5567},17,[5569,5574,5578],{"type":46,"tag":84,"props":5570,"children":5571},{"style":1528},[5572],{"type":52,"value":5573},"        data_type",{"type":46,"tag":84,"props":5575,"children":5576},{"style":126},[5577],{"type":52,"value":1548},{"type":46,"tag":84,"props":5579,"children":5580},{"style":115},[5581],{"type":52,"value":5582}," \u003Cdata type>\n",{"type":46,"tag":84,"props":5584,"children":5586},{"class":86,"line":5585},18,[5587,5592,5596],{"type":46,"tag":84,"props":5588,"children":5589},{"style":1528},[5590],{"type":52,"value":5591},"        unique",{"type":46,"tag":84,"props":5593,"children":5594},{"style":126},[5595],{"type":52,"value":1548},{"type":46,"tag":84,"props":5597,"children":5598},{"style":115},[5599],{"type":52,"value":5600}," \u003Cboolean>\n",{"type":46,"tag":84,"props":5602,"children":5604},{"class":86,"line":5603},19,[5605],{"type":46,"tag":84,"props":5606,"children":5607},{"emptyLinePlaceholder":245},[5608],{"type":52,"value":248},{"type":46,"tag":84,"props":5610,"children":5612},{"class":86,"line":5611},20,[5613,5618],{"type":46,"tag":84,"props":5614,"children":5615},{"style":1528},[5616],{"type":52,"value":5617},"    time_dimensions",{"type":46,"tag":84,"props":5619,"children":5620},{"style":126},[5621],{"type":52,"value":1535},{"type":46,"tag":84,"props":5623,"children":5625},{"class":86,"line":5624},21,[5626,5630,5634,5638],{"type":46,"tag":84,"props":5627,"children":5628},{"style":126},[5629],{"type":52,"value":5482},{"type":46,"tag":84,"props":5631,"children":5632},{"style":1528},[5633],{"type":52,"value":2637},{"type":46,"tag":84,"props":5635,"children":5636},{"style":126},[5637],{"type":52,"value":1548},{"type":46,"tag":84,"props":5639,"children":5640},{"style":115},[5641],{"type":52,"value":5322},{"type":46,"tag":84,"props":5643,"children":5645},{"class":86,"line":5644},22,[5646,5650,5654,5658,5662,5666,5670],{"type":46,"tag":84,"props":5647,"children":5648},{"style":1528},[5649],{"type":52,"value":5503},{"type":46,"tag":84,"props":5651,"children":5652},{"style":126},[5653],{"type":52,"value":1548},{"type":46,"tag":84,"props":5655,"children":5656},{"style":126},[5657],{"type":52,"value":3002},{"type":46,"tag":84,"props":5659,"children":5660},{"style":115},[5661],{"type":52,"value":5516},{"type":46,"tag":84,"props":5663,"children":5664},{"style":126},[5665],{"type":52,"value":3012},{"type":46,"tag":84,"props":5667,"children":5668},{"style":3242},[5669],{"type":52,"value":5525},{"type":46,"tag":84,"props":5671,"children":5672},{"style":126},[5673],{"type":52,"value":3022},{"type":46,"tag":84,"props":5675,"children":5677},{"class":86,"line":5676},23,[5678,5682,5686],{"type":46,"tag":84,"props":5679,"children":5680},{"style":1528},[5681],{"type":52,"value":5538},{"type":46,"tag":84,"props":5683,"children":5684},{"style":126},[5685],{"type":52,"value":1548},{"type":46,"tag":84,"props":5687,"children":5688},{"style":115},[5689],{"type":52,"value":5338},{"type":46,"tag":84,"props":5691,"children":5693},{"class":86,"line":5692},24,[5694,5698,5702],{"type":46,"tag":84,"props":5695,"children":5696},{"style":1528},[5697],{"type":52,"value":5555},{"type":46,"tag":84,"props":5699,"children":5700},{"style":126},[5701],{"type":52,"value":1548},{"type":46,"tag":84,"props":5703,"children":5704},{"style":115},[5705],{"type":52,"value":5564},{"type":46,"tag":84,"props":5707,"children":5709},{"class":86,"line":5708},25,[5710,5714,5718],{"type":46,"tag":84,"props":5711,"children":5712},{"style":1528},[5713],{"type":52,"value":5573},{"type":46,"tag":84,"props":5715,"children":5716},{"style":126},[5717],{"type":52,"value":1548},{"type":46,"tag":84,"props":5719,"children":5720},{"style":115},[5721],{"type":52,"value":5582},{"type":46,"tag":84,"props":5723,"children":5725},{"class":86,"line":5724},26,[5726],{"type":46,"tag":84,"props":5727,"children":5728},{"emptyLinePlaceholder":245},[5729],{"type":52,"value":248},{"type":46,"tag":84,"props":5731,"children":5732},{"class":86,"line":29},[5733,5738],{"type":46,"tag":84,"props":5734,"children":5735},{"style":1528},[5736],{"type":52,"value":5737},"    facts",{"type":46,"tag":84,"props":5739,"children":5740},{"style":126},[5741],{"type":52,"value":1535},{"type":46,"tag":84,"props":5743,"children":5745},{"class":86,"line":5744},28,[5746,5750,5754,5758],{"type":46,"tag":84,"props":5747,"children":5748},{"style":126},[5749],{"type":52,"value":5482},{"type":46,"tag":84,"props":5751,"children":5752},{"style":1528},[5753],{"type":52,"value":2637},{"type":46,"tag":84,"props":5755,"children":5756},{"style":126},[5757],{"type":52,"value":1548},{"type":46,"tag":84,"props":5759,"children":5760},{"style":115},[5761],{"type":52,"value":5322},{"type":46,"tag":84,"props":5763,"children":5765},{"class":86,"line":5764},29,[5766,5770,5774,5778,5782,5786,5790],{"type":46,"tag":84,"props":5767,"children":5768},{"style":1528},[5769],{"type":52,"value":5503},{"type":46,"tag":84,"props":5771,"children":5772},{"style":126},[5773],{"type":52,"value":1548},{"type":46,"tag":84,"props":5775,"children":5776},{"style":126},[5777],{"type":52,"value":3002},{"type":46,"tag":84,"props":5779,"children":5780},{"style":115},[5781],{"type":52,"value":5516},{"type":46,"tag":84,"props":5783,"children":5784},{"style":126},[5785],{"type":52,"value":3012},{"type":46,"tag":84,"props":5787,"children":5788},{"style":3242},[5789],{"type":52,"value":5525},{"type":46,"tag":84,"props":5791,"children":5792},{"style":126},[5793],{"type":52,"value":3022},{"type":46,"tag":84,"props":5795,"children":5797},{"class":86,"line":5796},30,[5798,5802,5806],{"type":46,"tag":84,"props":5799,"children":5800},{"style":1528},[5801],{"type":52,"value":5538},{"type":46,"tag":84,"props":5803,"children":5804},{"style":126},[5805],{"type":52,"value":1548},{"type":46,"tag":84,"props":5807,"children":5808},{"style":115},[5809],{"type":52,"value":5338},{"type":46,"tag":84,"props":5811,"children":5813},{"class":86,"line":5812},31,[5814,5818,5822],{"type":46,"tag":84,"props":5815,"children":5816},{"style":1528},[5817],{"type":52,"value":5555},{"type":46,"tag":84,"props":5819,"children":5820},{"style":126},[5821],{"type":52,"value":1548},{"type":46,"tag":84,"props":5823,"children":5824},{"style":115},[5825],{"type":52,"value":5564},{"type":46,"tag":84,"props":5827,"children":5829},{"class":86,"line":5828},32,[5830,5834,5838],{"type":46,"tag":84,"props":5831,"children":5832},{"style":1528},[5833],{"type":52,"value":5573},{"type":46,"tag":84,"props":5835,"children":5836},{"style":126},[5837],{"type":52,"value":1548},{"type":46,"tag":84,"props":5839,"children":5840},{"style":115},[5841],{"type":52,"value":5582},{"type":46,"tag":84,"props":5843,"children":5845},{"class":86,"line":5844},33,[5846],{"type":46,"tag":84,"props":5847,"children":5848},{"emptyLinePlaceholder":245},[5849],{"type":52,"value":248},{"type":46,"tag":84,"props":5851,"children":5853},{"class":86,"line":5852},34,[5854,5859],{"type":46,"tag":84,"props":5855,"children":5856},{"style":1528},[5857],{"type":52,"value":5858},"    metrics",{"type":46,"tag":84,"props":5860,"children":5861},{"style":126},[5862],{"type":52,"value":1535},{"type":46,"tag":84,"props":5864,"children":5866},{"class":86,"line":5865},35,[5867,5871,5875,5879],{"type":46,"tag":84,"props":5868,"children":5869},{"style":126},[5870],{"type":52,"value":5482},{"type":46,"tag":84,"props":5872,"children":5873},{"style":1528},[5874],{"type":52,"value":2637},{"type":46,"tag":84,"props":5876,"children":5877},{"style":126},[5878],{"type":52,"value":1548},{"type":46,"tag":84,"props":5880,"children":5881},{"style":115},[5882],{"type":52,"value":5322},{"type":46,"tag":84,"props":5884,"children":5886},{"class":86,"line":5885},36,[5887,5891,5895,5899,5903,5907,5911],{"type":46,"tag":84,"props":5888,"children":5889},{"style":1528},[5890],{"type":52,"value":5503},{"type":46,"tag":84,"props":5892,"children":5893},{"style":126},[5894],{"type":52,"value":1548},{"type":46,"tag":84,"props":5896,"children":5897},{"style":126},[5898],{"type":52,"value":3002},{"type":46,"tag":84,"props":5900,"children":5901},{"style":115},[5902],{"type":52,"value":5516},{"type":46,"tag":84,"props":5904,"children":5905},{"style":126},[5906],{"type":52,"value":3012},{"type":46,"tag":84,"props":5908,"children":5909},{"style":3242},[5910],{"type":52,"value":5525},{"type":46,"tag":84,"props":5912,"children":5913},{"style":126},[5914],{"type":52,"value":3022},{"type":46,"tag":84,"props":5916,"children":5918},{"class":86,"line":5917},37,[5919,5923,5927],{"type":46,"tag":84,"props":5920,"children":5921},{"style":1528},[5922],{"type":52,"value":5538},{"type":46,"tag":84,"props":5924,"children":5925},{"style":126},[5926],{"type":52,"value":1548},{"type":46,"tag":84,"props":5928,"children":5929},{"style":115},[5930],{"type":52,"value":5338},{"type":46,"tag":84,"props":5932,"children":5934},{"class":86,"line":5933},38,[5935,5939,5943],{"type":46,"tag":84,"props":5936,"children":5937},{"style":1528},[5938],{"type":52,"value":5555},{"type":46,"tag":84,"props":5940,"children":5941},{"style":126},[5942],{"type":52,"value":1548},{"type":46,"tag":84,"props":5944,"children":5945},{"style":115},[5946],{"type":52,"value":5564},{"type":46,"tag":84,"props":5948,"children":5950},{"class":86,"line":5949},39,[5951],{"type":46,"tag":84,"props":5952,"children":5953},{"emptyLinePlaceholder":245},[5954],{"type":52,"value":248},{"type":46,"tag":84,"props":5956,"children":5958},{"class":86,"line":5957},40,[5959,5964],{"type":46,"tag":84,"props":5960,"children":5961},{"style":1528},[5962],{"type":52,"value":5963},"    filters",{"type":46,"tag":84,"props":5965,"children":5966},{"style":126},[5967],{"type":52,"value":1535},{"type":46,"tag":84,"props":5969,"children":5971},{"class":86,"line":5970},41,[5972,5976,5980,5984],{"type":46,"tag":84,"props":5973,"children":5974},{"style":126},[5975],{"type":52,"value":5482},{"type":46,"tag":84,"props":5977,"children":5978},{"style":1528},[5979],{"type":52,"value":2637},{"type":46,"tag":84,"props":5981,"children":5982},{"style":126},[5983],{"type":52,"value":1548},{"type":46,"tag":84,"props":5985,"children":5986},{"style":115},[5987],{"type":52,"value":5322},{"type":46,"tag":84,"props":5989,"children":5991},{"class":86,"line":5990},42,[5992,5996,6000,6004,6008,6012,6016],{"type":46,"tag":84,"props":5993,"children":5994},{"style":1528},[5995],{"type":52,"value":5503},{"type":46,"tag":84,"props":5997,"children":5998},{"style":126},[5999],{"type":52,"value":1548},{"type":46,"tag":84,"props":6001,"children":6002},{"style":126},[6003],{"type":52,"value":3002},{"type":46,"tag":84,"props":6005,"children":6006},{"style":115},[6007],{"type":52,"value":5516},{"type":46,"tag":84,"props":6009,"children":6010},{"style":126},[6011],{"type":52,"value":3012},{"type":46,"tag":84,"props":6013,"children":6014},{"style":3242},[6015],{"type":52,"value":5525},{"type":46,"tag":84,"props":6017,"children":6018},{"style":126},[6019],{"type":52,"value":3022},{"type":46,"tag":84,"props":6021,"children":6023},{"class":86,"line":6022},43,[6024,6028,6032],{"type":46,"tag":84,"props":6025,"children":6026},{"style":1528},[6027],{"type":52,"value":5538},{"type":46,"tag":84,"props":6029,"children":6030},{"style":126},[6031],{"type":52,"value":1548},{"type":46,"tag":84,"props":6033,"children":6034},{"style":115},[6035],{"type":52,"value":5338},{"type":46,"tag":84,"props":6037,"children":6039},{"class":86,"line":6038},44,[6040,6044,6048],{"type":46,"tag":84,"props":6041,"children":6042},{"style":1528},[6043],{"type":52,"value":5555},{"type":46,"tag":84,"props":6045,"children":6046},{"style":126},[6047],{"type":52,"value":1548},{"type":46,"tag":84,"props":6049,"children":6050},{"style":115},[6051],{"type":52,"value":5564},{"type":46,"tag":84,"props":6053,"children":6055},{"class":86,"line":6054},45,[6056],{"type":46,"tag":84,"props":6057,"children":6058},{"emptyLinePlaceholder":245},[6059],{"type":52,"value":248},{"type":46,"tag":84,"props":6061,"children":6063},{"class":86,"line":6062},46,[6064,6069],{"type":46,"tag":84,"props":6065,"children":6066},{"style":1528},[6067],{"type":52,"value":6068},"relationships",{"type":46,"tag":84,"props":6070,"children":6071},{"style":126},[6072],{"type":52,"value":1535},{"type":46,"tag":84,"props":6074,"children":6076},{"class":86,"line":6075},47,[6077,6081,6085,6089],{"type":46,"tag":84,"props":6078,"children":6079},{"style":126},[6080],{"type":52,"value":2006},{"type":46,"tag":84,"props":6082,"children":6083},{"style":1528},[6084],{"type":52,"value":2637},{"type":46,"tag":84,"props":6086,"children":6087},{"style":126},[6088],{"type":52,"value":1548},{"type":46,"tag":84,"props":6090,"children":6091},{"style":115},[6092],{"type":52,"value":5338},{"type":46,"tag":84,"props":6094,"children":6096},{"class":86,"line":6095},48,[6097,6102,6106],{"type":46,"tag":84,"props":6098,"children":6099},{"style":1528},[6100],{"type":52,"value":6101},"    left_table",{"type":46,"tag":84,"props":6103,"children":6104},{"style":126},[6105],{"type":52,"value":1548},{"type":46,"tag":84,"props":6107,"children":6108},{"style":115},[6109],{"type":52,"value":6110}," \u003Ctable>\n",{"type":46,"tag":84,"props":6112,"children":6114},{"class":86,"line":6113},49,[6115,6120,6124],{"type":46,"tag":84,"props":6116,"children":6117},{"style":1528},[6118],{"type":52,"value":6119},"    right_table",{"type":46,"tag":84,"props":6121,"children":6122},{"style":126},[6123],{"type":52,"value":1548},{"type":46,"tag":84,"props":6125,"children":6126},{"style":115},[6127],{"type":52,"value":6110},{"type":46,"tag":84,"props":6129,"children":6131},{"class":86,"line":6130},50,[6132,6137],{"type":46,"tag":84,"props":6133,"children":6134},{"style":1528},[6135],{"type":52,"value":6136},"    relationship_columns",{"type":46,"tag":84,"props":6138,"children":6139},{"style":126},[6140],{"type":52,"value":1535},{"type":46,"tag":84,"props":6142,"children":6144},{"class":86,"line":6143},51,[6145,6149,6154,6158],{"type":46,"tag":84,"props":6146,"children":6147},{"style":126},[6148],{"type":52,"value":5482},{"type":46,"tag":84,"props":6150,"children":6151},{"style":1528},[6152],{"type":52,"value":6153}," left_column",{"type":46,"tag":84,"props":6155,"children":6156},{"style":126},[6157],{"type":52,"value":1548},{"type":46,"tag":84,"props":6159,"children":6160},{"style":115},[6161],{"type":52,"value":6162}," \u003Ccolumn>\n",{"type":46,"tag":84,"props":6164,"children":6166},{"class":86,"line":6165},52,[6167,6172,6176],{"type":46,"tag":84,"props":6168,"children":6169},{"style":1528},[6170],{"type":52,"value":6171},"        right_column",{"type":46,"tag":84,"props":6173,"children":6174},{"style":126},[6175],{"type":52,"value":1548},{"type":46,"tag":84,"props":6177,"children":6178},{"style":115},[6179],{"type":52,"value":6162},{"type":46,"tag":84,"props":6181,"children":6183},{"class":86,"line":6182},53,[6184],{"type":46,"tag":84,"props":6185,"children":6186},{"emptyLinePlaceholder":245},[6187],{"type":52,"value":248},{"type":46,"tag":84,"props":6189,"children":6191},{"class":86,"line":6190},54,[6192,6196],{"type":46,"tag":84,"props":6193,"children":6194},{"style":1528},[6195],{"type":52,"value":3812},{"type":46,"tag":84,"props":6197,"children":6198},{"style":126},[6199],{"type":52,"value":1535},{"type":46,"tag":84,"props":6201,"children":6203},{"class":86,"line":6202},55,[6204,6208,6212,6216],{"type":46,"tag":84,"props":6205,"children":6206},{"style":126},[6207],{"type":52,"value":2006},{"type":46,"tag":84,"props":6209,"children":6210},{"style":1528},[6211],{"type":52,"value":2637},{"type":46,"tag":84,"props":6213,"children":6214},{"style":126},[6215],{"type":52,"value":1548},{"type":46,"tag":84,"props":6217,"children":6218},{"style":115},[6219],{"type":52,"value":5322},{"type":46,"tag":84,"props":6221,"children":6223},{"class":86,"line":6222},56,[6224,6228,6232,6236,6240,6244,6248],{"type":46,"tag":84,"props":6225,"children":6226},{"style":1528},[6227],{"type":52,"value":4051},{"type":46,"tag":84,"props":6229,"children":6230},{"style":126},[6231],{"type":52,"value":1548},{"type":46,"tag":84,"props":6233,"children":6234},{"style":126},[6235],{"type":52,"value":3002},{"type":46,"tag":84,"props":6237,"children":6238},{"style":115},[6239],{"type":52,"value":5516},{"type":46,"tag":84,"props":6241,"children":6242},{"style":126},[6243],{"type":52,"value":3012},{"type":46,"tag":84,"props":6245,"children":6246},{"style":3242},[6247],{"type":52,"value":5525},{"type":46,"tag":84,"props":6249,"children":6250},{"style":126},[6251],{"type":52,"value":3022},{"type":46,"tag":84,"props":6253,"children":6255},{"class":86,"line":6254},57,[6256,6260,6264],{"type":46,"tag":84,"props":6257,"children":6258},{"style":1528},[6259],{"type":52,"value":3738},{"type":46,"tag":84,"props":6261,"children":6262},{"style":126},[6263],{"type":52,"value":1548},{"type":46,"tag":84,"props":6265,"children":6266},{"style":115},[6267],{"type":52,"value":5338},{"type":46,"tag":84,"props":6269,"children":6271},{"class":86,"line":6270},58,[6272,6276,6280],{"type":46,"tag":84,"props":6273,"children":6274},{"style":1528},[6275],{"type":52,"value":2851},{"type":46,"tag":84,"props":6277,"children":6278},{"style":126},[6279],{"type":52,"value":1548},{"type":46,"tag":84,"props":6281,"children":6282},{"style":115},[6283],{"type":52,"value":5564},{"type":46,"tag":84,"props":6285,"children":6287},{"class":86,"line":6286},59,[6288],{"type":46,"tag":84,"props":6289,"children":6290},{"emptyLinePlaceholder":245},[6291],{"type":52,"value":248},{"type":46,"tag":84,"props":6293,"children":6295},{"class":86,"line":6294},60,[6296,6300],{"type":46,"tag":84,"props":6297,"children":6298},{"style":1528},[6299],{"type":52,"value":5227},{"type":46,"tag":84,"props":6301,"children":6302},{"style":126},[6303],{"type":52,"value":1535},{"type":46,"tag":84,"props":6305,"children":6307},{"class":86,"line":6306},61,[6308,6312,6316,6320],{"type":46,"tag":84,"props":6309,"children":6310},{"style":126},[6311],{"type":52,"value":2006},{"type":46,"tag":84,"props":6313,"children":6314},{"style":1528},[6315],{"type":52,"value":2637},{"type":46,"tag":84,"props":6317,"children":6318},{"style":126},[6319],{"type":52,"value":1548},{"type":46,"tag":84,"props":6321,"children":6322},{"style":115},[6323],{"type":52,"value":5338},{"type":46,"tag":84,"props":6325,"children":6327},{"class":86,"line":6326},62,[6328,6333,6337],{"type":46,"tag":84,"props":6329,"children":6330},{"style":1528},[6331],{"type":52,"value":6332},"    question",{"type":46,"tag":84,"props":6334,"children":6335},{"style":126},[6336],{"type":52,"value":1548},{"type":46,"tag":84,"props":6338,"children":6339},{"style":115},[6340],{"type":52,"value":5338},{"type":46,"tag":84,"props":6342,"children":6344},{"class":86,"line":6343},63,[6345,6350,6354],{"type":46,"tag":84,"props":6346,"children":6347},{"style":1528},[6348],{"type":52,"value":6349},"    sql",{"type":46,"tag":84,"props":6351,"children":6352},{"style":126},[6353],{"type":52,"value":1548},{"type":46,"tag":84,"props":6355,"children":6356},{"style":115},[6357],{"type":52,"value":5338},{"type":46,"tag":84,"props":6359,"children":6361},{"class":86,"line":6360},64,[6362,6367,6371],{"type":46,"tag":84,"props":6363,"children":6364},{"style":1528},[6365],{"type":52,"value":6366},"    use_as_onboarding_question",{"type":46,"tag":84,"props":6368,"children":6369},{"style":126},[6370],{"type":52,"value":1548},{"type":46,"tag":84,"props":6372,"children":6373},{"style":115},[6374],{"type":52,"value":5600},{"type":46,"tag":277,"props":6376,"children":6377},{},[6378],{"type":46,"tag":55,"props":6379,"children":6380},{},[6381,6386,6387,6392,6393,6398,6399,6404,6405,6410,6411,6416,6417,6422,6423],{"type":46,"tag":284,"props":6382,"children":6383},{},[6384],{"type":52,"value":6385},"Valid top-level keys only:",{"type":52,"value":2087},{"type":46,"tag":80,"props":6388,"children":6390},{"className":6389},[],[6391],{"type":52,"value":5313},{"type":52,"value":1934},{"type":46,"tag":80,"props":6394,"children":6396},{"className":6395},[],[6397],{"type":52,"value":2502},{"type":52,"value":1934},{"type":46,"tag":80,"props":6400,"children":6402},{"className":6401},[],[6403],{"type":52,"value":5353},{"type":52,"value":1934},{"type":46,"tag":80,"props":6406,"children":6408},{"className":6407},[],[6409],{"type":52,"value":6068},{"type":52,"value":1934},{"type":46,"tag":80,"props":6412,"children":6414},{"className":6413},[],[6415],{"type":52,"value":3812},{"type":52,"value":1934},{"type":46,"tag":80,"props":6418,"children":6420},{"className":6419},[],[6421],{"type":52,"value":5227},{"type":52,"value":1934},{"type":46,"tag":80,"props":6424,"children":6426},{"className":6425},[],[6427],{"type":52,"value":5164},{"type":46,"tag":61,"props":6429,"children":6430},{},[],{"type":46,"tag":504,"props":6432,"children":6434},{"id":6433},"create-the-semantic-view",[6435],{"type":52,"value":6436},"Create the Semantic View",{"type":46,"tag":55,"props":6438,"children":6439},{},[6440,6442,6447],{"type":52,"value":6441},"The SQL is the same regardless of environment. The difference is ",{"type":46,"tag":337,"props":6443,"children":6444},{},[6445],{"type":52,"value":6446},"how",{"type":52,"value":6448}," it is executed.",{"type":46,"tag":55,"props":6450,"children":6451},{},[6452],{"type":46,"tag":284,"props":6453,"children":6454},{},[6455],{"type":52,"value":6456},"SQL to run:",{"type":46,"tag":72,"props":6458,"children":6460},{"className":3108,"code":6459,"language":3110,"meta":77,"style":77},"CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML('\u003Cdatabase>.\u003Cschema>', $$\n\u003Cyaml content here>\n$$);\n",[6461],{"type":46,"tag":80,"props":6462,"children":6463},{"__ignoreMap":77},[6464,6472,6480],{"type":46,"tag":84,"props":6465,"children":6466},{"class":86,"line":87},[6467],{"type":46,"tag":84,"props":6468,"children":6469},{},[6470],{"type":52,"value":6471},"CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML('\u003Cdatabase>.\u003Cschema>', $$\n",{"type":46,"tag":84,"props":6473,"children":6474},{"class":86,"line":97},[6475],{"type":46,"tag":84,"props":6476,"children":6477},{},[6478],{"type":52,"value":6479},"\u003Cyaml content here>\n",{"type":46,"tag":84,"props":6481,"children":6482},{"class":86,"line":33},[6483],{"type":46,"tag":84,"props":6484,"children":6485},{},[6486],{"type":52,"value":6487},"$$);\n",{"type":46,"tag":55,"props":6489,"children":6490},{},[6491],{"type":46,"tag":284,"props":6492,"children":6493},{},[6494],{"type":52,"value":6495},"Execution by environment:",{"type":46,"tag":1405,"props":6497,"children":6498},{},[6499,6515],{"type":46,"tag":1409,"props":6500,"children":6501},{},[6502],{"type":46,"tag":1413,"props":6503,"children":6504},{},[6505,6510],{"type":46,"tag":1417,"props":6506,"children":6507},{},[6508],{"type":52,"value":6509},"Environment",{"type":46,"tag":1417,"props":6511,"children":6512},{},[6513],{"type":52,"value":6514},"Command",{"type":46,"tag":1433,"props":6516,"children":6517},{},[6518,6530,6554,6571],{"type":46,"tag":1413,"props":6519,"children":6520},{},[6521,6525],{"type":46,"tag":1440,"props":6522,"children":6523},{},[6524],{"type":52,"value":446},{"type":46,"tag":1440,"props":6526,"children":6527},{},[6528],{"type":52,"value":6529},"Execute the SQL directly in the active Snowflake session",{"type":46,"tag":1413,"props":6531,"children":6532},{},[6533,6543],{"type":46,"tag":1440,"props":6534,"children":6535},{},[6536,6541],{"type":46,"tag":80,"props":6537,"children":6539},{"className":6538},[],[6540],{"type":52,"value":515},{"type":52,"value":6542}," CLI",{"type":46,"tag":1440,"props":6544,"children":6545},{},[6546,6552],{"type":46,"tag":80,"props":6547,"children":6549},{"className":6548},[],[6550],{"type":52,"value":6551},"snow sql -q \"CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(...)\"",{"type":52,"value":6553}," or write YAML to a temp file and pipe it",{"type":46,"tag":1413,"props":6555,"children":6556},{},[6557,6562],{"type":46,"tag":1440,"props":6558,"children":6559},{},[6560],{"type":52,"value":6561},"SnowSQL",{"type":46,"tag":1440,"props":6563,"children":6564},{},[6565],{"type":46,"tag":80,"props":6566,"children":6568},{"className":6567},[],[6569],{"type":52,"value":6570},"snowsql -a \u003Caccount> -u \u003Cuser> -f \u003Csql_file.sql>",{"type":46,"tag":1413,"props":6572,"children":6573},{},[6574,6579],{"type":46,"tag":1440,"props":6575,"children":6576},{},[6577],{"type":52,"value":6578},"Python",{"type":46,"tag":1440,"props":6580,"children":6581},{},[6582],{"type":46,"tag":80,"props":6583,"children":6585},{"className":6584},[],[6586],{"type":52,"value":6587},"conn.cursor().execute(\"\u003Csql>\")",{"type":46,"tag":277,"props":6589,"children":6590},{},[6591],{"type":46,"tag":55,"props":6592,"children":6593},{},[6594,6599,6601,6607,6609,6615],{"type":46,"tag":284,"props":6595,"children":6596},{},[6597],{"type":52,"value":6598},"Tip for CLI environments:",{"type":52,"value":6600}," If the YAML is long, write it to a temporary ",{"type":46,"tag":80,"props":6602,"children":6604},{"className":6603},[],[6605],{"type":52,"value":6606},".sql",{"type":52,"value":6608}," file first and execute the file rather than passing it inline — this avoids shell escaping issues with the ",{"type":46,"tag":80,"props":6610,"children":6612},{"className":6611},[],[6613],{"type":52,"value":6614},"$$",{"type":52,"value":6616}," dollar-quoting.",{"type":46,"tag":72,"props":6618,"children":6620},{"className":74,"code":6619,"language":76,"meta":77,"style":77},"# snow CLI example with a file\nsnow sql -f \u002Ftmp\u002Fcreate_semantic_view.sql\n",[6621],{"type":46,"tag":80,"props":6622,"children":6623},{"__ignoreMap":77},[6624,6632],{"type":46,"tag":84,"props":6625,"children":6626},{"class":86,"line":87},[6627],{"type":46,"tag":84,"props":6628,"children":6629},{"style":91},[6630],{"type":52,"value":6631},"# snow CLI example with a file\n",{"type":46,"tag":84,"props":6633,"children":6634},{"class":86,"line":97},[6635,6639,6643,6648],{"type":46,"tag":84,"props":6636,"children":6637},{"style":180},[6638],{"type":52,"value":515},{"type":46,"tag":84,"props":6640,"children":6641},{"style":115},[6642],{"type":52,"value":608},{"type":46,"tag":84,"props":6644,"children":6645},{"style":115},[6646],{"type":52,"value":6647}," -f",{"type":46,"tag":84,"props":6649,"children":6650},{"style":115},[6651],{"type":52,"value":6652}," \u002Ftmp\u002Fcreate_semantic_view.sql\n",{"type":46,"tag":504,"props":6654,"children":6656},{"id":6655},"grant-access",[6657],{"type":52,"value":6658},"Grant access",{"type":46,"tag":72,"props":6660,"children":6662},{"className":3108,"code":6661,"language":3110,"meta":77,"style":77},"GRANT SELECT ON SEMANTIC VIEW \u003Cdatabase>.\u003Cschema>.\u003Cname> TO ROLE \u003Crole>;\n",[6663],{"type":46,"tag":80,"props":6664,"children":6665},{"__ignoreMap":77},[6666],{"type":46,"tag":84,"props":6667,"children":6668},{"class":86,"line":87},[6669],{"type":46,"tag":84,"props":6670,"children":6671},{},[6672],{"type":52,"value":6661},{"type":46,"tag":55,"props":6674,"children":6675},{},[6676,6678,6684],{"type":52,"value":6677},"Execute this the same way as the ",{"type":46,"tag":80,"props":6679,"children":6681},{"className":6680},[],[6682],{"type":52,"value":6683},"CREATE",{"type":52,"value":6685}," call above, using whichever connection method was established during the Runtime Environment Detection step.",{"type":46,"tag":61,"props":6687,"children":6688},{},[],{"type":46,"tag":65,"props":6690,"children":6692},{"id":6691},"reference",[6693],{"type":52,"value":6694},"Reference",{"type":46,"tag":435,"props":6696,"children":6697},{},[6698,6710],{"type":46,"tag":439,"props":6699,"children":6700},{},[6701],{"type":46,"tag":6702,"props":6703,"children":6707},"a",{"href":6704,"rel":6705},"https:\u002F\u002Fdocs.snowflake.com\u002Fen\u002Fuser-guide\u002Fviews-semantic\u002Fsemantic-view-yaml-spec",[6706],"nofollow",[6708],{"type":52,"value":6709},"Snowflake Semantic View YAML Spec",{"type":46,"tag":439,"props":6711,"children":6712},{},[6713],{"type":46,"tag":6702,"props":6714,"children":6717},{"href":6715,"rel":6716},"https:\u002F\u002Fdocs.snowflake.com\u002Fen\u002Fsql-reference\u002Fstored-procedures\u002Fsystem_create_semantic_view_from_yaml",[6706],[6718],{"type":52,"value":6719},"SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML",{"type":46,"tag":6721,"props":6722,"children":6723},"style",{},[6724],{"type":52,"value":6725},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":6727,"total":3073},[6728,6740,6752,6767,6783,6797,6813,6825,6841,6854,6867],{"slug":6729,"name":6729,"fn":6730,"description":6731,"org":6732,"tags":6733,"stars":29,"repoUrl":30,"updatedAt":6739},"omni-admin","administer Omni Analytics","Administer an Omni Analytics instance — manage connections, users, groups, user attributes, permissions, schedules, and schema refreshes via the Omni CLI. Use this skill whenever someone wants to manage users or groups, set up permissions on a dashboard or folder, configure user attributes, create or modify schedules, manage database connections, refresh a schema, set up access controls, provision users, or any variant of \"add a user\", \"give access to\", \"set up permissions\", \"who has access\", \"configure connection\", \"refresh the schema\", or \"schedule a delivery\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6734,6735,6738],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},"CLI","cli",{"name":18,"slug":19,"type":16},"2026-04-06T18:10:58.235995",{"slug":6741,"name":6741,"fn":6742,"description":6743,"org":6744,"tags":6745,"stars":29,"repoUrl":30,"updatedAt":6751},"omni-ai-eval","evaluate Omni AI query accuracy","Evaluate Omni AI accuracy using Omni's built-in eval system — define a prompt set, run a judged eval against a model (or branch), and read the accuracy-judge verdicts. Use this skill whenever someone wants to evaluate Omni AI, benchmark Blobby, run regression tests, compare AI output across branches or model-context changes, measure AI quality, run A\u002FB tests on model changes, assess the impact of an ai_context or modeling change, or any variant of \"run evals\", \"test Blobby\", \"benchmark query generation\", \"compare AI results\", \"regression test\", \"how accurate is the AI\", or \"measure the impact of my changes\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6746,6747,6750],{"name":24,"slug":25,"type":16},{"name":6748,"slug":6749,"type":16},"Evals","evals",{"name":18,"slug":19,"type":16},"2026-04-06T18:10:59.485921",{"slug":6753,"name":6753,"fn":6754,"description":6755,"org":6756,"tags":6757,"stars":29,"repoUrl":30,"updatedAt":6766},"omni-ai-optimizer","optimize Omni models for AI","Optimize your Omni Analytics model for Blobby, the Omni Agent — configure ai_context, ai_fields, synonyms, sample_queries, and AI-specific topic extensions. Use this skill whenever someone wants to improve AI accuracy in Omni, make Blobby smarter, add AI context or example questions, curate which fields the AI sees, personalize AI context by user attribute, scope context to a model tier or agent, diagnose context-window pruning or truncation, control which topics AI can reach, troubleshoot why Blobby gives wrong answers, or any variant of \"make the AI better\", \"Blobby isn't answering correctly\", \"optimize for AI\", or \"teach the AI about our data\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6758,6761,6762,6765],{"name":6759,"slug":6760,"type":16},"AI Context","ai-context",{"name":24,"slug":25,"type":16},{"name":6763,"slug":6764,"type":16},"Data Modeling","data-modeling",{"name":18,"slug":19,"type":16},"2026-07-27T06:09:42.358967",{"slug":6768,"name":6768,"fn":6769,"description":6770,"org":6771,"tags":6772,"stars":29,"repoUrl":30,"updatedAt":6782},"omni-content-builder","manage Omni Analytics documents and dashboards","Create, update, and manage Omni Analytics documents and dashboards programmatically — document lifecycle, drafts, tiles, visualizations, filters, controls, and layouts — using the Omni CLI. Use this skill whenever someone wants to build a dashboard, create a workbook, add tiles or charts, configure dashboard filters or controls, update an existing dashboard's model, set up a KPI view, create visualizations, lay out a dashboard, arrange tiles or pages, create a document, edit a dashboard as a draft, publish a draft, change dashboard settings, rename a workbook, delete a dashboard, move a document to a folder, duplicate a dashboard, or any variant of \"build a dashboard for\", \"create a report showing\", \"add a chart to\", \"make a dashboard\", \"update the dashboard layout\", \"rename this document\", \"publish this draft\", \"move to folder\", or \"delete this dashboard\". Also use when modifying dashboard-level model customizations like workbook-specific joins or fields.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6773,6774,6775,6778,6781],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6776,"slug":6777,"type":16},"Dashboards","dashboards",{"name":6779,"slug":6780,"type":16},"Data Visualization","data-visualization",{"name":18,"slug":19,"type":16},"2026-04-06T18:11:02.007785",{"slug":6784,"name":6784,"fn":6785,"description":6786,"org":6787,"tags":6788,"stars":29,"repoUrl":30,"updatedAt":6796},"omni-content-explorer","find and organize Omni Analytics content","Find, browse, and organize content in Omni Analytics — dashboards, workbooks, folders, and labels — using the Omni CLI. Use this skill whenever someone wants to find an existing dashboard, search for content, list workbooks, browse folders, see what dashboards exist, find popular reports, download a dashboard as PDF or PNG, favorite content, manage labels on documents, or any variant of \"find the dashboard about\", \"what reports do we have\", \"show me our dashboards\", \"where is the sales report\", or \"download this dashboard\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6789,6790,6791,6792,6793],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6776,"slug":6777,"type":16},{"name":18,"slug":19,"type":16},{"name":6794,"slug":6795,"type":16},"Search","search","2026-04-06T18:11:04.516766",{"slug":6798,"name":6798,"fn":6799,"description":6800,"org":6801,"tags":6802,"stars":29,"repoUrl":30,"updatedAt":6812},"omni-embed","embed Omni Analytics dashboards","Embed Omni Analytics dashboards in external applications — URL signing, custom themes, iframe events, entity workspaces, and permission-aware content — using the @omni-co\u002Fembed SDK and Omni CLI. Use this skill whenever someone wants to embed a dashboard, sign an embed URL, customize the embedded theme, handle embed events, listen for clicks or drills in the iframe, send filters to an embedded dashboard, set up entity workspaces, look up embed users, build a permission-aware content list, white-label an embedded dashboard, or any variant of \"embed this dashboard\", \"customize the iframe theme\", \"handle click events from the embed\", \"filter the embedded dashboard\", \"set up embedding\", or \"what dashboards can this user see\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6803,6804,6805,6808,6809],{"name":24,"slug":25,"type":16},{"name":6776,"slug":6777,"type":16},{"name":6806,"slug":6807,"type":16},"Frontend","frontend",{"name":18,"slug":19,"type":16},{"name":6810,"slug":6811,"type":16},"SDK","sdk","2026-04-06T18:10:55.739544",{"slug":6814,"name":6814,"fn":6815,"description":6816,"org":6817,"tags":6818,"stars":29,"repoUrl":30,"updatedAt":6824},"omni-model-builder","build Omni Analytics semantic models","Create and edit Omni Analytics semantic model definitions — views, topics, dimensions, measures, relationships, and query views — using YAML through the Omni CLI. Use this skill whenever someone wants to add a field, create a new dimension or measure, define a topic, set up joins between tables, modify the data model, build a new view, add a calculated field, create a relationship, edit YAML, work on a branch, promote model changes, or any variant of \"model this data\", \"add this metric\", \"create a view for\", or \"set up a join between\". Also use for migrating modeling patterns since Omni's YAML is conceptually similar to other semantic layer definitions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6819,6820,6821,6822,6823],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6763,"slug":6764,"type":16},{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},"2026-04-06T18:11:05.775943",{"slug":6826,"name":6826,"fn":6827,"description":6828,"org":6829,"tags":6830,"stars":29,"repoUrl":30,"updatedAt":6840},"omni-model-explorer","discover and inspect Omni Analytics models","Discover and inspect Omni Analytics models, topics, views, fields, dimensions, measures, and relationships using the Omni CLI. Use this skill whenever someone wants to understand what data is available in Omni, explore their semantic model, find specific fields or views, check how tables join together, see what topics exist, or asks any variant of \"what can I query\", \"what fields are available\", \"show me the model\", \"what data do we have\", or \"how is this data modeled\". Also use when you need to understand the Omni model structure before building or modifying anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6831,6832,6833,6836,6839],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6834,"slug":6835,"type":16},"Data Analysis","data-analysis",{"name":6837,"slug":6838,"type":16},"Knowledge Management","knowledge-management",{"name":18,"slug":19,"type":16},"2026-04-06T18:11:00.739003",{"slug":6842,"name":6842,"fn":6843,"description":6844,"org":6845,"tags":6846,"stars":29,"repoUrl":30,"updatedAt":6853},"omni-query","query Omni Analytics semantic layer","Run queries against Omni Analytics' semantic layer using the Omni CLI, interpret results, and chain queries for multi-step analysis. Use this skill whenever someone wants to query data through Omni, run a report, get metrics, pull numbers, analyze data, ask \"how many\" \u002F \"what's the trend\" \u002F \"show me the data\", retrieve dashboard query results, or extract data from an existing dashboard or workbook. Also use for table calculations and computed columns (running totals, percent-of-total, month-over-month \u002F period-over-period change, moving averages, rankings), open-ended multi-step analysis via agentic AI jobs, and running raw SQL through the semantic layer — even when the user doesn't say \"query\" (e.g. \"add a running total column\", \"what's our MoM growth\", \"analyze revenue trends\"). For building or editing a dashboard or chart use omni-content-builder; for adding a field or measure to the model use omni-model-builder — this skill retrieves and computes over data.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6847,6848,6849,6850,6851],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6834,"slug":6835,"type":16},{"name":18,"slug":19,"type":16},{"name":6852,"slug":3110,"type":16},"SQL","2026-04-06T18:10:56.974412",{"slug":6855,"name":6855,"fn":6856,"description":6857,"org":6858,"tags":6859,"stars":29,"repoUrl":30,"updatedAt":6866},"omni-to-databricks-metric-view","convert Omni topics to Databricks Metric Views","Convert an Omni Analytics topic into a Databricks Metric View definition in Unity Catalog. Use this skill whenever someone wants to export Omni metrics to Databricks, create a Metric View from an Omni topic, harden BI metrics into Unity Catalog, or bridge Omni's semantic layer with Databricks AI\u002FBI dashboards and Genie spaces.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6860,6861,6862,6865],{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"name":6863,"slug":6864,"type":16},"Databricks","databricks",{"name":18,"slug":19,"type":16},"2026-04-09T04:47:50.695014",{"slug":4,"name":4,"fn":5,"description":6,"org":6868,"tags":6869,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6870,6871,6872,6873,6874],{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":27,"slug":28,"type":16},{"name":21,"slug":22,"type":16},{"items":6876,"total":3073},[6877,6883,6889,6896,6904,6912,6920],{"slug":6729,"name":6729,"fn":6730,"description":6731,"org":6878,"tags":6879,"stars":29,"repoUrl":30,"updatedAt":6739},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6880,6881,6882],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":18,"slug":19,"type":16},{"slug":6741,"name":6741,"fn":6742,"description":6743,"org":6884,"tags":6885,"stars":29,"repoUrl":30,"updatedAt":6751},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6886,6887,6888],{"name":24,"slug":25,"type":16},{"name":6748,"slug":6749,"type":16},{"name":18,"slug":19,"type":16},{"slug":6753,"name":6753,"fn":6754,"description":6755,"org":6890,"tags":6891,"stars":29,"repoUrl":30,"updatedAt":6766},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6892,6893,6894,6895],{"name":6759,"slug":6760,"type":16},{"name":24,"slug":25,"type":16},{"name":6763,"slug":6764,"type":16},{"name":18,"slug":19,"type":16},{"slug":6768,"name":6768,"fn":6769,"description":6770,"org":6897,"tags":6898,"stars":29,"repoUrl":30,"updatedAt":6782},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6899,6900,6901,6902,6903],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6776,"slug":6777,"type":16},{"name":6779,"slug":6780,"type":16},{"name":18,"slug":19,"type":16},{"slug":6784,"name":6784,"fn":6785,"description":6786,"org":6905,"tags":6906,"stars":29,"repoUrl":30,"updatedAt":6796},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6907,6908,6909,6910,6911],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6776,"slug":6777,"type":16},{"name":18,"slug":19,"type":16},{"name":6794,"slug":6795,"type":16},{"slug":6798,"name":6798,"fn":6799,"description":6800,"org":6913,"tags":6914,"stars":29,"repoUrl":30,"updatedAt":6812},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6915,6916,6917,6918,6919],{"name":24,"slug":25,"type":16},{"name":6776,"slug":6777,"type":16},{"name":6806,"slug":6807,"type":16},{"name":18,"slug":19,"type":16},{"name":6810,"slug":6811,"type":16},{"slug":6814,"name":6814,"fn":6815,"description":6816,"org":6921,"tags":6922,"stars":29,"repoUrl":30,"updatedAt":6824},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6923,6924,6925,6926,6927],{"name":24,"slug":25,"type":16},{"name":6736,"slug":6737,"type":16},{"name":6763,"slug":6764,"type":16},{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16}]