引言
本文节选了 Brian Larson 所著的 Microsoft SQL Server 2005 Reporting Services 一书。学习如何通过参数化 MDX 查询将 Analysis Services 多维数据集用作数据源,以及如何本地化报表中的标签字符串。要查看本文中的所有示例代码,请访问此处。
Galactic Delivery Services
此节选中的示例报表以名为 Galactic Delivery Services (GDS) 公司的业务需求为基础。为加深对这些示例报表的理解,下面提供了一些有关 GDS 的背景资料。
公司背景
GDS 在附近星系区域的若干个行星系之间提供包裹递送服务。该公司专营速递服务,特色服务包括同日达、次日达以及昨日达。后者通过其新 Photon III 飞行器得以实现,该飞行器的飞行速度超过了光速。具备超过光速的能力使得 GDS 能够利用广义相对论的威力,竟然可以在寄送包裹的前一天送达包裹。
尽管 GDS 的递送服务很独特,却有着与任何更传统的包裹递送服务相同的数据处理需求。当包裹从一个行星间中心转移到另一个行星间中心时,GDS 使用 SQL Server 2005 数据库来跟踪包裹。它还使用一个 SQL Server 2005 Analysis Services 数据库来承载用于业务智能应用程序的数据集市。此外,还使用 SQL Server 2005 Reporting Services 来创建和管理来自两个数据存储的报表。
创建递送分析报表
此报表所突显的功能
“递送分析报表”的创建过程中突显了 Microsoft SQL Server 2005 Reporting Services 的下列功能:
• | 通过 MDX 查询将 Analysis Services 多维数据集用作数据源。 |
• | 参数化 MDX 查询。 |
• | 本地化报表中的标签字符串。 |
业务需求
Galactic Delivery Services 的长期规划委员会正从事公司未来成长设备及人员需求的预测工作。他们需要能够显示每季度按客户划分的递送次数和平均递送重量的报表。此外,他们还希望能够选择数据是否包括次日达、同日达、昨日达或这三种服务的某种组合。此报表的数据应来自由 Microsoft SQL Server 2005 Analysis Services 承载的 GalacticDeliveriesDataMart 多维数据集。
委员会成员来自许多行星。大多数成员讲英语,但委员会中也的确有讲西班牙语的成员。(我知道这会让遥远星系中的人们感到相当陌生,但由于你们当中的大多数人未在 Windows 中加载 Borlaronese 和 Noxicomian 语言,因此英语和西班牙语使用起来要简便得多。)
任务概述
通过完成下面两项任务来创建“递送分析报表”:
任务 1
1. | 将 .NET 程序集复制到适当位置。 |
2. | 创建新报表。 |
3. | 创建对程序集的引用。 |
4. | 使用“MDX 查询设计器”创建数据集。 |
任务 2
1. | 在报表布局中添加表格。 |
2. | 填充表格。 |
3. | 本地化报表字符串。 |
递送分析报表,任务 1
注意 您需要下载 GalacticOLAP 项目并将其部署到 SQL Server Analysis Services 服务器上,然后才能完成此报表。
1. | 如果尚未执行该操作,请下载 ReportUtil.dll 及其源代码。 |
2. | 将该文件复制到“报表设计器”文件夹。“报表设计器”文件夹的默认路径为:C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies。 |
3. | 从“控制面板”的“管理工具”部分启动 Microsoft .NET Framework 2.0 Configuration 程序。 |
4. | 单击“Configure Code Access Security Policy”(配置代码访问安全策略)。 |
5. | 单击“Increase Assembly Trust”(增加程序集信任)。 |
6. | 为此计算机选择“Make changes”(进行更改),然后单击“Next”(下一步)。 |
7. | 单击“Browse”(浏览)。浏览到 PublicAssemblies 文件夹,然后选择 ReportUtil.dll。单击“Open”(打开),然后单击“Next”(下一步)。 |
8. | 选择“This one assembly”(该程序集),然后单击“Next”(下一步)。 |
9. | 将“Trust level”(信任级别)滑块滑动到“Full Trust”(完全信任),然后单击“Next”(下一步)。 |
10. | 单击“Finish”(完成)。 |
11. | 关闭 .NET Framework 2.0 Configuration 程序。 |
12. | 如果已关闭 Chapter08 项目,请在“报表设计器”中再次打开该项目。 |
13. | 使用 GDSReport 模板创建名为 DeliveryAnalysis 的新报表。 |
14. | 打开“Report Properties”(报表属性)对话框。选择“References”(引用)选项卡。 |
15. | 单击“References”(引用)区域旁的 …。将出现“Add Reference”(添加引用)对话框。 |
16. | 向下滚动,然后选择“ReportUtil”程序集。单击“Add”(添加)将此文件添加到“所选”项目和组件列表。 |
17. | 单击“OK”(确定)退出“Add Reference”(添加引用)对话框。单击“OK”(确定)退出“Report Properties”(报表属性)对话框。 |
18. | 创建名为 DeliveryInfo 的新数据集。从“Data source”(数据源)下拉列表中选择“New Data Source”(新建数据源)。将出现“Data source”(数据源)对话框。 |
19. | 输入 GalacticDM 作为“Name”(名称)。从“Type”(类型)下拉列表中选择“Microsoft SQL Server Analysis Services”。 |
20. | 单击“Connection string”(连接字符串)文本框旁的“Edit”(编辑)。将出现“Connection Properties”(连接属性)对话框。 |
21. | 输入 SQL Server Analysis Services 服务器的名称作为“Server name”(服务器名称)。 |
22. | 从“Select or enter a database name”(选择或输入数据库名称)下拉列表中选择“GalacticOLAP”。如果您愿意可以测试连接,但如果 GalacticOLAP 出现在下拉列表中,则表明连接已经过测试。 |
23. | 单击“OK”(确定)退出“Connection Properties”(连接属性)对话框。单击“OK”(确定)退出“Data source”(数据源)对话框。再次单击“OK”(确定)退出“Dataset”(数据集)对话框。将出现“MDX 查询设计器”,如图 1 所示。 图 1. MDX 查询设计器 |
24. | 在“Metadata”(元数据)窗格中展开“Measures”(度量值)。展开“Delivery”(递送)度量值组并展开其中的“Delivery”(递送)条目。 |
25. | 将“Delivery Count”(递送计数)度量值拖动到“Results”(结果)窗格(中央位置包含词语“Drag levels or measures here to add to the query”(将级别或度量值拖至此处,以添加到该查询中)的窗格)。GalacticDeliveriesDataMart 多维数据集中当前所有递送总数显示在“Results”(结果)窗格中。 |
26. | 在“Metadata”(元数据)窗格中展开“Customer”(客户)维度。将“CustomerName”属性拖动到“Results”(结果)窗格上“Delivery Count”(递送计数)的左侧。“Results”(结果)窗格此时显示每位客户所有递送的总数。 |
27. | 在“Metadata”(元数据)窗格中展开“Time”(时间)维度。将“Delivery-Quarter”(递送-季度)属性拖动到“Results”(结果)窗格上 CustomerName 列的左侧。“Results”(结果)窗格此时显示每位客户每个季度所有递送的总数。 |
28. | 在“Calculated Members”(计算成员)窗格中右键单击,然后从“Context”(上下文)菜单中选择“”(New Calculated Member)。将出现“Calculated Member Builder”(计算成员生成器)对话框。 |
29. | 输入 AvgWeight 作为“Name”(名称)。 |
30. | 在“Expression”(表达式)区域中,输入 ROUND(。展开“Metadata”(元数据)区域中的“Measures”(度量值),展开“Delivery”(递送)度量值组,再展开其中的“Delivery”(递送)条目。双击“Package Weight”(包裹重量)将其添加到表达式中。 |
31. | 在表达式尾部输入 /。双击“Delivery Count”(递送计数)将其添加到表达式中。 |
32. | 在表达式尾部输入 ,2),然后单击“Check”(检查)来检查表达式的语法。单击“OK”(确定)关闭“Check Syntax”(检查语法)对话框。如果遇到语法错误,对表达式进行必要的更正。 |
33. | 单击“OK”(确定)退出“Calculated Member Builder”(计算成员生成器)对话框。 |
34. | 将 AvgWeight 计算成员拖动到“结果”窗格上“Delivery Count”(递送计数)的右侧。 |
35. | 在“Filter”(筛选器)窗格(“MDX 查询设计器”右上角的窗格)中,从“Dimension”(维度)列的下拉列表中选择“Service Type”(服务类型)。 |
36. | 从“Hierarchy”(层次结构)列的下拉列表中选择“Description”(说明)。 |
37. | 从“Operator”(运算符)列的下拉列表中选择“Equal”(等于)。 |
38. | 检查“Filter Expression”(筛选表达式)列下拉窗口中的值,但不进行选择。“Filter Expression”(筛选表达式)列让您可以为筛选表达式的右侧选择一个或多个值。我们让用户可以在运行时进行选择,而不是在设计时进行选择。单击“Cancel”(取消)退出下拉窗口。 |
39. | 选中“Parameters”(参数)列中的框。此项选择让用户可以在运行时选择筛选表达式的值。应会出现“MDX 查询设计器”,如图 2 所示。 图 2. 包含“递送分析报表”查询的“MDX 查询设计器” |
任务 1 说明
“MDX 查询设计器”的操作几乎完全通过拖放来进行。从“Metadata Browser”(元数据浏览器)窗格拖动度量值、维度和层次结构,然后将它们放置在“Results”(结果)窗格中以创建查询。还可以定义计算成员并将它们添加到“Results”(结果)窗格中。
正在查询的多维数据集名称位于“Metadata”(元数据)窗格顶部。要选择其他多维数据集,请单击 … 按钮,然后从出现的“Cube Selection”(选择多维数据集)对话框中进行选择。
请注意,在设计器的工具栏中有两个刷新按钮。左侧的刷新按钮用于刷新“Datasets”(数据集)窗口中此数据集的字段。右侧的刷新按钮用于刷新多维数据集中的元数据。带镐的工具栏按钮用于从“MDX 查询设计器”切换到“DMX 查询设计器”。带 x 轴和 y 轴的工具栏按钮用于切换回“MDX 查询设计器”。“MDX 查询设计器”用于在 Analysis Services 数据库中查询多维数据集,而“DMX 查询设计器”用于在 Analysis Services 数据库中查询数据挖掘模型。由于同一 Analysis Services 数据库可能既包含多维数据集又包含数据挖掘模型,仅通过检查数据库“报表设计器”可能无法告知您需要哪个查询设计器。因此,有必要找到在两者之间切换的方法。
“Show Empty Cells”(显示空单元)工具栏按钮用于在“Results”(结果)窗格中于显示和隐藏空单元之间进行切换。空单元格是某些维度和层次结构成员的组合,这些成员每种度量值(计算或其他类型)在“Results”(结果)窗格中的值都为空值。如果空单元在“Results”(结果)窗格中是隐藏的,则它们在最终报表查询中也将是隐藏的。“Design Mode”(设计模式)工具栏按钮让您可以在 MDX 查询的设计视图和查询视图之间切换。如果熟悉 MDX 查询语法,可能希望在查询视图中键入查询,而不是通过设计视图的拖放编程方法来创建它们。“Auto Execute”(自动执行)工具栏按钮用于在查询设计器中切换自动执行模式。启用自动执行模式后,每次在“Results”(结果)窗格中添加项目或从中删除项目,都将重新查询多维数据集并更新“Results”(结果)窗格。
“Filters”(筛选器)窗格让我们可以在设计时硬编码筛选表达式,或让我们可以使用报表参数,以供用户在运行时做出选择。选中“Parameters”(参数)复选框时,将创建参数化筛选器。参数化筛选器添加到查询中后,第一次从“Data”(数据)选项卡转移到“Layout”(布局)选项卡时,会引发若干个事件。发生事件时,“报表设计器”会为参数化筛选器中正在使用的每个项目创建新数据集。此数据集包括该项目的所有有效成员。
除数据集外,还将为每个参数化筛选器创建新报表参数。数据集用于为这些报表参数填充可用的值。报表参数为多值参数。通过使用这种机制,用户可以选择报表执行时将在参数化筛选器中使用的一个或多个有效成员。
递送分析报表,任务 2
1. | 选择“Layout”(布局)选项卡。 | ||||||||||||||||
2. | 在报表主体上放置一个文本框,并按如下所示设置其属性:
| ||||||||||||||||
3. | 将文本框的内容设置为下列表达式: =ReportUtil.Localization.LocalizedString("DeliveryReportTitle",User!Language) | ||||||||||||||||
4. | 在报表主体中放置一个矩阵。 | ||||||||||||||||
5. | 展开“DeliveryInfo”数据集并将“DeliveryQuarter”拖动到“Columns”(列)单元中。单击工具栏中的“Bold”(加粗)按钮和“Center”(居中)按钮。 | ||||||||||||||||
6. | 将“CustomerName”拖动到“Rows”(行)单元中。单击工具栏中的“Bold”(加粗)按钮。 | ||||||||||||||||
7. | 将“Delivery_Count”拖动到“Data”(数据)单元中。 | ||||||||||||||||
8. | 将“AvgWeight”拖动到放置“Delivery_Count”的同一单元中。将其拖动到单元的右侧。这会在第一个数据列的右侧创建第二个数据列。 | ||||||||||||||||
9. | 在包含“Delivery”(递送)的文本框中输入下列表达式: =ReportUtil.Localization.LocalizedString("DeliveryCountColHead",User!Language) | ||||||||||||||||
10. | 在包含“AvgWeight”的文本框中输入下列表达式: =ReportUtil.Localization.LocalizedString("AvgWeightColHead",User!Language) | ||||||||||||||||
11. | 打开“Report Parameters”(报表参数)对话框。您会看到“ServiceTypeDescription”报表参数,创建该参数是为了与参数化筛选器配合使用。 | ||||||||||||||||
12. | 输入 Select Service Types 作为“Prompt”(提示)。 | ||||||||||||||||
13. | 单击“OK”(确定)退出“Report Parameters”(报表参数)对话框。 | ||||||||||||||||
14. | 选择“Preview”(预览)选项卡。在“Select Service Types”(选择服务类型)下拉列表中选中“All”(全部),然后单击“View Report”(查看报表)。报表如图 3 所示。 图 3. 递送分析报表 | ||||||||||||||||
15. | 从工具栏中选择“Save All”(全部保存)。 |
任务 2 说明
您可能注意到我们未在报表中为报表标题和两个列标题键入文本字符串。而是使用了调用 ReportUtil 程序集中 Localization 类 LocalizedString 方法的表达式。(本地化是指将报表或计算机程序以特定地区语言显示的过程。)此方法需要两个参数:要本地化的字符串的名称和应本地化成的目标语言。字符串名称在每个表达式中采用硬编码形式。语言来自 User!Language 全局变量。该全局变量由请求报表的客户端应用程序的语言进行填充。
ReportUtil 程序集使用多个资源文件来管理本地化。ReportUtil 必须支持的每种语言都对应于一个资源文件。在为此示例提供的演示代码中,ReportUtil 只有两个资源文件:一个用于英语,另一个用于西班牙语。要支持其他语言,只需添加其他资源文件,然后重新生成项目。
我们使用 LocalizedString 方法获得报表标题和两个列标题的本地化版本。报表内容的其余部分不是专有名称,就是数字。这两种内容都不需要进行翻译。如果您目光敏锐,会注意到报表参数提示和报表参数下拉列表中的项目尚未本地化。由于无法为这两种项目使用表达式,因此将不能使用功能强大的 LocalizedString 方法。
由于下拉列表内容是从数据库中选择的,因此数据的部分本地化可作为查询的一部分来完成。报表参数是一个更大的问题。实际上,Reporting Services 的当前版本并没有令人满意的方法可以解决此问题。
使用 .NET 程序集上载报表
现在,让我们来看一下将引用 .NET 程序集的报表移动到 Report Server 所需的步骤。
将 .NET 程序集复制到 Report Server
要使报表能够访问 .NET 程序集,它必须位于 Report Server 的应用程序文件夹中。此步骤并不需要执行复杂的部署、上载或安装例程。只需将程序集的 DLL 文件复制到相应的目录。可以使用“递送分析报表”及其 .NET 程序集 ReportUtil.dll 尝试一下。下面是需要遵循的步骤:
1. | 找到 ReportUtil.dll 文件。您还需要包含西班牙语版本 ReportUtil.dll 的 ES 文件夹。此西班牙语版本名为 ReportUtil.resources.dll。(文件夹名称 ES 是 Español 的两字母代码。)如果在任何其他位置都没有上述项目,它们应该位于开发计算机上的“公共程序集”文件夹中。“公共程序集”文件夹的默认路径为: C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies。 |
2. | 将文件和 ES 文件夹复制并粘贴到作为 Report Server 计算机使用的计算机的 Report Server 应用程序文件夹中。Report Server 应用程序文件夹的默认路径为: C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin。 |
代码访问安全性
由于 Reporting Services 是一个 .NET 应用程序,因此它使用代码访问安全性来确定每个程序集拥有的执行权限。代码访问组会将程序集与特定权限相关联。代码访问组中的成员身份标准由安全类决定,而权限由命名权限集决定。
图 4 提供了对代码访问安全性的图解说明。仅当满足安全类指定的条件时,.NET 程序集或 Web 服务方可进入代码访问组。.NET 程序集或 Web 服务被允许进入代码访问组后,即可使用与该代码访问组关联的命名权限集获得权限。这些权限让 .NET 程序集或 Web 服务可以在计算机上执行任务。可将许多不同类型的权限包括在命名权限集中。
图 4:代码访问安全性
代码访问组可相互嵌套。.NET 程序集或 Web 服务可被允许进入父组并获得其权限;它随后便可尝试在子代码访问组获得成员身份以累积更多权限。代码访问组可以是第一个匹配的代码组,在这种情况下 .NET 程序集或 Web 服务只能在一个代码访问组(即与它匹配的第一个代码访问组)中获得成员身份。代码访问组也可以是一个联合代码组,在这种情况下,由于已将每个组的权限联合在一起,因此 .NET 程序集或 Web 服务被允许在多个代码访问组中获得成员身份。
安全类
安全类说明 .NET 程序集或 Web 服务进入代码访问组所需满足的条件。我们为 ReportUtil.dll 程序集使用 StrongNameMembershipCondition 安全类。
UrlMembershipCondition 安全类表示从指定 URL 执行的任何程序集或 Web 服务都将包括在特定代码访问组中。必须匹配的 URL 使用 UrlMembershipCondition 安全类在每个代码访问组中列出。例如,MyServer 代码访问组可能使用 UrlMembershipCondition 并将 http://MyServer/* 指定为必须匹配的 URL。任何在 MyServer 上运行的 Web 服务都将包括在此代码访问组中。
StrongNameMembershipCondition 安全类使用与程序集关联的强名称来标识程序集。强名称是作为程序集唯一标识的十六进制数字长字符串,在程序集创建时分配给程序集。StrongNameMembershipCondition 安全类是一种确保只有预期程序集才被允许进入代码访问组的好方法。
您可在 Report Server 安全性配置中看到几个其他安全类。AllMembershipCondition 安全类可在所有 .NET 程序集和 Web 服务中使用。ZoneMembershipCondition 安全类只能在源于特定区域的 .NET 程序集和 Web 服务中使用。例如,MyComputer、Intranet 和 Internet 这些区域。
命名权限集
命名权限集将由代码访问组分配的权限组合起来。由 Report Server 使用的安全性配置包含以下三个命名权限集:
• | “Nothing”(无)权限不授予任何权限,最初用于在后继代码访问组添加回特定权限前剥夺 .NET 程序集或 Web 服务的所有权限。这可确保每个 .NET 程序集或 Web 服务都只拥有其所需的权限。 |
• | “Execution”(执行)权限为 .NET 程序集或 Web 服务授予执行权限。这意味着可运行 .NET 程序集或 Web 服务。不过,.NET 程序集或 Web 服务无权访问任何受保护的资源,如文件系统、注册表或 Internet。 |
• | “FullTrust”(完全信任)权限为 .NET 程序集或 Web 服务授予访问所有资源的权限。其中包括对受保护资源的访问。FullTrust 权限只应授予您所信任的、不会将您的计算机搞得一团糟的 .NET 程序集或 Web 服务! |
修改 Report Server 的安全性配置
由于您已对代码访问安全性有了基本的了解,我们可以开始修改 Report Server 的安全性配置,以使 ReportUtil.dll 能够运行。
警告 在对服务器安全性进行任何更改之前,请咨询您的网络或服务器管理员。
我们需要对 Report Server 的安全性配置进行一些补充,以为我们的自定义程序集提供执行所需的权限。Report Server 的安全性配置位于 rssrvpolicy.config 文件中。该文件的默认路径为:
C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer。
此文件将代码访问安全性信息包含在 XML 结构中。
警告 在对其进行任何修改之前,请创建 rssrvpolicy.config 文件的备份副本。如果意外创建了无效的 XML 结构或因其他原因导致安全性配置出现问题,Report Server 将无法执行任何报表。
rssrvpolicy.config 文件中的 XML 结构可分为以下三部分:安全类、命名权限集和代码组。我们只需修改该文档的“代码组”部分。下面是需要执行的步骤:
1. | 在“记事本”或其他文本编辑器中打开 rssrvpolicy.config 文件。 |
2. | 向下滚动,直至找到文档的“代码组”部分。文档的“代码组”部分从命名权限集结束 XML 标记后的那一行开始: </NamedPermissionSets> |
3. | 第一个代码组是父代码组,它利用 AllMembershipCondition 将“Nothing”(无)权限分配给所有 .NET 程序集和 Web 服务。另一个父代码组使用 ZoneMembershipCondition 为 MyComputer 区域中的所有 .NET 程序集和 Web 服务分配“Execute”(执行)权限。我们紧跟着它添加一个新的子代码组。如下所示插入这个新代码组(添加以粗体显示的行)。请注意,Description 和 PublicKeyBlob 应分别在不同的行上输入。 <CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="Execution" Description="此代码组将授予 MyComputer 代码 执行权限。 "> <IMembershipCondition class="ZoneMembershipCondition" version="1" Zone="MyComputer" /> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" Name="MSSQLRSCodeGroup" Description="MS SQL RS Book 自定义集合的代码组"> <IMembershipCondition class="StrongNameMembershipCondition" version="1" PublicKeyBlob="0024000004800000940000000602000000 240000525341310004000001000100B9F7 4F2D5B0AAD33AA619B00D7BB8B0F767839 3A0F4CD586C9036D72455F8D1E85BF635C 9FB1DA9817DD0F751DCEE77D9A47959E87 28028B9B6CC7C25EB1E59CB3DE01BB516D 46FC6AC6AF27AA6E71B65F6AB91B957688 6F2EF39417F17B567AD200E151FC744C6D A72FF5882461E6CA786EB2997FA968302B 7B2F24BDBFF7A5" /> </CodeGroup> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" Name="Microsoft_Strong_Name" Description="此代码组将授予使用 Microsoft 强命名完全信任进行签名的代码。 "> <IMembershipCondition class="StrongNameMembershipCondition" version="1" PublicKeyBlob="0024000004800000940000000602000000 24000052534131000400000100010007D1 FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD 6AEC8F87FB03766C834C99921EB23BE79A D9D5DCC1DD9AD236132102900B723CF980 957FC4E177108FC607774F29E8320E92EA 05ECE4E821C0A5EFE8F1645C4C0C93C1AB 99285D622CAA652C1DFAD63D745D6F2DE5 F17E5EAF0FC4963D261C8A12436518206D C093344D5AD293" /> </CodeGroup> |
4. | 保存修改的文件并退出文本编辑器。 |
部署报表
我们希望报表所需的每个唯一连接都只有一个共享数据源。这一小组共享数据源应置于一个中央位置。上载每个报表后,我们仍需手动执行将每个报表指向中央共享数据源组的任务。
报表项目的“Property Pages”(属性页)对话框中有一个属性,它指定将共享数据源部署到的文件夹路径。让我们尝试在从“报表设计器”部署“递送分析报表”时利用这个属性。尝试执行以下操作:
1. | 在 Visual Studio 或 Business Intelligence Development Studio 中打开 Chapter08 项目。 |
2. | 从“Main”(主)菜单中选择“Project”(项目)|“Chapter08 Properties”(Chapter08 属性)。将出现“Chapter08 Property Pages”(Chapter08 属性页)对话框。 |
3. | 为“TargetDataSourceFolder”输入 /Galactic Delivery Services/Shared Data Sources/。 |
4. | 为“TargetReportFolder”输入 /Galactic Delivery Services/Chapter 08/。 |
5. | 为“TargetServerURL”输入 http://ComputerName/ReportServer。用承载 Reporting Services 的计算机名称替换“ComputerName”。 |
6. | 单击“OK”(确定)关闭“Chapter08 Property Pages”(Chapter08 属性页)对话框。 |
7. | 从工具栏中选择“Save All”(全部保存)。 |
8. | 在“Solution Explorer”(解决方案资源管理器)窗口中右键单击“DeliveryAnalysis”报表条目,然后从“Context”(上下文)菜单中选择“Deploy”(部署)。 |
9. | 切换到浏览器并导航到 Chapter 08 文件夹。 |
10. | 执行 DeliveryAnalysis 报表。 |
11. | 从下拉列表中选择若干个服务类型,然后单击“View Report”(查看报表)。将使用 Shared Data Sources 文件夹中找到的共享数据源显示报表。 |
本地化略述
您可能还记得我们曾使用 ReportUtil.dll 程序集以英语和西班牙语显示报表标签。我们将 User!Language 参数传递给 LocalizedString 方法以使用所需的语言检索报表标签。User!Language 参数包含请求报表的应用程序的语言设置。当我们使用“报表管理器”时,浏览器就是那个应用程序。
让我们尝试更改浏览器的语言设置,看一看本地化是否能够正常进行。(下列说明适用于 Microsoft Internet Explorer。)
1. | 从 Internet Explorer 的主菜单中选择“工具”|“Internet 选项”。将出现“Internet 选项”对话框。 |
2. | 单击“语言”。将出现“语言首选项”对话框。 |
3. | 如果语言列表中没有“西班牙语(墨西哥)[es-mx]”条目,请单击“添加”。将出现“添加语言”对话框。 |
4. | 在语言列表中突出显示“西班牙语(墨西哥)[es-mx]”,然后单击“确定”退出“添加语言”对话框。 |
5. | 在语言列表中突出显示“西班牙语(墨西哥)[es-mx]”,然后单击“上移”所需的次数,以将西班牙语条目移至列表顶部。 |
6. | 单击“确定”退出“语言首选项”对话框。单击“确定”退出“Internet 选项”对话框。 |
7. | 单击“报表查看器”工具栏中的“Refresh Report”(刷新报表)按钮。User!Language 参数现在具有了 es-mx 一值,因为您将浏览器的主要语言设置为西班牙语(墨西哥)。由于这个原因,报表标题和列标题现在都是西班牙语,如图 5 所示。 图 5. 标题和列标题已本地化为西班牙语的“递送分析报表” |
8. | 如果在步骤 3 和 4 中创建了西班牙语条目,请使用“语言首选项”对话框将其删除。请确保将正确语言的位置恢复为语言列表的顶部。 |
ReportUtil.dll 程序集中有英语和西班牙语的资源文件。英语为默认语言。如果传递给 LocalizedString 方法的参数是西班牙语的任何文化变体语言,此方法将使用西班牙语资源文件来查找报表标题或列标题的文本。如果传递给 LocalizedString 方法的是任何其他内容,将使用英语资源文件。
相关书籍
Microsoft SQL Server 2005 Reporting Services
Delivering Business Intelligence with Microsoft SQL Server 2005(通过 Microsoft SQL Server 2005 实现业务智能)