65.9K
CodeProject 正在变化。 阅读更多。
Home

7 天学习创建 MSBI(Microsoft Business Intelligence)项目

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (40投票s)

2015年12月15日

CPOL

17分钟阅读

viewsIcon

134983

downloadIcon

5983

本文将逐步教您如何使用MSBI创建项目。

 

读者朋友们大家好。继《7天学会创建MVC项目》取得巨大成功之后,我又带来了新的概念——7天学会创建MSBI项目。这将是一个详细的、循序渐进的系列文章,涵盖了成为MSBI开发人员所需的一切。

通过http://www.learnmsbitutorials.net/上的完整分步MSBI教程学习,提升您的深度知识。

第一天我们将学习什么?

第一天将是入门课程。对于那些已经对MSBI有很好了解的人来说,这是一个轻松的时刻。你们可以去玩电子游戏、踢足球或看电影,然后第二天再跟上我们,或者作为一个真正的学习者,你们可以通过继续阅读章节来巩固概念。

这是第一天的课程内容。

第一天我们将学习什么?

什么是BI?

什么是数据仓库?

什么是ETL?

什么是MSBI?

开始我们需要什么?

创建解决方案

实验1 - 创建SSIS项目并开始

结论

特别说明

如果您正在寻找一个讲解MSBI世界中个别选项或任务的课程,那么您来错地方了。在这里,我们将通过一个完整的项目来讲解,并从项目的角度来讨论MSBI中的大部分概念。

什么是BI?

BI或商业智能(Business Intelligence)就是关于做出有利可图、有价值且合乎逻辑的决策。

BI是一个将数据转化为信息的过程。信息是做出正确决策的知识。

环顾四周,您会看到大量的企业家、商人经营着一家公司,却被“决策”这个大问题困扰。很多人无法正确地做出决策。

当我们说决策时,并非指确定旅游目的地这样的决策。比如家庭旅游应该去迪拜还是新加坡。☻

这里的决策是指与业务相关的决策。例如,我们是否应该多招聘一些销售人员,应该多生产什么——牛仔裤还是长裤,新分店的最佳选址在哪里等等。

为什么会出现这种困惑?

他们经营着一家企业,这意味着他们肯定不笨。

那么呢?是否可以认为数据不足是原因?如今,大多数企业都会以某种形式维护所有业务相关的数据。因此,将数据不足视为原因是不正确的。

真正的原因是信息不足。

信息和数据是两个不同的概念。当我提到数据时,以下是示例。

  • Customer1在印度购买了Product1,花费65000卢比。
  • Customer2在美国购买了Product2,花费888美元。

这些数据可能存储在SQL Server数据库或MySQL数据库的表格格式中,也可能存储在文本文件中的逗号分隔格式中。这纯粹是技术性的。决策者不会去查看这些单独的数据源然后做出决定。实际上也不可能。

当涉及到决策时,决策者更感兴趣的是以下几点:

  • 什么产品卖得最好?
  • 哪个国家最适合某种类型的产品?

这就是信息/知识。利用这些信息,公司或企业的决策者可以做出有价值且有利可图的决策。

难道您不认为,这些信息也是从数据中获得的吗?是的。将数据转化为信息的过程称为商业智能。

商业智能涉及:

  • 收集所有必要的数据,
  • 以一种方式展示所有数据,使得决策者的所有问题都能自动得到解答。

值得记住的一点

我们理解了决策将基于信息和知识做出这一事实,但这里值得注意的一点是,信息总是依赖于一个“数字”。

例如——

哪个国家对哪种产品更好?——>这里的SalesAmount就是那个数字。每个国家每种产品的总销售额将告诉我们该产品是否对该国家更好。

如果您没有理解这一点,请继续阅读本系列。最后您将明白我的意思。

什么是数据仓库?

通俗地说,DW或数据仓库就是数据的仓库。数据存放的地方。

