pbix-atlas
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
pip install pbix-atlas
uv add pbix-atlas
Quick start
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
from pbix_atlas import export_graphml, export_nodes_csv, export_edges_csv, graph_summary
graph_summary(graph)
export_graphml(graph, "lineage.graphml")
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).
pip install "pbix-atlas[codegen]"
pbix-atlas-codegen my_report.pbix -o pipeline.py
from pbix_atlas import generate_python_pipeline
generate_python_pipeline("my_report.pbix", "pipeline.py")
HTTP API / MCP server
uv sync --extra api
uv run pbix-atlas
- 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) |
Sample files
Development
uv sync --extra dev
uv run pytest
uv build