Install any skill in seconds. Free to start, no credit card required.
Get Started Free →data-goblin/tmdl
Direct TMDL file authoring and BIM-to-TMDL conversion for semantic models in PBIP projects. Automatically invoke when the user asks to "edit TMDL", "add a measure in TMDL", "TMDL syntax", "fix formatString", "fix summarizeBy", "TMDL indentation", "convert BIM to TMDL", "add a column description", "create a calculated column in TMDL", or mentions .tmdl file editing or BIM-to-TMDL migration.
Passed 21 of 22 test cases with the skill, and 16 of 22 without it.
and 3 more in the full report
5 fixed16 passed either way1 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
This benchmark measured an earlier version of the skill.
A newer attempt on gemini-3.8-flash on 10/20/2026 did not produce a publishable comparison (not comparable). The snapshot above is the previously measured run.
One of 5 test cases the skill fixed. Same model, same prompt, with and without the skill.
I am manually adding two table declarations to TMDL files in a PBIP project: one table is called 1) Core Metrics and another table is called _Dimensions. Write the TMDL header lines for both tables.
| Checked | Without skill | With skill |
|---|---|---|
| Single-quotes the table name '1) Core Metrics' because it starts with a digit. | Missed | Passed |
| Leaves the table name _Dimensions unquoted because simple underscore-prefixed names do not require quotes. | Passed | Passed |
The instructions your model reads when the skill loads.
Expert guidance for authoring and editing TMDL (Tabular Model Definition Language) files directly in PBIP projects.
This skill is a last resort. Direct TMDL file editing lacks the validation, atomicity, and DAX query capabilities of the Tabular Editor CLI, Power BI MCP server, or the
connect-pbidskill (TOM via PowerShell). Use those tools when available. TMDL editing is appropriate when:
- Working with PBIP files in a Git repo without Power BI Desktop open
- No Tabular Editor CLI or MCP server is installed
- Making quick text-level fixes (descriptions, format strings, display folders) where a full tool chain is overkill
Direct TMDL editing does not validate DAX syntax, check referential integrity, or verify that property values are valid. Errors will only surface when the model is next loaded in Power BI Desktop or deployed via XMLA. Use the
pbip-validatoragent to check TMDL files for syntax issues, indentation errors, and referential integrity before opening in PBI Desktop.
Activate only when the Tabular Editor CLI, Power BI MCP server, or connect-pbid skill are not available, and tasks involve:
.tmdl files directly (measures, columns, tables, relationships)summarizeBy or formatString values/// descriptions and // comments/// (triple-slash) sets the Description property on the object that immediately follows it. A /// line must be immediately followed by a declaration (measure, column, table, etc.); never by a blank line or another ///. Use // for regular comments.TmdlSerializer default to IndentationMode.Tabs. Spaces are also valid (IndentationMode.Spaces, default 4 per level), but be consistent within a file; mixed or incorrect indentation will break the model. Properties of a table are indented one level; properties of a column (which belongs to a table) are indented two levels.expression <name> in expressions.tmdl and a name declared by table <name> in tables/*.tmdl collide; Power BI Desktop fails the load with 'duplicate member <name>'. Pick distinct names; the conventional fix is to suffix the M expression with Query or Source and have partitions reference it via source = #"<Name> Query". validate_pbip.py enforces this as an ERROR.| File | Contents | Location |
|---|---|---|
model.tmdl | Model configuration, ref table entries, query groups, annotations | definition/ |
database.tmdl | Compatibility level, model ID | definition/ |
relationships.tmdl | All relationships between tables | definition/ |
expressions.tmdl | Shared M expressions and parameters | definition/ |
functions.tmdl | DAX user-defined functions (reusable parameterized DAX) | definition/ |
test cases passed, vs 16 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.