在实施商业智能时,最大的问题之一是数据分散

在实际中,一家公司或企业可能通过多个系统维护其数据。让我们以ABC组织为例。它在SQL Server数据库中维护员工相关信息,在Excel中维护客户信息,销售和采购信息在Oracle DB中。现在,信息/知识的生成涉及三个步骤:

  • 从所有这些子系统中收集数据。
  • 对所有这些数据应用一些计算——从每个数据源检索的数据将被分析以获取信息,并可能合并在一起。
  • 最后以易于理解的格式显示它们。

数据越分散,数据检索就越复杂,生成信息/知识所需的时间就越长。

为了解决这个问题,行业提出了一个解决方案,称为数据仓库。它将是一个简单的数据库,如Oracle、SQL或其他任何数据库。

存储在不同子系统、不同格式中的所有数据将被检索出来,并转换为通用格式存储到该数据仓库中。这是商业智能过程的第一步。存储在数据仓库中的数据成为信息创建的来源。无需分析每个数据源中的数据,只需分析数据仓库中的数据即可。

什么是ETL?

ETL代表Extract(提取)、Transform(转换)和Load(加载)。

到目前为止,我们已经理解了以下几点:

  • 信息将通过业务人员做出决策的数据生成。
  • 在实际场景中,数据将分散在多个系统、不同格式中。所有这些数据将被加载到数据仓库中,数据仓库最终成为信息创建的来源。

将数据加载到DW

ETL是将数据加载到数据仓库的过程

在商业智能的初始阶段,数据仓库将根据业务需求进行设计。我在企业培训中经常对学生说一句话:

“如果数据仓库设计得当,生活将更轻松。”

但我们也必须了解现实世界的实际情况。

“大多数情况下,它永远不会设计得很好。”

在本课程中,我们将学习数据仓库的正确设计方法,还将学习如何处理糟糕的设计。

一旦DW设计完成,数据将通过ETL过程加载到其中。

ETL过程可以解释如下:

  • Extract——从数据源读取数据
  • Transform——将数据转换为数据仓库期望的格式。例如——数据源可能包含DateOfBirth(出生日期),而数据仓库期望Age(年龄)。将DateOfBirth转换为Age称为转换。这不是一个强制步骤。在某些情况下,数据可能已经是期望的格式。在这种情况下,将跳过此步骤。
  • Load——最后,数据将被加载到数据仓库中。

什么是MSBI?

MSBI是Microsoft Business Intelligence的缩写。它是微软的一套包含各种工具以实现商业智能解决方案的套件。

使用MSBI,我们将有机会创建三种项目:

  1. SSIS——这将帮助我们执行ETL操作,简单地说,它将用于填充数据仓库。
  2. SSAS——允许我们从数据仓库创建多维数据集。我们将进一步详细讨论多维数据集。目前,您可以将多维数据集视为另一个存储空间,类似于数据仓库,但数据存储方式更具性能效率。与普通数据仓库相比,数据检索速度更快。
  3. SSRS——允许我们使用各种图表、图像等创建以精美图形方式显示数据的报表。SSRS报表是最终用户信息的来源。通过查看报表,最终用户将做出决策。

开始我们需要什么?

首先,我们需要SQL Server 2014的企业版。您可以从http://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2014下载试用版进行学习。

安装时请务必勾选Analysis、Reporting和Integration Services。

安装完成后,您将在“开始”菜单的“SQL Server”文件夹中找到“Visual Studio 2013的SQL Server Data Tools”。

如果您是MSBI新手,我们建议您阅读以下文章,其中详细演示了SQL Server和SQL Server Data Tools的分步安装过程。

创建解决方案

我们现在将创建一个项目,并在整个系列中使用它。所以,作为开始,让我们创建一个空白解决方案。

对于那些对“解决方案”一词不熟悉的人来说:

