io.github.fabienfrfr/pbix-lineage
Bidirectional data lineage graph for Power BI (.pbix) files, from source to display
Open source Open in the app JSON README (API)
About
Bidirectional data lineage graph for Power BI (.pbix) files, from source to display
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- fabienfrfr
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.1.2
- Last push
- 2026-07-29T17:02:02Z
- Repository state
- ativo
- Language
- Python
- License
- NOASSERTION
- Added
- 2026-08-29 03:02:46
- Updated
- 2026-08-29 03:02:46
- Origin id
io.github.fabienfrfr/pbix-lineage
README
<h1 align="center">
<p>🌐 PBIX‑Atlas</p>
</h1>
<p align="center">
<a href="https://pypi.org/project/pbix-atlas/">
<img alt="PyPI" src="https://img.shields.io/pypi/v/pbix-atlas?color=orange">
</a>
<a href="https://github.com/fabienfrfr/pbix-atlas/">
<img alt="GitHub" src="https://img.shields.io/badge/github-fabienfrfr%2Fpbix--atlas-black?logo=github">
</a>
<a href="https://github.com/fabienfrfr/pbix-atlas/actions">
<img alt="CI" src="https://img.shields.io/github/actions/workflow/status/fabienfrfr/pbix-atlas/tests.yml?label=tests">
<a href="https://registry.modelcontextprotocol.io/?q=pbix-atlas">
<img alt="MCP Registry" src="https://img.shields.io/badge/MCP-registry-purple?logo=protocols">
</a>
</p>
<h3 align="center">
<p>Full lineage graph for Power BI — from source to visual field</p>
</h3>
<!-- mcp-name: io.github.fabienfrfr/pbix-atlas -->
**PbixAtlas** is an Universal lineage graph for Power BI `.pbix` files: source to visual field in one traversable graph.
```
source (HTTP, OData, SQL, file...) --> Power Query (M)
--> column / calculated column --> measure (DAX)
--> field displayed in a report visual
```
## Install
```bash
pip install pbix-atlas
# or
uv add pbix-atlas
```
## Quick start
```python
from pbix_atlas import LineageGraphBuilder, upstream, downstream, print_tree, find_nodes
graph = LineageGraphBuilder().build("my_report.pbix")
find_nodes(graph, "customer_name")
print_tree(graph, "visual_field::my_report.pbix::Page1::16::customer_name", direction="upstream")
print_tree(graph, "source::odata::example.com/odata/", direction="downstream")
```
## Export
```python
from pbix_atlas import export_graphml, export_nodes_csv, export_edges_csv, graph_summary
graph_summary(graph) # {'query': 70, 'column': 183, ...}
export_graphml(graph, "lineage.graphml") # Gephi / yEd
export_nodes_csv(graph, "nodes.csv")
export_edges_csv(graph, "edges.csv")
```
## Codegen — standalone Python pipeline
Generates a single Python file reproducing a report's full chain: source → extraction → Power Query → semantic model → Vizro dashboard. The M source is executed at runtime by the built-in interpreter, not pattern-matched. Unimplemented functions raise `MRuntimeError` (no silent stubs).
```bash
pip install "pbix-atlas[codegen]"
pbix-atlas-codegen my_report.pbix -o pipeline.py
```
```python
from pbix_atlas import generate_python_pipeline
generate_python_pipeline("my_report.pbix", "pipeline.py")
```
## HTTP API / MCP server
```bash
uv sync --extra api
uv run pbix-atlas # http://127.0.0.1:8080
```
- REST: `POST /graphs`, `/search`, `/upstream`, `/downstream`, `/tree`, `/export`, `/codegen`
- MCP (streamable HTTP): `http://127.0.0.1:8080/mcp/`
- Env vars: `PBIX_LINEAGE_HOST`, `PBIX_LINEAGE_PORT`
## Architecture
| Module | Responsibility |
|---|---|
| `models.py` | Node/edge types and shared data structures |
| `sources.py` | Physical source detection (configurable patterns) |
| `pbix_model.py` | Adapter isolating from `pbixray` |
| `m_lexer.py` / `m_parser.py` | Built-in M tokenizer and parser |
| `m_interpreter.py` | M runtime interpreter + stdlib |
| `dax_translate.py` | DAX → Python (supported subset) |
| `dax.py` | DAX reference parsing |
| `mquery.py` | Power Query dependencies (table-level) |
| `layout.py` | Internal `Report/Layout` format parsing |
| `graph_builder.py` | Orchestrator: builds the `networkx.DiGraph` |
| `navigation.py` | Upstream/downstream traversal, search, export |
| `codegen.py` | Python pipeline code generation |
| `api/app.py` | FastAPI + MCP mount ([FastMCP](https://gofastmcp.com/)) |
## Sample files
- [Retail Analysis Sample PBIX](https://download.microsoft.com/download/9/6/D/96DDC2FF-2568-491D-AAFA-AFDD6F763AE3/Retail%20Analysis%20Sample%20PBIX.pbix) (Microsoft)
- [Sales & Returns Sample v201912](https://github.com/microsoft/powerbi-desktop-samples/raw/refs/heads/main/Sample%20Reports/Sales%20%26%20Returns%20Sample%20v201912.pbix) (Microsoft)
## Development
```bash
uv sync --extra dev
uv run pytest
uv build
```