《BI那点儿事》数据流转换——多播、Union All、合并、合并联接

原文:《BI那点儿事》数据流转换——多播、Union All、合并、合并联接

建立测试数据:

CREATE TABLE FactResults
    (
      Name VARCHAR(50) ,
      Course VARCHAR(50) ,
      Score INT
    )

INSERT  INTO FactResults
        ( Name ,
          Course ,
          Score
        )
        SELECT  '张三' ,
                '语文' ,
                90
        UNION ALL
        SELECT  '张三' ,
                '数学' ,
                83
        UNION ALL
        SELECT  '李四' ,
                '语文' ,
                74
        UNION ALL
        SELECT  '李四' ,
                '数学' ,
                84
        UNION ALL
        SELECT  '李四' ,
                '物理' ,
                94

SELECT  *
FROM    FactResults

多播:将数据集分发到多个输出的转换。

如同它的名字一样多点传送可以将一个路径中的数据输出到多个路径,你可能会使用这种转换将数据输出到多个路径中。编辑这种task,将它和输入源连接,然后将它和多个Destination连接,除了task的名字之外,它没有特别的编辑选项。
注意:多点传送类似于Split 转换,不同的是多点传送把所有的行都输出,Split将有条件地输出部分行。

Union All:合并多个数据集的转换。

联合所有task的功能和合并正好相反,它将多个数据源中的合并成一个结果集。例如,将两个XML数据源中的数据合并成一个输出然后将数据送入到关键词抽取任务中。
编辑这种转换,首先将第一个数据源连接到task然后将其他数据源连接到这个task。打开编辑界面,保证列被正确映射,DDIS将会自动适应是否正确映射。例如,一个输入字符是20个字符,另一个是50,出书将会是一个多于50个字符的列。

合并:合并两个已排序数据集的转换。

合并转换可以将两个路径中的输入数据合并成一个输出。这种转换类似于Union All转换,它有一些限制:

  • 合并之前数据必须排序,可以在此之前使用排序转换或者在数据源中使用ORDER BY语句
  • 合并的元数据类型必须相同,例如CustomerID不能在一个路径中是数字型的但是在另一个路径中是字符类型的
  • 如果有多于两个路径,需要选择Union All转换

编辑这种task,确保在两个路径中的数据时一致的,选择列的时候会弹出对话框提示数据合并到路径1还是路径2,如果选择合并到路径1,然后连接路径2。这样选择之后最终将会从一个路径映射到另一个路径,有些路径的数据也可以忽略。

合并联接:使用 FULL、LEFT 或 INNER 联接将两个数据集联接起来的转换。

SSIS的一个目标就是使用任务,尽量保证不写任何代码,一个典型的例子就是连接合并。这种合并可以将两个输入进行内连接或者外连接然后选择性地输出。例如,在一个数据流中存储着包含EmployeeID的人力资源信息,在另一个数据流中存储着工资清单信息,可以对这两个路径进行连接,从人力资源信息中取得姓名,从工资清单信息中取得员工工资,然后从一个路径中输出。
注意:如果两个输入路径在同一个数据库,在OLE DB数据源中进行数据连接操作可能效率更高,如果在不同的数据库中可能效率后受到影响。这种连接合并在两个数据不是同一个数据库中或者不想编写代码时会很有用。

在项目中创建一个【数据流任务】,数据流如下:

组件【多播】的功能是:将其输入分发到一个或多个输出,每个输出都与输入一样。
因此第一个多播名称【多播 张三李四】分发出去的内容与上表一样。
每个组件我都用数据表中的姓名(张三、李四)做名称,方便查看。

组件【条件性拆分】设置如下,姓名等于“张三” 的和 姓名不等于“张三” 的分别输出到两个多播中。

接下来,先看组件【Union All】,是【多播 张三李四】和【多播 只有张三】两个数据的内容上下合并,理论结果:

再看组件【合并联接】,是【排序_张三李四】和【排序_李四】两个表数据排序后合并连接。合并方式如图:
连接类型为:左外部连接。左边为【排序_张三李四】,为第一个输入。
条件为(相当于): ON A.Name=B.Name AND A.Course=B.Course
输出名称重新定义。

输出理论结果为:(排序是按组件【排序_张三李四】的排序结果)

最后为组件【合并】,合并是【合并联接】后与【多播 只有张三】排序后的合并。
第一输入为【排序_张三李四左连接】,因为其有多列(5行6列),以此数据结构为准。
第二输入为【排序_张三】(2行3列)
合并转换如图:

可以看出,【排序_张三】列数不够,所以与上表合并时<忽略>,即无任何值。Union是排序合并,理论结果为:

至此,设计完成,现在编译!可看到数据流传递的行数。结果如图:

时间: 2024-09-18 14:10:13

《BI那点儿事》数据流转换——多播、Union All、合并、合并联接的相关文章

《BI那点儿事—数据的艺术》目录索引

原文:<BI那点儿事-数据的艺术>目录索引 原创·<BI那点儿事-数据的艺术>教程免费发布 各位园友,大家好,我是Bobby,在学习BI和开发的项目的过程中有一些感悟和想法,整理和编写了一些学习资料,本来只是内部学习使用,但为了方便更多的BI开发者,推动BI企业级应用开发,决定整理成一部教程,并在网络上免费发布该教程,希望为BI时代贡献绵薄之力! 本教程是由Bobby参考官方文档,综合市面相关书籍,经过充分的吸收消化,结合开发实践的而创作的一部原创作品,为了本教程及早与广大读者同仁