在Visual Studio的世界里,我们创建项目。每个项目都有特定的类型。项目类型决定了该项目的功能。项目类型的示例有“控制台应用程序”、“Windows窗体应用程序”等。在我们的例子中,我们将创建3种项目:

  • Integration Services Project – SSIS
  • Analysis Services Multidimensional and Data mining project – SSAS
  • Reporting Services project – SSRS

项目被逻辑地分组到解决方案中。一个解决方案可以包含多个不同类型的项目。创建空白解决方案的步骤如下:

步骤1 - 打开SQL Server Data Tools

从上面指定的位置打开SQL Server Data Tools。

步骤2 - 创建新解决方案

点击File >> New >> Project。“新建项目”对话框将打开。

在左侧区域的“其他项目类型”组中选择“Visual Studio Solutions”。

在右侧选择“Blank Solution”。

将解决方案命名为“SalesBI”,然后点击OK。

实验1 - 创建SSIS项目并开始

所以,让我们理解项目的第一个需求。本次演示的目标是理解SSIS项目基础。

我们有一个Customer.txt文件,内容如下:(请确保您创建一个文件并将其保存在某个地方用于演示。)

注意:SalesDate的格式是“dd/mm/yyyy”。

第一个要求是将上述文本文件中的数据加载到SQL Server Management Studio的SalesDW数据库中的TblCustomer表中。(请在您的机器上为演示目的创建数据库和表)

提醒您一下,我将在接下来的章节中讨论数据仓库设计的正确方法。初期,我们将仅仅尝试感受MSBI。

步骤1 - 创建SSIS项目。

右键单击解决方案,然后选择Add >> New Project。

这将启动“添加新项目”对话框。在左侧选择“Business Intelligence”,在右侧选择“Integration service project”。项目命名为“SalesETL”,然后点击OK。

再次回顾——SSIS或Integration Service项目主要用于执行ETL操作。

步骤2 - 创建新包

右键单击新创建的项目,然后选择Add >> New Item。这将启动“添加新项”对话框。选择“New SSIS Package”。将其命名为CustomerETL,然后点击Add。

  • 在SSIS中,包(Package)是一个可执行文件。
  • Visual Studio提供了一个名为SSIS Designer的UI界面来设计包。
  • 包的内部是一个XML文件,它将由一个名为“dtsexec”的特殊实用程序执行。该实用程序将作为MSBI安装的一部分安装。我们很快将详细了解它。
  • 包的扩展名为DTSX,代表“Data Transformation Services Executable”。在早期版本的SQL Server中,用于执行ETL的功能称为“Data Transformation Services”。DTSX就是以此命名的。

步骤3 - 设计控制流

在解决方案资源管理器中双击新创建的包。

正如您在SSIS Designer中看到的,我们有几个选项卡——Control Flow(控制流)、Data Flow(数据流)、Parameters(参数)、Event Handlers(事件处理程序)和Package Explorer(包资源管理器)。我们将逐一查看这些选项卡。

现在我们关注Control Flow选项卡。

  • 此选项卡将让我们决定要做什么。
  • 您会注意到左侧有SSIS工具箱。如果您的演示中没有,您可以从View >> Other Windows >> SSIS Toolbox获取。
    工具箱包含Data Flow Task(数据流任务)、Execute Sql Task(执行SQL任务)等任务。每个任务都可以让我们实现不同的行为。例如——
    • Send Mail Task——用于使用SSIS包发送电子邮件
    • Execute SQL Task——允许我们执行SQL查询并处理结果集。
    • Script Task——允许我们执行自定义C#代码
  • 目前我们的要求是将数据从文本文件加载到SQL Server数据库,为此我们需要“Data Flow Task”。只需将任务从SSIS工具箱拖放到SSIS Designer中。

右键单击新创建的“Data Flow Task”,选择重命名。将其命名为“CsvCustomer to TblCustomer”。

步骤3 - 添加目标连接管理器

