You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Git高效存储Power BI数据集结构?表与度量关系存储方法

高效存储Power BI数据集结构并追踪变更的方案

一、替代手动复制的高效存储方式

1. 批量导出Power Query(M代码)到结构化文件

无需手动复制每个查询,通过工具实现批量导出:

  • Tabular Editor:连接Power BI数据集后,可一键导出所有Power Query查询为单独的.m文件,按查询类型(自定义函数、维度表、事实表)分类到对应文件夹,每个文件以查询名命名,Git能精准追踪单个查询的修改细节。
  • PowerShell脚本:通过Power BI的API或COM对象遍历所有查询,自动导出M代码到指定目录,适合嵌入自动化构建流程。

示例目录结构:

PowerBI-Dataset/
├── Queries/
│   ├── CustomFunctions/
│   │   ├── ExtractJsonFileContent.m
│   │   └── ...
│   ├── LookupTables/
│   │   ├── Countries.m
│   │   └── ...
│   └── FactTables/
│       ├── Sales.m
│       └── ...

2. 用TMDL存储完整模型结构

微软推荐的**TMDL(Tabular Model Definition Language)**是专为版本控制设计的结构化格式,每个模型对象(表、列、度量、关系)对应单独的文本文件,可读性强且Git友好:

  • 用Tabular Editor连接Power BI数据集后,直接导出为TMDL格式,自动生成如下结构:
    PowerBI-Dataset/
    ├── Model/
    │   ├── Tables/
    │   │   ├── SomeTable/
    │   │   │   ├── Columns/
    │   │   │   │   ├── Country.tmdl
    │   │   │   │   └── ...
    │   │   │   └── Measures/
    │   │   │       ├── Fail Rate_Int.dax
    │   │   │       └── Success Rate.dax
    │   │   └── Countries/
    │   │       ├── Columns/
    │   │       │   ├── heapCountryId.tmdl
    │   │       │   └── ...
    │   └── Relationships/
    │       ├── SomeTable_to_Countries.tmdl
    │       └── ...
    
    相比旧版TMSL,TMDL更易读,优先选择该格式。

3. 自动化DAX度量导出

用Tabular Editor直接按表分组导出度量,每个表的度量存到对应文件夹的.dax文件,避免手动从DAX Studio复制;导出时可自动添加所属表的注释,方便后续关联追踪。

二、表与度量的关系存储方案

1. 利用TMDL的结构化关联

TMDL格式天然解决关系追踪问题:

  • 每个度量文件的代码开头明确标注所属表,比如MEASURE 'Some Table'[Fail Rate_Int],Git能直接识别度量与表的归属关系。
  • 关系对象以单独的.tmdl文件存储,包含完整关联信息,示例:
    relationship SomeTable_to_Countries {
        fromTable = 'Some Table'
        fromColumn = CountryId
        toTable = Countries
        toColumn = heapCountryId
        cardinality = ManyToOne
        crossFilterDirection = Both
    }
    

2. 手动维护关系文档(适合非TMDL场景)

如果仍使用自定义文档格式,可采用两种方式:

  • 在每个度量文件开头添加注释,标注所属表、依赖的其他度量/列:
    -- 所属表:Some Table
    -- 依赖:[Total Failed Tickets_Int], [Total Created Tickets_Int]
    MEASURE 'Some Table'[Fail Rate_Int] = 
        DIVIDE(
            [Total Failed Tickets_Int],
            [Total Created Tickets_Int]
        )
    
  • 单独创建Relationships.md,用表格整理所有表关系:
    源表源字段目标表目标字段基数交叉筛选方向
    Some TableCountryIdCountriesheapCountryId多对一双向

内容的提问来源于stack exchange,提问作者Dennis S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:55:33