【译】无处不在的数据 ----通向报表服务的阶梯系列(三)
你在一堆由经理提供的打印出来的EXCEL表格、Access报表、和笔记中疯狂的查找数据.你需要来自这个数据源的描述,来自那个数据源的指标,来自另一个数据源的过滤信息。对于这些无处不在的数据,你该如何是好呢?
连着做两次深呼吸。本系列文章又来拯救你了!本篇文章讨论如何连接到不同的数据源并抓取数据。如果你还未阅读本系列的前两篇文章,请看:
PS:别忘了深呼吸后把气呼出来
数据,数据,数据
报表存在的目标是展示数据。虽然这些数据可能来自不同的数据源,但最终用户只会看到你最终提供的数据。你需要两个与数据有关的报表项来实现这个目标,它们分别为:数据源(Data Sources)和数据集(Datasets)
数据源(Data Sources)
数据源包含了所需要获取数据的位置信息。这个信息可能是一个连接字符串,比如SQL Server数据库或分析服务数据库,如果是Web Service的话,也可能是一个URL。数据源为报表服务提供数据源的连接信息和安全验证信息。
报表服务器包含了两类数据源:
- 共享数据源是连接外部数据源的抽象链接。共享数据源可以在多个报表中使用,因此单独上传到报表服务器
- 嵌入数据源就像其名称所示那样是嵌入到报表中的。因此嵌入数据源不能在多个报表间共享,也不能在报表外部访问
很多情况下改变数据来源的信息是家常便饭。比如你的开发环境由测试环境变为生产环境,或是由于公司新的命名规则的推行使得数据库服务器名称发生了变化。因为这类事情常常发生,所以我推荐在所有的报表中使用共享数据源。下面让我们来看一下创建共享数据源的步骤。
创建共享数据源
打开Business Intelligence Development Studio (BIDS).在创建完报表服务项目后,在解决方案管理器中可以看到共享数据源目录。右键点击该目录选择添加新的数据源,如图3-1所示:
图3-1. 共享数据源
接下来出现数据源向导。我们可以在这个窗口看到数据源名称,类型以及连接字符串,这个属性窗口如图3-2所示。
图3-2.共享数据源属性屏幕
将你的数据源命名为报表作者可以识别并不与具体报表环境相关的名称。当创建一个SQL Server 数据连接时。直接使用数据库的名称是一个不错的做法。对于Reporting Services 2008 R2来说,你可以连接到一下数据源:
- Microsoft SQL Server
- Microsoft SQL Azure
- Microsoft SQL Server Parallel Data Warehouse
- OLE DB
- Microsoft SQL Server Analysis Services
- Oracle
- ODBC
- XML
- Report Server Model
- Microsoft SharePoint List
- SAP NetWeaver BI
- Hyperion Essbase
- TERADATA
点击“编辑”按钮创建连接字符串。填入所需的信息后点击OK,你就可以看到生成的连接字符串了。然后点击确定,你就可以在解决方案管理器中看到刚刚创建的共享数据源了。
将共享数据源归类为报表数据源
在创建完一个可以被所有报表共享的共享数据源之外,你还需要通过创建报表数据源告诉报表使用哪个共享数据源。这一步可以在BIDS的报表数据窗格来实现,如图3-3所示,右键点击数据源,选择添加数据源
注意:如果你没有看到报表数据窗口,你可以通过视图菜单 –>报表数据或者按快捷键:Ctrl+Alt+D。
图3-3.通过报表数据窗格添加数据源
因为你已经创建了共享数据源,现在你就可以在”使用共享数据源引用”下选择刚才创建的共享数据源,如图3-4所示。
图3-4.数据源属性窗口
下面我们可以准备开始抓取数据了。
数据集
在我们知道从何处抓取数据库,我们还需要告诉报表服务抓取什么数据。这一步可以在报表服务中通过数据集来实现。与数据源的创建类似,你可以创建两类数据集:
- 共享数据集仅仅在SQL Server 2008 R2以上可用,将查询语句抽象出来供多个报表使用。
- 嵌入数据集存储在单个报表中,这也是本篇文章将用到的。
创建一个嵌入数据集,我们来看一下BIDS的报表数据窗格,右键点击数据集选择添加数据集,如图3-5所示。
图3-5.通过报表数据窗格添加数据集
打开后,你可以在数据集属性屏幕中填入合适的名称,数据源和你需要的查询语句。记住你可以在一个报表中拥有多个数据源。所以命名需要与细节相关以便你在用到的时候知道用哪个数据集。当然,不要命名的太细节以便在未来你还需要在数据集中添加额外字段时不必重新命名数据集。这类命名比如:SalesByCustomer或 SubUnitProperties.
在Reporting Services 2008 R2中,接着选择”使用在我的报表中嵌入的数据集”来使你可以使用刚刚创建的数据源。最终,你还需要一个查询语句来抓取数据。对于SQL Server作为数据源来说,你可以使用本文或是存储过程选项。存储过程选项允许你调用数据库的存储过程,存储过程使得在多个报表间重用数据变得非常容易。接下来的选项,文本,可以通过写查询语句来抓取数据。表3-1是基于不同数据源类型的不同语句。
数据源类型 | 示例查询语句 |
Microsoft SQL Server | select c.AccountNumber , soh.OrderDate , sum(soh.TotalDue) as TotalDue from Sales.SalesOrderHeader soh inner join sales.Customer c on soh.CustomerID=c.CustomerID where soh.OrderDate between @startDate and @endDate group by c.AccountNumber, soh.OrderDate |
Microsoft SQL Server Analysis Services | SELECT NON EMPTY { [Measures].[Sales Amount], [Measures].[Tax Amt] } ON COLUMNS , NON EMPTY { ([Dim Customer].[First Name].[First Name].ALLMEMBERS * [Dim Customer].[Last Name].[Last Name].ALLMEMBERS ) } ON ROWS FROM [Adventure Works DW] |
XML | <Query> <Method Name="DictionaryList" Namespace="http://services.aonaware.com/webservices"> </Method> <ElementPath IgnoreNamespaces="true">*</ElementPath> </Query> |
表1.基于不同数据源类型的不同查询语句
一个完整的数据集属性查询窗口见图3-6.
图3-6.数据集属性查询窗口
在数据集属性窗口的菜单窗格中,你可以看到其他四个选项:字段、选项、筛选器和参数。点击字段选项来确保你的查询语句正确,字段是否可用。如果这个步骤出现问题,则字段选项将会提示错误信息或者不显示任何字段。选项可以设置对数据集调整的一些参数,包括:排序规则、区分大小写、区分重音、区分假名类型、区分半角。过滤选项允许通过限制条件来限制那些行显示在报表中,这些限制条件包括:=,like,Top N,between。最后,参数选项允许你修改传送到数据源的查询,查询参数是基于数据源的协议的,而参数值可以基于报表运行时用户的输入数据。参数窗口可以在图3-7中看到。我们将会在后续文章中讨论用户输入参数。
图3-7.数据集属性参数窗口
在点击确定创建完数据集后,我们就能在报表数据窗格中看到它了。点击+号展开树状菜单就可以看到可用的字段了,如图3-8所示。你将会在下一篇关于tablix报表项的文章中用到它。
图3-8.最终完成后在报表数据中的数据源和数据集
接下来呢?
目前为止,我们已经连接到数据源并知道我们需要用到的报表元素。我们也可以在其它报表中使用这个报表所创建的共享信息。对于大BOSS所需要的报表来说,你还需要知道展示哪些数据,分组行和列,按某些命名规则排序,以及按特定格式展现数据。你将在本系列文章的下一篇Tablix指南中学到。
-----------------------------------------------------------------------
原文链接:Data Everywhere - Level 3 in the Stairway to Reporting Services
Translated By:CareySon