维度表能否包含多类数据集?多维度属性建模优化咨询
用单一整合维度表替代多独立维度表的可行性方案
完全可以这么做,这其实是这类场景下非常高效的实践方式——毕竟你的源数据本身就来自同一张结构一致的表,没必要硬拆成30多张重复的维度表。
为什么这个思路靠谱?
- 减少冗余:不用维护一堆结构一模一样的表,存储成本和后续的同步、修改成本都能大幅降低
- 统一管理:所有维度数据的增删改都在单表操作,避免多表同步时出现数据不一致的问题
- 适配表格模型:通过记录类型字段做过滤,在表格模型里能轻松生成各个维度的逻辑视图,用起来和独立维度表没区别
具体怎么落地?
创建整合维度表
从源表Reference抽取数据时,新增一个DimensionType字段,用来标记每条记录所属的维度(比如"地区"、"产品类别"、"支付方式"这类)。表结构可以这么设计:CREATE TABLE UnifiedDimension ( ID INT, VALUE VARCHAR(255), SORTORDER INT, DimensionType VARCHAR(50), PRIMARY KEY (ID, DimensionType) -- 用组合主键,防止不同维度出现相同ID的冲突 )组合主键很关键,因为不同维度里可能存在ID重复的情况,加上
DimensionType一起做主键就能保证每条记录的唯一性。在表格模型中生成维度视图
拿Power BI举例,用DAX写个计算表就能快速生成对应维度的逻辑视图:地区维度 = FILTER( UnifiedDimension, UnifiedDimension[DimensionType] = "地区" )如果是SSAS Tabular,直接基于
UnifiedDimension创建视图,过滤对应的DimensionType即可。这些生成的视图和普通维度表功能一致,能正常和事实表建立关联关系。
几个要注意的细节
- 确保同步数据时
DimensionType的取值准确,别把不同维度的数据混在一起 - 如果数据量很大,给
DimensionType加个索引,能提升过滤查询的速度 - 要是不同维度需要给不同用户开放权限,基于
DimensionType设置行级权限比管理30多张表方便得多
内容的提问来源于stack exchange,提问作者LordRofticus
相关产品推荐
相关产品推荐