除了所有这些选项卡之外,SSIS Designer还提供了一个称为Connection Managers(连接管理器)的部分。它位于Designer的角落。

只需右键单击该区域,然后选择“New Ado.Net Connection…”

点击New

输入服务器名称,输入凭据,选择数据库,然后点击OK。

再次点击OK。

将连接管理器重命名为SalesDWConnection。

步骤4 - 添加源连接管理器

现在是时候添加源连接管理器了。

右键单击连接管理器区域,但这次选择“New Flat file Connection...”

这将启动“Flat file Connection manager editor”。

将名称设置为“CustomerCSVConnection”,然后选择源客户文件。

在对话框的左侧,定义了几个部分,如General(常规)、Columns(列)和Advanced(高级)等。

选择Columns部分。此时无需更改任何设置。只需点击OK。

步骤5 - 配置数据流任务

之后,双击Data Flow task。这将带您到Data Flow选项卡。

步骤6 - 添加源

Data Flow选项卡将实际决定ETL。在这里,我们将定义数据从何处流向何处,以及是否需要任何转换。

一旦切换到Data Flow选项卡,您就会注意到SSIS工具箱的变化。

如您所见,工具箱中的任务分为三组:Sources(源)、Transforms(转换)和Destinations(目标)。“Common”(常用)是一个特殊组,包含最常用的源、转换和目标。

我们对“Flat file source”感兴趣。您可以在“Other Sources”(其他源)部分找到它。只需将其拖到SSIS Designer中,并将其重命名为“CustomerCsv”。

步骤7 - 配置源

双击CustomerCsv源。这将启动“Flat file source editor”。从下拉列表中选择“CustomerCSVConnection”。

移至Columns部分,根据需要进行任何更改,然后点击OK。

步骤8 - 添加目标

从“Other Destinations”(其他目标)部分将Ado.Net destination拖到SSIS Designer中,并将其重命名为“TblCustomer”。

步骤9 - 配置目标

双击“TblCustomer”目标。这次不是显示配置编辑器窗口,而是显示以下错误消息:

点击No。

目标任务在具有适当输入之前无法配置。

现在单击“CustomerCsv”源。您会注意到它有两个箭头。一个蓝色的,一个红色的。我们稍后会讨论红色的。蓝色的箭头是数据流动的路径。因此,这个箭头称为“Data Flow Path”。拖动该箭头并将其连接到“TblCustomer”目标。

步骤10 - 配置目标(继续)

在“configuration editor window”中,将Connection manager选择为“SalesDWConnection”,将table选择为“TblCustomer”。

点击“Mappings”部分,并确认所有映射都正确。

点击OK。

步骤11 - 执行和测试包

正如我之前所说,包将由一个名为“DtsExec.exe”的特殊实用程序执行。Visual Studio在开发时使我们的生活更轻松。为了测试,只需按F5☻。其他一切都将由Visual Studio处理,然后包开始执行。

红叉表示执行失败。

步骤11 - 理解错误

转到“Progress”(进度)选项卡,向下滚动,找到左侧带有“Red Cross”(红叉)图标的第一个语句。不幸的是,在此屏幕上无法读取完整的错误信息。因此,只需右键单击它,选择“copy message text”(复制消息文本)。

将其粘贴到某个文本文件中。错误信息如下:

[TblCustomer [27]] Error: An exception has occurred during data insertion, the message returned from the provider is: The given value of type String from the data source cannot be converted to type datetime of the specified target column.([TblCustomer [27]] 错误:数据插入过程中发生异常,提供程序返回的消息是:源数据中类型为String的给定值无法转换为目标列指定的datetime类型。)

步骤12 - 添加数据转换

错误非常普遍,数据库中有DateTime列,而在文本文件中,默认情况下所有列都是字符串类型。

为了解决这个问题,我们将使用一种特殊的转换,称为“Data Conversion”转换。

首先按工具箱中的停止按钮停止执行。

