SQL Datawarehousing,需要帮助填充使用TSQL SELECT或更好的选择我的维度?

2019-09-23 05:38发布

我有一个表在我的SQL Server,我“舞台”我的数据仓库从我们的ERP系统提取物。

从这个临时表( 表名称:DBO.DWUSD_LIVE),我建我的尺寸和负荷我的事实数据。

一个例子DIMENSION表被称为“SHIPTO”,这尺寸具有以下的列:

"shipto_id
"shipto"
"salpha"
"ssalpha"
"shipto address"
"shipto name"
"shipto city"

现在我有一个SSIS包,做了SELECT DISTINCT跨越上述列检索“独一无二”的数据,然后通过SSIS包我分配“shipto_id”代孕关键。

我目前的TSQL查询的一个例子是:

SELECT DISTINCT
"shipto", "salpha", "ssalpha", "shipto address", "shipto name", "shipto city"
FROM DBO.DWUSD_LIVE

这个伟大的工程,但不是“迅速”,一些尺寸有10列,并做了不同的选择那些并不理想。

在这方面,我的“业务键”列“SHIPTO”,“SALPHA”和“SSALPHA”。

所以,如果我做的:

SELECT DISTINCT
"shipto", "salpha", "ssalpha"
FROM DBO.DWUSD_LIVE

它会产生相同的结果:

SELECT DISTINCT
"shipto", "salpha", "ssalpha", "shipto address", "shipto name", "shipto city"
FROM DBO.DWUSD_LIVE

有没有更好的办法做到这一点TSQL查询? 我需要的所有列,但仅在业务键列DISTINCT。

您的帮助表示赞赏。

下面是我的项目是如何在SSIS设置的图像时,尺寸是SCD 1。

Answer 1:

生成代理键和填充维度表:我会通过拆分到这两个操作开始。 然后,第一步骤将是一个DISTINCT上只有3列,并且所述第二步骤将成为JOIN 。 然后在索引操作都使用的列可能给你一些改进。

你可以结合DISTINCTNOT EXISTS来避免那些已经被映射处理行,是这样的:

insert into dbo.KeyMappingTable (shipto, salpha, ssalpha)
select distinct shipto, salpha, ssalpha
from dbo.Source
where not exists (
    select *
    from dbo.KeyMappingTable
    where shipto = dbo.Source.shipto and salpha = dbo.Source.salpha and ssalpha = dbo.Source.ssalpha
 )

然后,你必须映射,所以你可以这样做:

insert into dbo.DimShipTo (shipto_id, shipto /*, etc. */)
select
    m.shipto_id,
    s.shipto -- etc.
from
    dbo.KeyMappingTable m
    join dbo.Source s
    on m.shipto = s.shipto and m.salpha = s.salpha and m.ssalpha = s.ssalpha
where
    not exists (
        select *
        from dbo.DimShipTo
        where shipto_id = m.shipto_id
    )

你也应该看看MERGE ,这是方便,如果您使用的是1型尺寸,只想当他们改变(这一般是一个有用的命令),更新地址或其他属性。 但是,这只能从SQL Server 2008中; 你没有提到你正在使用的版本或版本的SQL Server。



文章来源: SQL Datawarehousing, need help populating my DIMENSION using TSQL SELECT or a better alternative?