Skip to main content
Glama
fabienfrfr

io.github.fabienfrfr/pbix-atlas

by fabienfrfr

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

pip install pbix-atlas
# or
uv add pbix-atlas

Related MCP server: powerbi-mcp

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
A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

Maintainers
<1hResponse time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fabienfrfr/pbix-atlas'

If you have feedback or need assistance with the MCP directory API, please join our Discord server