我想在 SSIS/SSAS 中填充星型模式/多维数据集。
我准备了所有维度表和事实表、主键等。
源是一个“平面”(项目级别)表,我现在的问题是如何将其拆分并将其从一个表中获取到相应的表中。
我做了一些谷歌搜索,但找不到令人满意的解决方案。可以想象这是 BI 开发中相当普遍的问题/情况?!
谢谢,亚历克斯
我想在 SSIS/SSAS 中填充星型模式/多维数据集。
我准备了所有维度表和事实表、主键等。
源是一个“平面”(项目级别)表,我现在的问题是如何将其拆分并将其从一个表中获取到相应的表中。
我做了一些谷歌搜索,但找不到令人满意的解决方案。可以想象这是 BI 开发中相当普遍的问题/情况?!
谢谢,亚历克斯
首先,这取决于您是要进行简单的初始数据传输还是更复杂的事情(例如增量)。我将假设您正在进行初始数据传输。
假设您的项目表有如下列:id, cat1, cat2, cat3, cat4, ...
假设类别 1-4 有列id, cat_name
,您可以加载 dim_cat1(项目类别 1 的维度表)如下:
insert into dim_cat1 (cat_name)
select distinct cat1 from item_table;
您可以对所有其他类别/维度表执行相同操作。我假设您的维度表已自动生成 ID。现在,加载事实表:
insert into fact_table (id, cat1_id, cat2_id, cat3_id, cat4_id, ...)
select id, dc1.id
from item_table it
join dim_cat1 dc1 on dc1.cat_name = it.cat1
join dim_cat2 dc2 on dc2.cat_name = it.cat2
join dim_cat3 dc3 on dc3.cat_name = it.cat3
join dim_cat4 dc3 on dc4.cat_name = it.cat4
...
如果您有大量数据,则在 item_table 中的类别名称上创建索引可能是有意义的,也可能是维度表。
顺便说一句,这是一个独立于数据库的答案,我不使用 SSIS/SSAS:您可能有可用的工具为您简化此过程的某些部分,但用普通 SQL 编写并不是那么困难/耗时。
我们通过使用数据流任务将自上次包执行时间以来的信息复制到临时暂存表中,然后使用基于键的这些暂存表中的数据更新存档/仓库,然后插入那些尚不存在的行. 截断暂存表以备下次使用,添加审计负载。任务完成?
我经常针对操作数据存储而不是星型模式构建多维数据集。星型模式的性能几乎总是会更好,但是对于原型设计/测试,不要害怕针对您拥有的数据而不是您想要的星型模式来开发多维数据集.