Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

jonathan-pap/PowerBI-Lineage

Open more actions menu

Repository files navigation

Power BI Documenter

Lineage · Audit · Wiki-ready Markdown

Open a PBIP project folder — get a searchable dashboard plus nine Markdown docs ready for ADO Wiki or GitHub. Runs entirely in your browser (nothing uploads) or as a local CLI.

Try it — no install needed

Tests 311/311 Runtime deps 0 Node ≥18

Power BI Documenter landing page

What you get

  • Interactive dashboard — 11 tabs: Sources, Tables, Columns, Relationships, Measures, Calc Groups, Functions, Pages (with layout wireframe), Unused, Lineage (search-driven), Documentation
  • Wiki-ready Markdown — up to 9 generated docs, paste-ready for ADO Wiki or GitHub. Lite / Detailed toggle per doc — paste-into-wiki summary for stakeholders, full reference for engineers. Cross-doc links between them resolve in the dashboard, on GitHub, and on ADO Wiki
  • Improvements audit — 16 checks across five severity tiers (high / medium / low / info / strengths) including broken-DAX-reference detection
  • Source Map — flat PBI-column → physical-source lineage with CSV export
  • Page layout wireframe — SVG thumbnail of each page showing visuals at true canvas positions
  • Privacy by default — browser-mode files never leave your machine; CLI binds to loopback only

Tour

Inspect the model

Measures tab Columns tab
Measures — DAX dependencies, where-used per visual + page, direct/indirect/unused status, descriptions inline. CSV export honours filters. Columns — types, usage counts, status, sortable + searchable. Same CSV export pattern.
Tables tab Tables tab — drill-down
Tables — grouped by role (Fact / Dimension / Bridge / Calc Group). Per-table stats for columns, measures, keys, FKs. Tables drill-down — expand any table to see columns, measures, and per-relationship cardinality chips (*:1, for bidi).

Relationships, sources & lineage

Relationships tab Sources tab
Relationships — active + inactive, cardinality (one/many on each side), cross-filter direction (single → / both ↔). CSV export. Sources — connection buckets, partition modes, physical-source index (what breaks if this source goes away?), hand-written SQL from Value.NativeQuery, M-step breakdown classifying every ETL step, raw M expressions on demand.
Lineage view Unused tab
Lineage — search any measure or column from the tab itself, or click an entity from any other tab. Shows upstream DAX dependencies + source tables + functions, and downstream visuals + measures that feed into it. Unused — orphan measures, dead-chain measures, indirect-use detection. Pairs with the Improvements audit's broken-reference detection.

Pages, functions, calc groups

Pages tab — overview Pages tab — wireframe
Pages overview — every page in the report with visual count, slicers, measure / column bindings. SVG wireframe — each page's visuals at true canvas positions. Charts, cards, slicers, tables, maps — shapes and buttons deliberately filtered.
Pages tab — bindings Functions tab
Per-visual bindings — every measure + column each visual consumes, with type chips. Hover the wireframe for field-well tooltips. UDF reference — parameters, body, and every measure that calls each function. Tabular 1702+.
Calc Groups tab
Calc Groups — items, precedence, format-string expressions per item.

Wiki-ready Markdown

Documentation tab with Model technical specification

Nine Markdown documents — paste-ready for ADO Wiki or GitHub, anchor-stable, with cross-doc links that resolve everywhere.

Doc What's in it
Model Technical spec — front matter, schema summary, per-table breakdown, relationships, pages roll-up
Data Dictionary Per-table column catalog with PK / FK / CALC / HIDDEN badges + textual star-schema fragments (FK targets, role tags)
Sources Data-sources catalog, partition modes, field parameters, composite-model proxies
Measures A–Z reference with DAX, dependencies (Depends on / Used by), per-visual + per-page bindings
Functions UDF reference — parameters, description, body
Calc Groups Calculation-group reference with per-item descriptions
Pages Per-page visual catalog — type, title, field bindings for every visual
Improvements Prioritised action list — severity-tiered with rationale
Index Alphabetical glossary — every named entity links to its full reference in the companion docs

Plus a Changelog tab exposing the project's release history.

Try it

Browser (no install)

→ Open the browser build — requires Chrome, Edge, or Opera (File System Access API).

  1. Click Open folder — pick the PBIP project parent folder (the one that contains both <Name>.Report and <Name>.SemanticModel). Or click Try a sample for a one-click demo.
  2. When multiple project pairs exist under one parent, a pair-picker lets you choose which Report + Semantic Model to load. Report-only and Model-only modes are also supported.
  3. Dashboard renders in the same page.

Firefox / Safari users: run the CLI (see below) — the File System Access API is Chromium-only.

Running — CLI mode

Requires Node.js 18+ and a .Report folder with its .SemanticModel sibling.

Double-click (Windows):

launch.bat

First run does npm install + npm run build, then starts the app and opens your browser.

From the terminal:

npm install
npm run build
node dist/app.js

