• 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

  • 相关阅读:
    常见的http状态码
    浅谈!DOCTYPE声明的作用?严格模式与混杂模式的区别?
    异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”
    Ecmascript 6新特性
    关于数组去重的几种方法-------javascript描述
    关于字符串的一些操作
    写一个将字符串转成驼峰命名的方法
    js作用域之常见笔试题,运行结果题
    CSS3实现图片黑白滤镜居中,hover缩放遮罩的效果
    远程桌面与本地桌面实现文件传输
  • 原文地址:https://www.cnblogs.com/haseo/p/4518575.html
Copyright © 2020-2023  润新知