开发其他数据包
我按照创建产品数据包的方式创建客户维度数据包。此处将不重述创建此新数据包应遵循的步骤。请自行尝试创建此数据包。请注意,此数据包使用数据源中的 XML 数据类型列 (Person.Person.Demographics),这需要您解析出单独的人口统计相关属性。要解析 SQL Server XML 数据类型列中的单个值,您可以在 XML 数据类型固有的 Value() 方法中使用 XQuery。请将完成的数据包命名为 DIM_CUSTOMER.dtsx。
为日期维度开发 SSIS 数据包是可选的。由于此维度通常没有源数据,因此加载它的最简单方法是使用基本的 T-SQL 脚本。您可以在已完成的解决方案中找到我使用的脚本。
开发 Internet 销售事实表数据包
Internet 销售事实表数据包查询所有的 Internet 销售,并按照产品、客户和日期(即订单日期)返回销售详情。与维度表数据包不同,事实表数据包在向事实表加载数据前需要一个额外的步骤,即查询相应维度表中的代理键和智能键。您可以创建一个新数据包并将其命名为 FACT_INTERNET_SALES.dtsx。
此数据包的提取部分需要使用图 4 所示的 T-SQL 代码查询 AdventureWorks2008 OLTP 数据库。
P.ProductID
,CONVERT(INT,CONVERT( CHAR(4), YEAR(H.OrderDate) ) + RIGHT('0'+ CONVERT(VARCHAR(3),
MONTH(H.OrderDate) ),2) + RIGHT('0'+ CONVERT( VARCHAR(3),
DAY(H.OrderDate) ),2)) AS OrderDateKey
,C.AccountNumber
,SUM(D.OrderQty) AS OrderQuantity
,SUM(D.LineTotal) AS SalesAmount
FROM
[Sales].[SalesOrderDetail] D
INNER JOIN
[Sales].[SalesOrderHeader] H ON (D.SalesOrderID = H.SalesOrderID)
INNER JOIN
[Production].[Product] P ON (D.ProductID = P.ProductID)
INNER JOIN
[Sales].[Customer] C ON (H.CustomerID = C.CustomerID)
WHERE
H.OnlineOrderFlag = 1
GROUP BY
P.ProductID
,H.OrderDate
,C.AccountNumber
图 4 用于按产品、日期和客户划分的 Internet 销售的 T-SQL 代码
在此数据包的控制流图面中创建一个新的数据流。打开数据流设计器,创建一个 OLE DB 源组件。将该组件命名为 AW_OLTP,使用图 4 中的查询作为其源。此查询会生成 Adventure Works 销售表中 OrderQuantity 和 SalesAmount 两个度量值的聚合(总和)。
现在,您需要配置一个查询转换。将查询转换组件的两个新实例从工具箱中拖动到数据流设计器图面,并将其重名为“产品”和“客户”。配置第一个实例(产品),使其查询产品维度表中的 ProductKey。配置方法为将维度表的 AlternateKey 与从 AW_OLTP 源查询传入的 ProductID 字段相联接。
配置第二个实例(客户),使其查询客户维度表中的 CustomerKey。配置方法为将维度表中的 AlternateKey 与从 AW_OLTP 源查询传入的 AccountNumber 字段相联接。
最后步骤
最后一步是将数据加载到 FactInternetSales 事实表,并将每个维度的自然键替换为查询转换找到的代理键。拖放 OLE DB 目标组件的新实例,并将其命名为“AW_DM”。编辑该 OLE DB 目标组件,选择 AW_DM 连接管理器。然后,选择 dbo.FactInternetSales 表并单击“映射”选项卡。确保映射如图 5 所示。单击“确定”完成此数据包逻辑。
图 5 用于 Internet 销售事实表的 OLE DB 目标映射
要测试 Internet 销售事实数据包,请在 BIDS 中打开此数据包并按 F5。
现在,您基本了解了维度建模和使用 SSIS 构建按 ETL 设计的数据包。在第三篇系列文章中,您将学习如何使用填充的数据市场创建用于 SSAS 数据库的维度和多维数据集。多维数据集构建完成后,您可以开发一个 SSIS 数据包。这样,每次有新数据添加到数据市场中,您都可以在 SSAS 数据库中持续更新这些对象。当使用单一查询无法满足报告要求时,SSIS 甚至能够准备在 SSRS 报告中显示的数据。如您所见,SSIS 可以做大量工作来帮助您管理 BI 解决方案,而不仅仅是 ETL 处理。