The app listens on http://127.0.0.1:5679 (loopback only — nothing leaves your machine). Paste the .Report path or use the picker. Recent reports are remembered.

How it works

Browser mode

The same parser + data-builder that power the CLI run client-side via three small shims:

  • src/browser/fs-shim.ts — pretends to be fs but reads from an in-memory Map
  • src/browser/path-shim.ts — POSIX-style path replacement
  • src/browser/fsa-walk.ts — walks a FileSystemDirectoryHandle into the Map

An import-map in docs/index.html redirects bare import … from "fs" / "path" to the shims. The parser never knows the difference.

Build + deploy

npm run build:browser    # → ./docs/
npm run serve:browser    # → 127.0.0.1:5700

.github/workflows/pages.yml auto-publishes docs/ to GitHub Pages on every push to main.

Project layout

src/
  pbir-reader.ts       Read-only access to PBIR report/page/visual JSON
  model-parser.ts      findSemanticModelPath + TMDL + BIM parsers
  report-scanner.ts    Walks visuals/filters/objects to extract field bindings + positions
  data-builder.ts      Cross-references model + report into FullData
  md-generator.ts      9 MD docs (Lite + Detailed modes), ADO Wiki-safe anchors, cross-doc xref links
  improvements.ts      16-check audit (incl. broken-ref detection) — severity-tiered
  html-generator.ts    Dashboard HTML template
  client/              Dashboard runtime (tabs, search, sort, lineage view, wireframe)
                         main.ts · render/escape.ts · render/md.ts · globals.d.ts
  render/              Shared server-side escape helpers
  app.ts               CLI HTTP server + landing page
  browser/             FSA walker + shims + entry shell + pair-picker logic
                         entry.ts · fsa-walk.ts · fs-shim.ts · path-shim.ts · pair-picker.ts

scripts/
  build-browser.mjs    Assembles docs/ from dist/ + browser TS output
  bake-sample.mjs      Bakes a sample PBIP into docs/sample-data.json
  serve-browser.mjs    Tiny static server for local testing

changelog/             Per-version release notes (one file per release)
tests/                 node:test suites — 311 tests, zero framework deps

Zero runtime dependencies

Runtime deps: none. Only Node builtins (fs, path, http, crypto, child_process). Dev-deps are typescript + @types/node only — needed to build.

Developing

npm run typecheck    # tsc --noEmit
npm test             # compile + run Node's built-in test runner
npm run build        # compile CLI to dist/
npm run build:browser  # compile + assemble docs/ + bake sample

Tests use the stdlib node:test module. .github/workflows/ci.yml runs typecheck + tests + build on every push and PR across Node 18 / 20 / 22.

Publishing to Azure DevOps Wiki

Each of the nine generated MDs starts with an HTML comment suggesting its wiki page name:

<!-- Suggested ADO Wiki page name: Health_and_Safety/Measures -->
# Measures Reference

To publish:

  1. Open the dashboard for your report, switch to the Documentation tab
  2. For each doc (Model / Data Dictionary / Sources / Measures / Functions / Calc Groups / Pages / Improvements / Index):
    • Click ⎘ Copy to copy the markdown
    • In ADO Wiki, create a new page with the name from the <!-- Suggested ADO Wiki page name: ... --> hint
    • Paste
  3. If you want ADO's auto-TOC instead of the hand-rolled one, type [[_TOC_]] at the top of the page

Compatibility

Feature ADO Wiki GitHub Dashboard
Anchors (jump-to nav, cross-references) ✅ via adoSlug algorithm
Same-doc anchor links ([text](#anchor)) ✅ scrolls within doc
Cross-doc links ([text](DocName.md#anchor)) ⚠ rename .md → page-path on paste ✅ if files share a folder ✅ tab-switches + scrolls
<details> / <summary> collapsibles ✅ native ✅ native ✅ native
Pipe tables
Fenced dax code blocks ✅ syntax-highlighted ✅ syntax-highlighted
```mermaid lineage / star fragments ⛔ not emitted (render-quality wasn't reliable across targets) ⛔ not emitted ⛔ not emitted
Badge <span> styling ⚠ CSS stripped — emoji-prefixed plain text (🔑 PK) ⚠ same fallback ✅ styled pill
Auto-anchor from heading

Every anchor link is verified by tests/md-anchors.test.ts — drift fires CI.

Changelog

changelog/ — one file per release. Full index in changelog/README.md. Future direction is open-ended; feature requests welcome via Issues.

Latest release: v0.11.7 — Default tab on first load is now Sources (was Measures), and Measures + Columns sort no longer flips to ascending on report reload. Small UX defaults that were quietly wrong.

About

Generate documentation from Power BI PBIP projects — runs in your browser (nothing uploaded) or as a local CLI. Outputs a searchable dashboard plus 9 Markdown docs ready for ADO Wiki or GitHub. Measures, pages, lineage, and a model-health audit.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.