《BI那点儿事》数据流转换——透视

原文:<BI那点儿事>数据流转换--透视 这个和T-SQL中的PIVOT和UNPIVOT的作用是一样的.数据透视转换可以将数据规范或使它在报表中更具可读性. 通过透视列值的输入数据,透视转换将规范的数据集转变成规范程度稍低.但更为简洁的版本.例如,在列有客户名称.产品和购买数量的规范的 Orders 数据集中,任何购买多种产品的客户都有多行,每一行显示一种产品的详细订购信息.此时,如果对产品列透视数据集,透视转换可以输出每个客户只有一行的数据集.这一行列出该客户购买的所有产品,产品名称显示为列

《BI那点儿事》数据流转换——字符映射表

原文:<BI那点儿事>数据流转换--字符映射表 特征映射转换如图展示数据流中列的特征,它的编辑界面很简单,只有一个标签界面,点击要进行映射的列,可以选择需要添加新列或需要更新的列.可以在Output Alias列中给原来的列一个别名,选择要进行的操作,可以进行的操作类型有: Byte Reversal:逆转数字位的顺序,例如数据0x1234 0x9876的逆转结果是0x4321 0x6789,这种操作和LCMapString,LCMAP_BYTEREV选项有相同的操作结果 Full Width

《BI那点儿事》数据流转换——OLE DB 命令转换

原文:<BI那点儿事>数据流转换--OLE DB 命令转换 OLE DB命令对数据流中的数据行执行一个OLE DB命令.它针对数据表中的每一行进行更新操作,可以事先将要更新的数据存放在表中.或者针对一个有输入参数的存储过程,可以将这些参数存放在一个数据表中,不用每次都输入参数.示例数据准备: CREATE TABLE SourceParametersForStoredProc ( Param1 INT, param2 INT ) CREATE TABLE DestinationOLEDBCom

《BI那点儿事》数据流转换——模糊查找转换

原文:<BI那点儿事>数据流转换--模糊查找转换 BI项目中经常会有一些提取,转换,数据处理(ELT)的工作,其中最主要的是处理过赃数据.假设在项目中我们向数据库中注入了测试数据,但是通过一个外键从另外一个表中载入数据的时候没有对应的数据,那么这一行就是赃数据.这时候可以使用SQL中的Sound-Ex,full-text,相似度算法等方法查找.这种策略需要花费大量的时间和精力来设计算法,测试,维护,并且它们都是基于词汇的,复用的可能性很小.也可能你会放弃自己处理并把它抛给一些有经验的高手专家来

《BI那点儿事》数据流转换——百分比抽样、行抽样

原文:<BI那点儿事>数据流转换--百分比抽样.行抽样 百分比抽样和行抽样可以从数据源中随机选择一组数据.这两种task都可以产生两组输出,一组是随机选择的,另一组是没有被选择的.可以将这些选择出的数据发送到开发或者测试服务器上.这个Task的最合适的应用是建立数据挖掘模型然后,使用这些抽样数据来验证这个模型. 编辑这种task,选择要抽取的行数或者 百分比,如图.百分比抽样按百分比从数据源中随机选择数据,行抽样从数据源中随机选择具体的行数.可以对选中的数据和未被选择的数据命名.最后一个选择项

《BI那点儿事》数据流转换——模糊分组转换

原文:<BI那点儿事>数据流转换--模糊分组转换 在模糊查找中我们提到脏数据是怎样进入到表中的事情,主要还是由于一些"Lazy-add"造成的.这种情况我们的肉眼很容易被欺骗,看上去是同一个单词,其实就差那么一个字母,变成了两个不同的单词.一个简单的例子是X-Ray Tech和xRey,我们很有可能认为他们是同一个职务,CT操作员,但是如果让计算机来处理的话,它们是两种截然不同的东西.和模糊查找一样,模糊分组可以查找出多行中出现的类似的单词进行归类.我们可以使用这些归类得到

《BI那点儿事》数据流转换——排序

原文:<BI那点儿事>数据流转换--排序 排序转换允许对数据流中的数据按照某一列进行排序.这是五个常用的转换之一.连接数据源打开编辑界面,编辑这种任务.不想设置为排序列的字段不要选中,默认情况下所有列都会选中.如图所示,按照TotalSugar_Cnt排序,并将所有列输出. 在底部的表格中,可以设置输出列的别名,是否按照列来排序.Sort Order列显示列将会第一排序,第二排序还是第三排序.双击列去除重复的排序列.

《BI那点儿事》数据流转换——导入列、导出列

原文:<BI那点儿事>数据流转换--导入列.导出列 导入列: 导入列例子现在来做一个例子:创建路径D:\Pictures随便在路径D:\Pictures中粘贴4个比较小的图像文件命名为01.png.02.png.03.png.04.png在路径D:\Pictures内创建一个txt文件命名为filelist.txt,文件内容如下D:\Pictures\01.pngD:\Pictures\02.pngD:\Pictures\03.pngD:\Pictures\04.png运行下面的SQL语句创建