Get started

Semantic models and Apache Ossie

Development documentation. This guide follows a reviewed snapshot of main and may describe capabilities not yet in Stable. Check Preview labels and release notes. Some executable names and paths remain unchanged for compatibility. Legacy names explained ↗

Preview. KratosForge converts Fabric semantic models to and from Apache Ossie, the open format for semantic models that Snowflake, Salesforce, dbt Labs, Databricks and others read and write. Ossie was called Open Semantic Interchange (OSI) until July 2026, and it is now an Apache Incubator project. Its spec, version 0.2.0.dev0, is still a draft and may change.

It lives on Data mesh > Deploy > Semantic model, in the Open Semantic Interchange card. The engine methods are in; the card waits on its design review.

Export to Ossie#

Pick a semantic model in the environment's workspace (Test or Prod). KratosForge reads its definition from Fabric as TMSL (model.bim, a read-only getDefinition call) and converts it on this PC. Nothing in Fabric changes. Save to Git writes semantic/<model>.ossie.yaml into the metadata project's folder, where it shows in Changes, ready to commit.

The report sorts every object into three groups:

Group What it means
Portable Any Ossie tool reads it: tables, columns, keys, relationships, descriptions, and measures that are one aggregate over one column (SUM, AVERAGE, MIN, MAX, COUNTA, DISTINCTCOUNTNOBLANK), written as SQL with the DAX kept beside it
Kept for Fabric only Stored in the file's Power BI section, so a model sent to Ossie and back is the same model, but other tools don't see it: other DAX measures, security roles, hierarchies, calculation groups, perspectives, translations, format strings, display folders, lineage tags
Not converted Anything that can't be carried at all, named one by one. Nothing is dropped without being listed

Import from Ossie#

Pick an Ossie file (.yaml or .json) from the project or from disk, and what to do with it:

  • Update an existing model (the default). The file's tables, columns, measures and relationships are laid over the model. What the file doesn't mention stays, such as security roles, hierarchies and measures written in Fabric, unless you untick it in the preview. Lineage tags are kept by name, so reports on the model keep working.
  • Replace an existing model with exactly what the file holds.
  • New model in the environment's workspace.

The preview lists every table, column, measure and relationship that is added, changed or removed, and what can't be carried over. Nothing is written until you confirm. Writing updates the model's definition only; no refresh runs.

New tables read the layer's lakehouse through the model's existing Direct Lake connection, or through Direct Lake on OneLake for a new model.

Measures written in SQL become DAX when the SQL is one aggregate over one column, or a division of those. Anything else (CASE, window functions, filtered aggregates) is added as BLANK() and marked Needs DAX: the measure shows blank until someone writes it in DAX. Ossie has no place for a composite key in Power BI, a many-to-many relationship, or a time zone on a date and time column, so those are listed as not converted.

Keeping Git in step#

After an import, Save TMDL to Git reads the model back from Fabric as TMDL and writes it to semantic/<model>.SemanticModel/ in the Power BI project layout, next to the Ossie file. Files Fabric no longer returns are removed from that folder.

How this works#

  • Reads: the model's definition from Fabric (getDefinition, as TMSL or TMDL). Item.ReadWrite.All, which sign-in already asks for.
  • Writes: the model's definition (updateDefinition) or a new model, only after you confirm; files under semantic/ in the metadata project's folder.
  • Converts on this PC with the Apache Ossie Microsoft converter (Apache License 2.0), vendored in sidecar/fabric_desktop/_vendor/ossie_microsoft. No AI is involved.
  • KratosForge doesn't ship Microsoft's Tabular Object Model libraries, so TMDL goes through Fabric's own TMSL format rather than being converted offline.

Engine methods#

Method What it does Writes
meta_model_ossie_models Models in the environment's workspace Nothing
meta_model_ossie_export A model as Ossie YAML, with counts and the report Nothing
meta_model_ossie_save Saves an Ossie file under the project's folder The file
meta_model_ossie_read Reads an Ossie file from the project's folder Nothing
meta_model_ossie_preview What an import changes, and what it can't carry Nothing
meta_model_ossie_import Writes the import; without confirmed it only asks The semantic model in Fabric
meta_model_tmdl_save The model's TMDL into semantic/<model>.SemanticModel/ Files

Need a hand?

Find a fix in troubleshooting, or share a reproducible issue with the community.

Get support ↗Improve this guide on GitHub ↗

Search documentation

Start typing to search all 129 guides.

Search runs in your browser esc to close