Power BI数据模型设计难题:星型架构构建咨询
构建Power BI资金跟踪器星型模型方案
1. 拆分核心维度表
先创建4个独立的维度表,每个表必须包含唯一键(消除重复值,确保一对多关系):
(1)部门维度表
整合所有唯一的申请机构、部门、子部门记录,新增唯一键(比如部门ID,可通过Power Query的「添加索引列」或「分组依据」生成):
- 字段示例:部门ID、申请机构、部门、子部门
(2)合作伙伴维度表
提取计划预算表中所有唯一的合作伙伴信息,新增唯一键合作伙伴ID:
- 字段示例:合作伙伴ID、合作伙伴名称
(3)时间维度表
生成包含2024、2025年的时间维度(若需按季度/月份跟踪可扩展),确保年份值唯一:
- 字段示例:年份ID、年份、季度(可选)、月份(可选)
(4)捐赠方维度表
提取资金表中所有唯一的捐赠方信息,新增唯一键捐赠方ID:
- 字段示例:捐赠方ID、捐赠方名称
2. 重构事实表
将两张业务表转换为事实表,仅保留度量值和维度外键:
(1)计划预算事实表
保留计划预算金额,关联对应维度的外键:
- 字段示例:部门ID、合作伙伴ID、年份ID、计划预算金额
(2)到账资金事实表
保留到账资金金额,关联对应维度的外键:
- 字段示例:部门ID、捐赠方ID、年份ID、到账资金金额
3. 建立表关系
在Power BI模型视图中,建立单向筛选的一对多关系(维度表 → 事实表):
- 部门维度表 ↔ 计划预算事实表(通过
部门ID) - 部门维度表 ↔ 到账资金事实表(通过
部门ID) - 合作伙伴维度表 ↔ 计划预算事实表(通过
合作伙伴ID) - 时间维度表 ↔ 计划预算事实表(通过
年份ID) - 时间维度表 ↔ 到账资金事实表(通过
年份ID) - 捐赠方维度表 ↔ 到账资金事实表(通过
捐赠方ID)
4. 编写到位率度量值
用DAX创建核心度量值计算资金到位率:
资金到位率 = DIVIDE( SUM('到账资金事实表'[到账资金金额]), SUM('计划预算事实表'[计划预算金额]), 0 // 避免除以0报错,返回0 )
5. 模型验证
- 检查所有关系是否为一对多,无多对多报错
- 测试筛选逻辑:选择部门、年份、合作伙伴,验证到位率计算是否准确
- 若需按子部门筛选,确保部门维度表包含子部门字段且关系关联正确
关键注意事项
- 所有维度表必须无重复值,否则会引发关系异常
- 若计划预算表无申请机构/子部门字段,可通过部门字段关联到部门维度表的对应内容
- 时间维度表建议用Power Query生成,避免手动输入导致的年份格式不一致
内容的提问来源于stack exchange,提问作者Ahmed Walid Moulahoum
相关产品推荐
相关产品推荐

