A Power BI custom visual that renders an interactive, topological lineage graph showing how Dataflows, Datasets, and Reports connect across your Power BI tenant.
- Topological stage layout — nodes arranged left-to-right by dependency depth
- S-curve edges with directional arrows
- Workspace, Dataflow, and Report filters with live search and workspace subtitle
- Node search with lineage filter — searching collapses the graph to matching nodes plus their full upstream/downstream lineage; use
◄/►buttons to jump between exact matches with a1 / 3counter - Dynamic summary bar — Total / Success / Failed / In Progress counts update live to reflect filtered nodes; shows
180 (617)format when a filter is active - Click a node to highlight its full upstream/downstream lineage
- Right panel — upstream/downstream list with direct/indirect indicators
- Impact bar — shows how many datasets and reports depend on a selected node
- Refresh status — Success / Failed / In Progress badges with relative timestamps
- Stage collapse — collapse any pipeline stage column
- Light / Dark theme — automatically matches the Power BI report theme
- Normal / Compact view toggle
- Timezone toggle — switch between your local timezone (
UTC+5:30) and UTC; timezone label shown directly in every timestamp - Failed Only filter
- Workspace color legend
- Drag-to-pan — click and drag on empty canvas to scroll the graph
- Zoom controls —
−/+buttons (20%–200%) andCtrl+Wheelto zoom; reset button restores 100% zoom and scroll position
- Download the latest
.pbivizfile from the Releases page of this repository - In Power BI Desktop or Service: Insert > More visuals > Import from file
- Select the
.pbivizfile - Follow the DAX Setup steps below
# Prerequisites: Node.js 18+, npm
npm install -g powerbi-visuals-tools
# Clone and install
git clone <this-repo-url>
cd LineageVisualPBI
npm install
# Dev server (hot reload in Power BI)
npm run start
# Production package
npm run package
# Output: dist/LineageVisualPBI*.pbivizThe visual requires a single flat table added to your Power BI model.
You need one table with the following concept representing a lineage connection between an upstream node (Source) and a downstream node (Target).
| Field Type | Required | Description |
|---|---|---|
sourceId |
Yes* | Globally unique ID for the upstream item. *Required only if a source node exists. |
sourceName |
No | Display name of the upstream item |
sourceType |
No | Exactly: Dataflow, Dataset, or Report |
sourceWs |
No | Workspace display name for the upstream item |
sourceStatus |
No | One of: success, failed, progress |
sourceTime |
No | Last successful refresh timestamp for the upstream item (expected in UTC) |
sourceUrl |
No | Direct URL to the item in Power BI Service |
targetId |
Yes* | Globally unique ID for the downstream item. *Required only if a target node exists. |
targetName |
No | Display name of the downstream item |
targetType |
No | Exactly: Dataflow, Dataset, or Report |
targetWs |
No | Workspace display name for the downstream item |
targetStatus |
No | One of: success, failed, progress |
targetTime |
No | Last successful refresh timestamp for the downstream item (expected in UTC) |
targetUrl |
No | Direct URL to the item in Power BI Service |
A sample Excel file (
PBI_Lineage_Flat.xlsx) with the correct column structure is included in this repo. Import it into Power BI to see how the single flat table works.
- Add the PBI Lineage Explorer visual to a report page
- In the Fields pane, map the
sourceId,sourceName,sourceType,sourceWs, etc. to their respective placeholders under Source Data and Target Data. - The lineage graph will render automatically!
PBI_Lineage_Flat.xlsx contains a single sheet:
| Sheet | Description |
|---|---|
Sheet1 |
Flat table containing both node details and dependency edges |
Import this single flat table into your Power BI model to get started immediately. No relationships or joins are necessary.
| Value | Colour | Represents |
|---|---|---|
Dataflow |
Blue | Power BI Dataflows (Gen1 or Gen2) |
Dataset |
Green | Semantic models / Datasets |
Report |
Orange | Power BI Reports |
| Value | Badge | Meaning |
|---|---|---|
success |
Green | Last refresh succeeded |
failed |
Pink | Last refresh failed |
progress |
Yellow (animated) | Refresh currently running |
| (blank) | — | No refresh data |
| Input | Action |
|---|---|
Ctrl+F |
Focus the search box |
Esc |
Clear selection, search, and failed filter |
◄ / ► buttons |
Jump to previous / next search match |
Click + Drag (canvas) |
Pan the graph |
Ctrl+Scroll |
Zoom in / out |
− / + buttons |
Step zoom out / in (20% steps, 20%–200%) |
Ctrl+0 |
Reset zoom to 100% and scroll to origin |
Reset ⊙ button |
Restore 100% zoom and scroll to origin |
LineageVisualPBI/
├── src/
│ ├── visual.ts # Main visual entry point + static DOM
│ ├── interfaces.ts # NodeData, EdgeData types
│ ├── settings.ts # Formatting settings
│ ├── renderer/
│ │ ├── Toolbar.ts # Filter dropdowns with search
│ │ ├── CardBuilder.ts # Node card renderer
│ │ ├── EdgeDrawer.ts # SVG S-curve edge drawing
│ │ ├── LayoutEngine.ts # Topological stage layout
│ │ ├── RightPanel.ts # Upstream/downstream panel
│ │ ├── TooltipManager.ts # Hover tooltips
│ │ └── ImpactBar.ts # Impact analysis bar
│ └── utils/
│ ├── helpers.ts # Color palette, escaping
│ └── graphUtils.ts # Ancestor/descendant traversal
├── style/
│ └── visual.less # All styles
├── capabilities.json # Field well definitions
├── pbiviz.json # Visual metadata
├── PBI_Lineage_Flat.xlsx
└── Working PBI DAX Code HTML viewer.txt # Standalone HTML version (no custom visual needed)
npm run start # Dev server at https://localhost:8080 (enable in Power BI settings)
npm run package # Build .pbiviz for distribution
npm run lint # ESLint checkTo test with the dev server in Power BI:
- Go to Power BI Service → Settings → Enable developer visual
- Add the Developer Visual from the visualization pane to a report
If you find this visual useful, consider supporting the project:
Sunil Shetty — snlshetty87@gmail.com
MIT


