在进行ETL数据抽取的时候,往往会对数据进行条件拆分,比如当[工资]》5000时,才进入数据仓库,否则输出到Excel。类似这种需求。今天就来讲解一下条件拆分控件的使用。达到的目的就是把[OrderStatusCode]等于99的输出到数据仓库,不等于99的输出到Excel中。
第一步:准备原始数据,创建表以及在表中添加数据,脚本如下:
CREATE TABLE [dbo].[MemberOrderStatus]( [OrderStatusCode] [varchar](2) NULL, [OrderStatusName] [nvarchar](20) NULL, [Status] [varchar](1) NULL ) ON [PRIMARY] INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘01‘,N‘未提交‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘02‘,N‘已提交‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘03‘,N‘已审核‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘04‘,N‘分拣完成‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘05‘,N‘配送中‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘06‘,N‘签收‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘07‘,N‘退货中‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘08‘,N‘退货入库‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘09‘,N‘配送异常‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘10‘,N‘缺货‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘11‘,N‘订单挂起‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘12‘,N‘已调度‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘13‘,N‘已生成分拣计划‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘14‘,N‘已打印‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘15‘,N‘已生成出库单‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘16‘,N‘已出库‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘17‘,N‘已复核‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘18‘,N‘自退货中‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘19‘,N‘自退货入库‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘20‘,N‘退货已入库‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘21‘,N‘已锁定‘,N‘A‘) INSERT INTO [MemberOrderStatus]([OrderStatusCode],[OrderStatusName],[Status]) VALUES(N‘99‘,N‘取消‘,N‘A‘)
第二步:创建一个Excel文件,用于存放[OrderStatusCode]不等于99的数据。
第三步:打开VS,新建一个SSIS项目。
第四步:在控制流视图中,拖入一个数据流任务,然后双击这个数据流任务,进入数据流任务,在界面中拖入一个OLE DB源,双击这个控件进行数据源的设置,如图所示:
第五步:拖入一个条件拆分控件,双击进行设置,这步是关键,需要把[OrderStatusCode]等于99的数据找出来,导入到数据仓库中,不等于99的数据导入到Excel中。实现的关键就是对函数的使用,大家如果对其中的函数不熟悉,可以MSDN官网学习。 如图所示:
第六步:这时的数据有两个走向,一个是导入数据仓库,第二个是导入到Excel,所以需要拖入两个目标控件。当然在导入前有必要进行数据转换,数据源和目标的字段类型要匹配。如图所示:
第七步:大功告成,直接运行包,结果如图所示:
条件拆分控件使用
时间: 2024-11-29 06:24:54