Support
Log In

Migrate from Sigma

Convert your Sigma data models and workbook logic into governed Malloy semantic models

Sigma centralizes business logic in data models — but in practice, much of the real logic lives in spreadsheet-style formulas scattered across workbooks. Credible reads both, consolidates the duplication, and rebuilds a single governed Malloy model your whole organization can query consistently.

What Credible Reads

Your Sigma data models (Sigma's first-class semantic layer, which supersedes the older datasets), plus the calculated columns and metrics embedded in workbooks — exportable as code (JSON, or YAML via ?format=yaml). The agent works from that export. Connecting Sigma's MCP server (OAuth, permission-inherited) or REST API is optional: it lets the agent search across data models and workbook elements to find logic that never made it into the central model, and validate the result.

What Comes Across

The everyday modeling carries over. Here's how the bigger pieces land — and where they get better:

In SigmaIn Credible
Data modelsMalloy sources; import/export curate exposure
Columns, metrics, relationshipsCarried over as dimensions, measures, and joins
Workbook spreadsheet formulasConsolidated into one source of truth — not the same metric redefined differently in each workbook
Workbook permissionsFine-grained access control in the model, versioned and enforced on every surface
Descriptions#(doc) / #(index), indexed by the AI Analytics Engine
Workbooks & dashboardsRebuilt as data apps or notebooks

The Migration Flow

Credible reads the data model and crawls workbook elements for embedded logic, translates tables to sources and formulas to dimensions/measures, enriches with #(doc)/#(index) tags, and — where you connect it — validates results against Sigma's query engine.

What Credible Handles

  • Workbook-embedded logic is the classic Sigma trap: the true definitions are often spreadsheet formulas duplicated across many workbooks, not the central model. Credible finds them, reconciles the drift, and hoists a single canonical definition into the Malloy source.
  • Spreadsheet-formula semantics (Excel-like functions, row-level vs. aggregate context) are re-expressed as Malloy dimensions and measures, preserving whether each ran per-row or grouped.
  • External semantic layers — if a workbook reads dbt Semantic Layer metrics or Snowflake semantic views through Sigma, the logic lives upstream; Credible migrates the upstream definitions, not the passthrough.

Before & After

A Sigma data model as code:

{
  "name": "Orders Model",
  "columns": [
    { "name": "Status", "formula": "[ORDERS/order_status]",
      "description": "Current fulfillment status of the order" },
    { "name": "Order Size",
      "formula": "If([Amount] >= 100, \"large\", [Amount] >= 20, \"medium\", \"small\")" }
  ],
  "metrics": [
    { "name": "Total Revenue", "formula": "Sum([Amount])",
      "format": { "type": "currency" } },
    { "name": "Cancelled Orders", "formula": "SumIf(1, [Status] = \"cancelled\")" },
    { "name": "Cancellation Rate",
      "formula": "Divide([Cancelled Orders], Count([Order Id])) * 100",
      "format": { "type": "percent" } }
  ],
  "relationships": [
    { "kind": "many-to-one", "target": { "path": ["SALES","PUBLIC","CUSTOMERS"] },
      "on": "[ORDERS/customer_id] = [CUSTOMERS/customer_id]" }
  ]
}
source: orders is conn.table('sales.orders') extend {
  primary_key: order_id
  join_one: customers is conn.table('sales.customers') on customer_id

  dimension:
    #(doc) Current fulfillment status of the order
    #(index)
    status is order_status

    #(doc) Order size bucket derived from amount
    order_size is
      pick 'large' when amount >= 100
      pick 'medium' when amount >= 20
      else 'small'

  measure:
    #(doc) Total revenue in USD
    # currency
    total_revenue is sum(amount)

    #(doc) Orders that were cancelled
    cancelled_orders is count() { where: status = 'cancelled' }

    #(doc) Percentage of orders that were cancelled
    # percent
    cancellation_rate is cancelled_orders / count() * 100

  view:
    #(doc) Monthly revenue trend
    monthly_revenue is {
      group_by: created_at.month
      aggregate: total_revenue
    }
}

Sigma's code representation doesn't cover every construct (input tables, Python elements, and some data-source-level metrics live outside it), so Credible supplements the model-as-code export with workbook and element inspection to capture the full picture.

More than a reformat. Logic that was duplicated across workbooks becomes one governed, AI-discoverable source of truth that serves every surface, not just Sigma. See what you gain →

Next Steps

On this page