← SkillSafe / PBI Desk

Your semantic model, read before anyone tells you it is wrong

Paste one Power BI project export — a .tmdl definition, a model.bim, the PBIP report.json, a Performance Analyzer capture, or all of them concatenated. A reader in this page parses it, builds the relationship graph, counts the active filter paths between every joined pair, and lints every DAX measure — before anything is sent anywhere. Then five lanes work the same project.

Each example ships with a saved model run for every lane, so you can see all five complete outputs without signing in and without spending a credit.

PBI Desk is an independent tool. It is not affiliated with, endorsed by, or connected to Microsoft, Power BI or Microsoft Fabric.

TMDL, model.bim / TMSL JSON, a PBIP report.json, a Performance Analyzer export, or several of them pasted one after another. Separator lines of the form // ---- file: definition/model.tmdl ---- are understood; without them the reader carves out the JSON documents itself.

Drop .tmdl, .bim, .json or .txt files here, or
Paste a project export to price the run.

Your past reviews

Reviews are saved to your SkillSafe account when you are signed in, and mirrored in this browser so the list paints instantly.

How to get the paste

  1. The semantic model. In Power BI Desktop, save the file as a Power BI project (.pbip). The model lands under <name>.SemanticModel/definition/ as TMDL text files — one per table, plus model.tmdl and relationships.tmdl. Paste them one after another. A model.bim from an older project, or TMSL scripted out of the XMLA endpoint, works just as well.
  2. The report layout. From the same project folder, <name>.Report/report.json — or, in the newer PBIR format, the per-page page.json and visual.json files.
  3. The capture. View → Performance analyzer → Start recording, interact with the slow page, then Export. That gives a JSON file with an events array. A pasted copy of the table in that pane also works.
  4. Concatenate. Paste them together, in any order. Separator lines of the form // ---- file: definition/model.tmdl ---- are read as file boundaries; without them the reader carves out the JSON documents on its own.

Nothing is uploaded by the reader. The parse, the relationship graph, the DAX lint and every CSV on this page are computed in your browser. Only the run itself sends text, and it sends the clipped project plus the facts the reader computed — never the file.