Power BI 数据模型关键信息提取
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_1f020d8e/powerbimodelextract。
技能介绍
要解决什么问题
在 Power BI Service 或 Fabric 上,语义模型的完整定义往往藏在冗长的 TMDL 里:度量、列、关系、DAX、Power Query M 与分区 SQL 分散在多文件中,还夹着大量 lineageTag、PBI_* 注解、formatString 等元数据噪声。人工翻仓库或 PBIP 里的 .SemanticModel 文件夹,既慢又容易漏掉业务逻辑。
本技能面向「需要快速读懂模型在算什么、数据从哪来」的场景:把线上模型或本地 PBIP 语义层,收敛成可检索、可给同事或 Agent 阅读的 Markdown 摘要。
技能如何工作
工作流分两阶段,可由 batch_extract.py 一次跑完,也可用 compress_tmdl.py 单独处理已有本地模型:
- 抽取:通过 Fabric / Power BI REST API 的
getDefinition等操作,把工作区内的语义模型下载为原始 TMDL 目录(extracted_models/<模型名>.SemanticModel/)。 - 压缩:解析 TMDL,剔除噪声行与自动生成的小助手查询,按表重组为 Markdown——关系表、数据源/ETL(M 代码)、各表的 Measures(DAX 代码块)、Columns(类型表)、分区来源;Power Query 转义符会展开为真实换行。
常用能力包括:按名称 --filter、只拉有计划刷新的 --scheduled-only、仅下载不压缩的 --no-compress、以及用 list_all.py / list_refresh.py 查工作区与刷新配置。认证按 FABRIC_TOKEN / --token → Azure CLI → MSAL 设备码 依次尝试。
适用边界与注意点
- 未提供
workspace_id时,应先枚举工作区再选择目标;租户 DLP 可能拦 Fabric 列表 API,脚本会回退到经典 Power BI REST,但仍可能遇到 403。 getDefinition是长耗时操作,大模型抽取可能要几十秒;脚本会轮询直到完成。- 在 Windows 上运行脚本目录下的 Python 时,需设置
PYTHONIOENCODING=utf-8与PYTHONUTF8=1,否则含中文/emoji 的输出可能在 GBK 下崩溃。 - 压缩比例与保留字段可在
compress_tmdl.py的NOISE_PATTERNS等处调整,修改会同时影响批量抽取路径。
使用场景
- 接手 Fabric 工作区里多个语义模型,需在不上 Power BI Desktop 的情况下梳理度量、关系与 Power Query 来源。
- 本地 PBIP 项目已检出 `.SemanticModel` 文件夹,要把 TMDL 压成可检索的 Markdown 供代码评审或归档。
- 合规或盘点场景下只关心有计划刷新的线上数据集,需按 `--scheduled-only` 批量下载并生成 `_summary.md`。
- 尚未掌握 workspace_id,要先列出可访问工作区并对照刷新历史,再选定目标模型做抽取。
适合人员
- 维护多套 Power BI 语义模型的 BI 开发,需要把 Service 端定义整理成同事能读的度量与关系说明。
- 做模型治理或源端核查的数据分析师,要批量查看 DAX 度量与 Power Query / 分区 SQL 来源。
- 迁移或重构前在客户环境做模型盘点的实施顾问,需经 REST 导出完整 TMDL 并压缩要点。
- 参与 PBIP Git 协作的数据工程师,希望在 PR 里对照压缩后的表结构、度量清单而非原始 TMDL 噪声。