Skip to main content

Universal lineage graph for Power BI (.pbix) files, from physical source to report display.

Project description

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
# or
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)  # {'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).

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    # 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)

Sample files

Development

uv sync --extra dev
uv run pytest
uv build

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pbix_atlas-1.0.0.tar.gz (84.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pbix_atlas-1.0.0-py3-none-any.whl (65.3 kB view details)

Uploaded Python 3

File details

Details for the file pbix_atlas-1.0.0.tar.gz.

File metadata

  • Download URL: pbix_atlas-1.0.0.tar.gz
  • Upload date:
  • Size: 84.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pbix_atlas-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f1a5c7a0f7269f3d48a44478995d0998027ccb6281f66055a048eb9ef93b1443
MD5 40e2b1e6d1646a5110261e024c34409d
BLAKE2b-256 b91b6389636ec32163ff3b2369023abca93d685499818b2cca1a19a5402c131d

See more details on using hashes here.

File details

Details for the file pbix_atlas-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pbix_atlas-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 65.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pbix_atlas-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ed51aba62be2b9625a2b96992c9c4b6e56ea40834afb291bda3473829b456c59
MD5 0ae2d4c6b734f594f3ffecfecf8b8a08
BLAKE2b-256 b98b0dc2e9856e36727f3d65b3b7291d802c52600b0bcba6c13540bcd6a53709

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page