现在将“Data Conversion”转换从工具箱拖到Designer窗口。右键单击连接Source和Destination的“Data Flow Path”,选择Delete。最后,将来自Source的“Data Flow Path”连接到“Data Conversion”转换。

步骤13 - 配置数据转换

双击Data Conversion转换,并逐一执行以下步骤:

  • 在Available Columns(可用列)中勾选SalesDate。它将在以下网格中添加一个新的条目:
  • 将Alias name(别名)更改为SalesDate_DateTime
  • 选择datatype为“Database_timestamp”。

点击“确定”。

步骤14 - 重新配置目标

将来自“Data Conversion”转换的“Data Flow Path”连接到“TblCustomer”目标,然后双击它。

在Destination的SalesDate映射中,将Available columns中的SalesDate_DateTime作为输入。

步骤15 - 执行和测试

最后一次按F5重新执行包。这次包将完成其执行。

打开数据库表,检查记录。

一切看起来都正确,但实际上有些地方不对。在源数据中,第三行和第四行的SalesDate分别是“12/1/2013”(2013年1月12日)和“15/06/2015”(2015年6月15日),而在目标中,第三行和第四行的SalesDate分别是“1 Dec 2013”和“15 Jun 2015”。

让我们了解一下到底发生了什么。

  • “Data Conversion”转换假设日期是“mm/dd/yyyy”格式,因此相应地更新了前三条记录。
  • 在最后的源记录中,SalesDate是“15/06/2015”,如果按照“mm/dd/yyyy”格式来看,它不是一个有效的日期。因此,“Data Conversion”转换假定它是“dd/mm/yyyy”格式,并相应地更新了目标。

这在逻辑上是错误的。为了使其正确,我们必须确保,当DateTime值作为字符串值出现时,它应该采用正确的“mm/dd/yyyy”格式。

步骤16 - 添加“派生列”转换

首先手动截断目标中的TblCustomer表。

停止执行,并删除“CustmerCsv”源和“Data Conversion”转换之间的连接。

将“Derived Column”转换从工具箱拖到Designer窗口。

将“CustomerCsv”源连接到“Derived Column”转换。

步骤17 - 配置“派生列”转换。

双击转换。

创建一个名为SalesDate_MMDDYYY的新派生列,使用以下表达式:

SUBSTRING(SalesDate,FINDSTRING(SalesDate,"/",1) + 1,FINDSTRING(SalesDate,"/",2) -
FINDSTRING(SalesDate,"/",1) - 1) + "/" + SUBSTRING(SalesDate,1,FINDSTRING(SalesDate,"/",1) - 1)
+ "/" + SUBSTRING(SalesDate,FINDSTRING(SalesDate,"/",2) + 1,LEN(SalesDate) -
FINDSTRING(SalesDate,"/",2))

上面的表达式只是将当前的SalesDate(“dd/mm/yyyy”格式)转换为新的SalesDate(“mm/dd/yyyy”格式)。

步骤18 - 重新配置“数据转换”转换

通过“Data Flow Path”将“Derived Column”转换连接到“Data Conversion”转换。

双击“Data Conversion”转换,和之前一样,为SalesDate_MMDDYY列创建一个名为SalesDate_DateTime的转换列。

步骤19 - 重新配置目标。

将“Data Conversion”转换连接到目标。双击目标。将目标中的SalesDate列映射到输入列中的SalesDate_DateTime列。

步骤20 - 执行和测试

最后一次重新执行包。确保在执行前截断表。

 

终于实现了。☻☻

结论

希望您喜欢第一天的阅读。请继续关注第二天。前方还有很多学习和挑战。

更多类似内容请点击这里。订阅文章更新或在Twitter上关注@SukeshMarla

您也可以参考以下 1 小时 MSBI YouTube 视频:- 4 天学习 MSBI。

更多MSBI分步教程请点击这里

© . All rights reserved.