SSIS: Lookup组件高级用法,生成推断成员(inferred member)

将数据导入事实表如果无法匹配维度表的记录一般有两种处理方式。 一是将不匹配记录输出到一个表中待后续处理,然后重新导入.二是先生成维度Key,后续再完善维度key,本文指导各位使用第二种方式。

背景

比如下图StoreID为1的经销商不存在于我们经销商维度表中,我们现在要使用lookup组件进行匹配,并生成维度key.

image

操作步骤

1. 先添加一个派生列组件,将StoreID转为字符,等会儿生成键值会用到。

image

image

2. 先进行匹配一次,然后把无法匹配到的记录传到下一个Lookup 组件  Insert  Inferred Reseller

image

3 .注意Insert  Inferred Reseller匹配模式要选择 Partial cache

image

image

StoreIDstr 与 ReselletAltemateKey(也就是我们的StoreID) 做关联.

image

高级选项中,我们执行一个存储来代替前面Connection里面的输出.将StoreIDstr 传入改存储.来生成推断成员,并且返回键值,具体实现请看存储代码
image

USE [BIHell_demo]
GO
/****** Object:  StoredProcedure [dbo].[Generate_ResellerKey]    Script Date: 5/20/2015 10:37:44 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Generate_ResellerKey]
  @Store NVARCHAR(15) -- Business key
AS 
SET NOCOUNT ON

/* Prevent race conditions */ 
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

/* Ensure key does not exist */
DECLARE @ResellerKey INT 
SELECT @ResellerKey = ResellerKEy
FROM dw.DimReseller 
WHERE ResellerAlternateKey = @Store

/* Generate new surrogate key for inferred member */ 
IF @ResellerKey IS NULL BEGIN 
  

  INSERT [dw].[DimReseller]
           ([ResellerAlternateKey]
           ,[BusinessType]
           ,[ResellerName]
           ,[NumberEmployees]
           ,[FirstOrderYear]
           ,[LastOrderYear]
           ,[ProductLine]
           ,[AddressLine1]
           ,[AddressLine2]
           ,[City]
           ,[StateProvinceCode]
           ,[PostalCode]
           ,[AnnualSales]
           ,[BankName]
           ,[AnnualRevenue]
           ,[YearOpened]
           ,[Current]
           ,[Inferred])
     VALUES
           (@Store
           ,'Unknown'
           ,'Unknown'
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,null
           ,1
           ,1)
  SET @ResellerKey = SCOPE_IDENTITY() 
END

/* Return surrogate and business key */ 
SELECT @ResellerKey AS ResellerKey, @Store AS ResellerAlternateKey

5. 执行完毕以后可以看到经销商维度表新增了一行记录,并且inferred被标记为1. 后续我们可以完善这条维度记录
image

而事实表已经关联到ResellerKey  702

image

posted @ 2015-05-20 23:42  Haseo  阅读(1259)  评论(0编辑  收藏  举报