Define a metric like revenue exactly once in the semantic layer. From then on, a dashboard tile, a Metrics API call, and a question you ask Fi all resolve to the identical number, because they read the same definition, not raw tables each one interprets differently. This is the reconciliation an evaluation lives or dies on.
measures:
- name: revenue
sql: amount
type: sumYour data lives in DuckLake (DuckDB plus Iceberg tables on object storage), so it's queryable in standard SQL and attachable straight from your own tools. No proprietary export, no copying data between systems to make it usable. Drop to SQL whenever you want; the foundation never locks you in.
Connect your data →Everything stored as Iceberg tables on object storage, queryable in standard SQL. No lock-in, no shuffling data between systems to use it.
Define each metric once in versioned models. Revenue means revenue everywhere: in dashboards, in Fi's answers, and through the API.
Role-based access across workspaces, docs, and integrations, plus per-user, multi-tenant row scoping when you embed. Permissions the numbers carry with them.
Because metrics are defined once, Fi and any connected agent answer from governed definitions, not guesses against raw tables.
Every metric traces back through its model to its source. When a definition changes, it changes once and flows everywhere downstream, with an audit trail of who changed what. The number on the CFO's dashboard and the number in the board deck come from the same governed path.
Data modeling →