您的当前位置:首页正文

SQL2008_Report

2021-10-06 来源:步旅网


SQL2008_Report_Services基础教程

提示: 安装有 AdventureWorks2008 数据库的 Microsoft SQL Server 2008。必须先下载并安装 SQL Server 2008 示例和示例数据库,才能对其进行查看或使用。

实验1:创建基本表报表

按照本动手实验中的步骤来学习如何创建第一个报表。本动手实验将向您演示如何使用报表设计器来创建数据源连接,定义简单查询并生成包含数据的布局。 实验2:向报表添加参数

按照本动手实验中的步骤来学习添加控制报表外观和内容的参数。 实验3:创建基本矩阵报表

按照本动手实验中的步骤学习如何创建包含矩阵的报表。 实验4:向报表添加饼图

按照本动手实验中的步骤学习如何向报表添加饼图。 实验5:向报表添加条形图

按照本动手实验中的步骤学习如何向报表添加条形图。 实验6:向报表添加 KPI

按照本动手实验中的步骤学习如何向报表添加关键绩效指标 (KPI)。这包括图像或仪表数据区域。

实验7: 使用report builder2.0创建报表 实验8(可选) : 使用VC#应用程序访问报表服务器

动手实验1:创建基本表报表 (共六个课练习)

第 1 课:创建报表服务器项目 (Reporting Services) 第 2 课:指定连接信息 (Reporting Services) 第 3 课:为表报表定义数据集 (Reporting Services) 第 4 课:向报表添加表 (Reporting Services) 第 5 课:设置报表格式 (Reporting Services) 第 6 课:添加分组和总计 (Reporting Services)

第 1 课:创建报表服务器项目 (Reporting Services) 创建报表服务器项目 1.

单击“开始”,依次指向“程序”和 Microsoft SQL Server 2008,然后单击 Business Intelligence Development Studio。 在“文件”菜单上,指向“新建”,再单击“项目”。 在“项目类型”列表中,单击“商业智能项目”。 在“模板”列表中,单击“报表服务器项目”。 在“名称”中,键入 Tutorial。 单击“确定”以创建项目。

解决方案资源管理器中将显示 Tutorial 项目。 创建新的报表定义文件 1.

在解决方案资源管理器中,右键单击“报表”,指向“添加”,再单击“新建项”。

注意: 如果“解决方案资源管理器”窗口不可见,请单击“视图”菜单中的“解决方案资源管理器”。 2.

在“添加新项”对话框的“模板”下,单击“报表”。

2. 3. 4. 5. 6.

3. 在“名称”中,键入 Sales Orders.rdl,再单击“添加”。 此时报表设计器将打开,并在“设计”视图中显示新的 .rdl 文件。

您已经成功创建了名为“Tutorial”的报表项目,并向该报表项目添加了报表定义 (.rdl) 文件。接下来,您将指定要用于报表的数据源。 第 2 课:指定连接信息 (Reporting Services) 设置连接 1.

在“报表数据”窗格中,单击“新建”,然后单击“数据源”。 注意: 如果“报表数据”窗格不可见,请单击“视图”菜单上的“报表数据”。 2. 3. 4. 5.

在“名称”中,键入 AdventureWorks。 确保已选中“嵌入连接”。

在“类型”中,选择 Microsoft SQL Server。 在“连接字符串”中,键入以下内容:

Data source=localhost; initial catalog=AdventureWorks2008 6.

该连接字符串假定 Business Intelligence Development Studio、报表服务器和 AdventureWorks2008 数据库都已安装在本地计算机中,并且您拥有登录 AdventureWorks2008 数据库的权限。 7.

单击“确定”。名为 AdventureWorks 的数据源即被添加到“报表数据”窗格中。

您已成功定义了到 AdventureWorks 示例数据库的连接 第 3 课:为表报表定义数据集 (Reporting Services)

定义数据源后,您需要定义数据集。在 Reporting Services 中,您在报表中使用的数据包含在“数据集”中。您将创建一个查询,用于从 AdventureWorks2008 数据库中检索销售订单信息。 为报表数据定义 Transact-SQL 查询

1.

在“报表数据”窗格中,单击“新建”,然后单击“数据集”。此时将打开“数据集属性”对话框。

在“名称”框中,键入 AdventureWorksDataset。

确保数据源名称 AdventureWorks 位于“数据源”文本框中,并确保“查询类型”为“文本”。

将以下 Transact-SQL 查询键入(或复制并粘贴)到“查询”框中。

2. 3.

4.

SELECT

soh.OrderDate AS [Date],

soh.SalesOrderNumber AS [Order],

pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty,

SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp

INNER JOIN Sales.SalesOrderHeader AS soh

ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID

INNER JOIN Production.ProductSubcategory AS pps

ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc

ON ppc.ProductCategoryID = pps.ProductCategoryID

GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name,

soh.SalesPersonID

HAVING ppc.Name = 'Clothing' 5.

(可选)单击“查询设计器”按钮。查询将在基于文本的查询设计器中显示。通过单击“编辑为文本”,可以切换到图形查询设计器。通过单击查询设计器工具栏上的“运行”(!)按钮来查看查询结果集。 单击“确定”退出查询设计器。 6.

单击“确定”退出“数据集属性”对话框。

此时将在“报表数据”窗格中显示 AdventureWorksDataset 数据集字段。 第 4 课:向报表添加表 (Reporting Services)。

向报表布局中添加表数据区域和字段 1.

在“工具箱”中,单击“表”,再单击设计图面。报表设计器将在设计图面中心绘制一个具有三列的数据区域。

注意: “工具箱”可能显示为“报表数据”窗格左侧的一个选项卡。若要打开“工具箱”,请将指针移到“工具箱”选项卡上。如果“工具箱”不可见,请单击“视图”菜单上的“工具箱”。 2.

在“报表数据”窗格中,展开 AdventureWorksDataset 数据集以显示字段。

将 Date 字段从“报表数据”窗格拖到表的第一列中。 将 Order 字段从“报表数据”窗格拖到表的第二列中。 将 Product 字段从“报表数据”窗格拖到表的第三列中。

将 Qty 字段拖到第三列的右边缘,直到显示一个垂直光标且鼠标指针带有加号 [+] 为止。释放鼠标按钮后,将为 [Qty] 创建第四列。 请以相同方式添加 LineTotal 字段,并创建第五列。

以下关系图显示已由下列字段填充的表数据区域:Date、Order、Product、Qty 和 Line Total。

3. 4. 5. 6.

7.

预览报表

单击“预览”选项卡。报表设计器将运行此报表,并将其显示在“预览”视图中。

下图显示了“预览”视图中的部分报表。

请注意,Line Total 列中货币的小数点后面有六个小数位,并且日期具有不必要的时间戳。此格式问题将在下一课中进行修复。

注意: 您可以在预览报表前后保存报表项目。在“文件”菜单上,单击“全部保存”。 第 5 课:设置报表格式 (Reporting Services) 将设置列标题以及日期和货币值的格式。 设置日期格式

默认情况下,Date 字段显示日期和时间信息。您可以设置其格式,使其只显示日期。

设置日期字段格式 1. 2. 3. 4. 5.

单击“设计”选项卡。

右键单击带 [Date] 字段表达式的单元,然后单击“文本框属性”。 单击“数字”,然后在“类别”字段中,选择“日期”。 在“类型”框中,选择“2000 -01 -31 ”。 单击“确定”。

设置货币格式

LineTotal 字段显示常规数字。请设置其格式,以使其显示货币形式的数字。 设置货币字段格式 1.

右键单击带有 [LineTotal] 字段表达式的单元,然后单击“文本框属性”。

单击“数字”,然后在“类别”字段中,选择“货币”。

2.

3.

  

如果区域设置为“英语(美国)”,则默认设置应为:

小数位数:2 负数:($12345.00) 符号:$ 英语(美国)

选择“使用 1000 分隔符(,)”。

如果示例文本为 $12,345.00,则说明您的设置是正确的。

4.

5. 单击“确定”。

更改文本样式和列宽

还可以更改标题行的格式设置,以使其与报表中的数据行区分开来。最后,您将调整列的宽度。

设置标题行和表列的格式 1.

单击表,以便在此表的上方和旁边显示列控点和行控点。

沿此表的上方和一侧显示的灰色条状物就是列控点和行控点。 2. 3.

指向列控点之间的行,使光标变为双箭头。拖动列,调整到所需大小。 选择包含列标题标签的行,从“格式”菜单中,指向“字体”,然后单击“加粗”。

若要预览报表,请单击“预览”选项卡。其外观应与下图相似:

4.

第 6 课:添加分组和总计 (Reporting Services) 向报表中添加分组和总计以便组织和汇总数据。 在报表中对数据进行分组 1. 2.

单击“设计”选项卡。

从“报表数据”窗格将 Date 字段拖到“行组”窗格,并将其放置到名为 Details 的行上面。

请注意,行控点中现在有一个方括号,用于显示组。表现在在垂直点线的两侧各有一个 Date 列。

3.

从“报表数据”窗格将 Order 字段拖到“行组”窗格,并将其放置到 Date 下面和 Details 上面。

请注意,行控点中现在有两个方括号,用于显示两个组。表现在还包含两个 Order 列。 4.

删除两根线条右侧的原始 Date 和 Order 列。这将删除该单个记录值,以便仅显示组值。选择并右键单击两个列的列控点,然后单击“删除列”。

您可以重新设置列标题和日期的格式。 5.

切换到“预览”选项卡以预览报表。其外观应与下图类似:

向报表中添加总计 1. 2.

切换到“设计”视图。

右键单击包含 [LineTotal] 字段的数据区域单元,并单击“添加总计”。 这将添加一个带有每个订单的美元总金额的行。 3.

右键单击包含 [Qty] 字段的单元,并单击“添加总计”。 这将向总计行添加每个订单的总数量。 4. 5. 6.

在 Sum[Qty] 左侧的空单元中,键入标签“Order Total”。 可以向总计行添加背景色。选择两个累加求和单元和标签单元。 在“格式”菜单上,单击“背景色”,并单击“浅灰色”。

向报表添加每日总计 1.

右键单击 Order 单元,指向“添加总计”,并单击“晚于”。

这将添加一个包含每天的总量和美元总金额的新行,并在 Order 列中添加“Total”标签。 2.

在相同单元中,在 Total 单词之前键入 Daily 单词,使其显示为 Daily Total。

选定 Daily Total 单元、两个 Sum 单元及其之间的空单元。 在“格式”菜单上,单击“背景色”,并单击“橙色”。

3. 4.

向报表添加总计 1.

右键单击 Date 单元,指向“添加总计”,并单击“晚于”。

这将添加一个包含整个报表的总量和美元总金额的新行,并在 Date 列中添加 Total 标签。 2.

在相同单元中,在 Total 单词之前键入 Grand 单词,使其显示为 Grand Total。

选定 Grand Total 单元、两个 Sum 单元及其之间的空单元。 在“格式”菜单上,单击“背景色”,并单击“浅蓝色”。

3. 4.

5.

单击“预览”。

最后一页的外观应与下图相似:

这样,您就成功完成了对“创建基本表报表”动手实验的学习。可以使用该基本表报表作为其他动手实验的基础。

动手实验2: 向报表添加参数

第 1 课:添加按日期筛选报表的参数

本动手实验要求您已完成动手实验:创建基本表报表。 打开现有报表服务器项目 1.

单击“开始”,依次指向“所有程序”和 Microsoft SQL Server 2008,单击 Business Intelligence Development Studio。

在“文件”菜单上,指向“打开”,再单击“项目/解决方案”。 导航到 Tutorial.sln。本动手实验是在动手实验:创建基本表报表 中创建的。

单击“确定”打开项目。“动手实验”项目即在解决方案资源管理器中显示,并带有一个名为 Sales Orders.rdl 的报表。

2. 3.

4.

注意 如果解决方案资源管理器不可见,请单击“视图”菜单中的“解决方案资源管理器”。

将嵌入数据源转换为共享数据源 1.

在“报表数据”窗格中,右键单击数据源 AdventureWorks 并选择“转换为共享数据源”。名为 AdventureWorks.rds 的数据源即被添加到“解决方案资源管理器”中。

在“报表数据”窗格中,右键单击 AdventureWorks 数据源,并选择“数据源属性”。

在“名称”中,键入 AdventureWorks_Ref。 单击“确定”。

2.

3. 4.

替换现有数据集 1.

在“报表数据”窗格中,右键单击数据集 AdventureWorksDataset,然后单击“数据集属性”。 2. 3. 4. 5.

在“数据源”中,确保已选中 AdventureWorks_Ref。 在“查询类型”中,确保已选中“文本”。 单击“查询设计器”按钮打开查询设计器。 用下列查询替换文本框中的文本。

SELECT

soh.OrderDate AS [Date],

soh.SalesOrderNumber AS [Order],

pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty,

SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp

INNER JOIN Sales.SalesOrderHeader AS soh

ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID

INNER JOIN Production.ProductSubcategory AS pps

ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc

ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING (ppc.Name = 'Clothing'

AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate))) 6.

单击工具栏上的“运行”(!)。此时将打开“定义查询参数”对话框,提示您输入参数值。

提供以下两个值以查看筛选的结果集: a. b. 8. 9.

在“参数值”列中,为 @StartDate 输入值,例如 2001-01-01。 在“参数值”列中,为 @EndDate 输入值,例如 2003-01-01。

7.

单击“确定”。

结果集显示 2001 至 2002 年期间筛选后的订单数据集。

10. 单击两次“确定”。“报表数据”窗格即用数据集字段进行填充。另请注

意将自动创建 StartDate 和 EndDate 两个报表参数,并显示在“参数”节点下面。 更改报表参数的数据类型和默认值 1.

在“报表数据”窗格中,展开“参数”,并双击 StartDate。此时将打开“报表参数属性”对话框。

确保参数名称为 StartDate,并且提示为“开始日期”。 在“数据类型”中,选择“日期/时间”。 单击“确定”。

在“报表数据”窗格中,双击 EndDate。验证名称和提示值。 在“数据类型”中,选择“日期/时间”。 单击“确定”。

单击“预览”。StartDate 和 EndDate 参数将分别随附一个日历控件显示在报表工具栏中。参数的数据类型是 Date/Time 并且未定义可用值列表时,将自动显示日历控件。如果定义了可用值列表,则改为显示一个值下拉列表。

2. 3. 4. 5. 6. 7. 8.

9. 提供以下两个参数值以运行报表: a. b.

在 StartDate 参数文本框中,输入日期 2001-01-01。 在 EndDate 参数文本框中,输入日期 2003-01-01。

10. 单击“查看报表”。报表将仅显示位于报表参数值范围中的数据。 为报表创建报表参数后,可以为这些参数添加默认值。默认参数可以使报表自动运行;否则,用户必须输入参数值,报表才能运行。 为参数设置默认值 1.

在“设计”视图的“报表数据”窗格中,展开“参数”,并双击 StartDate。此时将打开“报表参数属性”对话框。 单击“默认值”。

选择“指定值”选项。此时将显示“添加”按钮和空的“值”网格。 单击“添加”。空行即被添加到网格中。 单击“值”文本框,并删除默认文本 (Null)。 键入 2001-01-01。单击“确定”。 在“报表设计”窗格中,双击 EndDate。 单击“默认值”。 选择“指定值”选项。

2. 3. 4. 5. 6. 7. 8. 9.

10. 单击“添加”。

11. 键入 2003-01-01。单击“确定”。

12. 单击“预览”。由于为所有参数定义了默认值,因此报表会立即运行。 将新字段添加至查询以用于筛选 1. 2.

切换到“设计”视图。

右键单击数据集 AdventureWorksDataset,并选择“数据集属性”。打开查询设计器,并用以下新查询替换查询:

SELECT

soh.OrderDate AS [Date], DATENAME(weekday, soh.OrderDate) as Weekday,

soh.SalesOrderNumber AS [Order],

pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty,

SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp

INNER JOIN Sales.SalesOrderHeader AS soh

ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID

INNER JOIN Production.ProductSubcategory AS pps

ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc

ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING (ppc.Name = 'Clothing' AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate))) 3. 4. 5. 6. 7.

单击“运行”(!)。“定义查询参数”对话框随即打开。 在“参数值”列中,为 @StartDate 输入值,例如 20010101。 在“参数值”列中,为 @EndDate 输入值,例如 20030101。 单击“确定”。结果集中应该显示一个标有 Weekday 的新列。

单击两次“确定”。在“报表数据”窗格中,确保含有 Weekday 字段。

(可选)设置要筛选的表数据中的日期的格式 1. 2. 3. 4. 5.

单击“设计”选项卡。

右键单击带 [Date] 字段表达式的单元,然后单击“文本框属性”。 单击“数字”,然后在“类别”字段中,选择“日期”。 在“类型”框中,选择“2000 年 1 月 31 日,星期一”。 单击“确定”。

添加新报表参数 1.

在“设计”视图中,单击“报表数据”窗格中的“新建”,然后单击“参数”。此时将打开“报表参数属性”对话框。

2. 3. 4. 5. 6. 7. 8. 9.

在“名称”中,键入 DayoftheWeek。 在“提示”中,键入“筛选每周工作日:”。 确保该数据类型是 Text。 单击“默认值”。

选择“指定值”选项。此时将显示“添加”按钮和空的“值”网格。 单击“添加”。 键入 “星期五”。 单击“确定”。

使用参数表达式设置表筛选器 1.

在“设计”视图中,右键单击表的行控点或列控点,并选择“Tablix 属性”。 2. 3. 4. 5. 6.

单击“筛选器”。此时将显示空筛选器网格。 单击“添加”。空行即被添加到网格中。 在“表达式”的下拉列表中,选择 [Weekday]。 确保“运算符”显示为等号 (=)。

单击“值”文本框旁边的表达式 (fx) 按钮。此时将打开“表达式”对话框。

在“类别”中,单击“参数”。当前参数列表将显示在“值”窗格中。双击 DayoftheWeek。该参数表达式便会添加至表达式文本框中。现在表达式文本框中将显示以下表达式:=Parameters!DayoftheWeek.Value。 单击“确定”。再次单击“确定”,退出“Tablix 属性”对话框。 单击“预览”。由于所有参数都有默认值,因此报表会自动运行。 第 2 课:添加创建可用值列表的参数。

可用值(即有效值)为用户提供一系列可能的报表参数值。报表作者可以提供专门用于从数据源中检索一组值的查询中的有效值,也可以提供一组预定义的值。

7.

8.

通过将一组可用值绑定到处理报表时运行的数据集查询,可以确保只能从下拉列表中选择数据库中存在的值。 替换现有数据集 1.

在“报表数据”窗格中,右键单击数据集 AdventureWorksDataset,然后单击“数据集属性”。

注意: 如果未显示“报表数据”窗格,请单击“视图”菜单上的“报表数据”。 2. 3. 4. 5.

在“数据源”中,确保已选中 AdventureWorks_Ref。 在“查询类型”中,确保已选中“文本”。 单击“查询设计器”按钮打开查询设计器。 用下列查询替换文本框中的文本:

SELECT

soh.OrderDate AS [Date], DATENAME(weekday, soh.OrderDate) as Weekday, soh.SalesOrderNumber AS [Order],

pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty,

SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp

INNER JOIN Sales.SalesOrderHeader AS soh

ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID

INNER JOIN Production.ProductSubcategory AS pps

ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc

ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING

ppc.Name = 'Clothing'

AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate)) AND soh.SalesPersonID = (@BusinessPersonID)

6.

除添加了将结果集限定为一个销售人员的条件之外,该查询与以前的查询相同:

AND soh.SalesPersonID = (@BusinessPersonID)

单击“运行”(!) 按钮。提示输入查询参数的值时,请使用下表来输入值。

7. 8.

@StartDate @EndDate @BusinessPersonID 9.

20010101 20030101 290 单击“确定”。随即显示 SalesPersonID = 290 的销售人员 Ranjit Varkey Chudukatil 的结果集。

填充报表参数的有效值列表 1.

在“报表数据”窗格中,单击“新建”,然后单击“数据集”。此时将打开“数据集属性”对话框。

在“名称”字段中,键入 BusinessPersons。该数据集将用于填充 SalesPersonID 报表参数的有效值列表。 确保数据源为 AdventureWorks_Ref。

将以下 Transact-SQL 查询粘贴到查询窗格中:

2.

3. 4.

SELECT SP.BusinessEntityID, C.FirstName, C.LastName FROM Sales.SalesPerson AS SP INNER JOIN

HumanResources.Employee AS E ON E.BusinessEntityID = SP.BusinessEntityID INNER JOIN

Person.Person AS C ON C.BusinessEntityID = E.BusinessEntityID ORDER BY SP.BusinessEntityID 5.

单击两次“确定”。随即填充 BusinessPersons 数据集的字段列表。该数据集将用于提供 BusinessPersonID 参数的有效值。

您将发现 BusinessPersons 数据集具有名为 FirstName 和 LastName 的字段。接下来,我们将这两个字段连接为一个名为 Name 的字段。

6.

在“报表数据”窗格中定义计算字段

1.

在“报表数据”窗格工具栏中,右键单击 BusinessPersons 数据集,再单击“添加计算字段”。随即将打开“数据集属性”对话框的“字段”页,并向网格添加一个新行。

在最后一个“字段名称”文本框中,键入 Name。 在“字段源”文本框中,粘贴以下表达式:

=Fields!LastName.Value & \

2. 3.

4. 5.

单击“确定”。

在“报表数据”窗格的 BusinessPersons 数据集下,新字段 Name 将出现在该数据集的字段集合中。

使用可用值列表填充报表参数 1.

在“报表数据”窗格中,展开“参数”节点,右键单击 BusinessPersonID,然后单击“参数属性”。 在“提示”中,键入“选择业务人员:”。 在“数据类型”中,选择“整数”。 单击“可用值”。

选择“从查询中获取值”选项。

从“数据集”下拉列表中,选择 BusinessPersons。 从“值字段”下拉列表中,选择 BusinessEntityID。 从“标签字段”下拉列表中,选择“名称”。

通过选择标签的名称,BusinessEntityID 参数的有效值下拉列表现在将显示每个销售人员的姓名,而不是销售人员编号。 9.

单击“默认值”。

2. 3. 4. 5. 6. 7. 8.

10. 选择“从查询中获取值”选项。

11. 从“数据集”下拉列表中,选择 BusinessPersons。 12. 从“值字段”下拉列表中,选择 BusinessEntityID。 13. 单击“确定”。

14. 单击“预览”选项卡。此报表将显示业务人员姓名下拉列表。

15. 单击“查看报表”。选择其他参数值以查看结果。 后续步骤

第 3 课:添加在列表中选择多个值的参数。 替换现有数据集 1.

在“报表数据”窗格中,右键单击数据集 AdventureWorksDataset,然后单击“数据集属性”。

在“数据源”中,确保已选中 AdventureWorks_Ref。 在“查询类型”中,确保已选中“文本”。 单击“查询设计器”按钮打开查询设计器。 用下列查询替换文本框中的文本:

2. 3. 4. 5.

SELECT

soh.OrderDate AS [Date], DATENAME(weekday, soh.OrderDate) as Weekday, soh.SalesOrderNumber AS [Order],

pps.Name AS Subcat, pp.Name as Product, SUM(sd.OrderQty) AS Qty,

SUM(sd.LineTotal) AS LineTotal FROM Sales.SalesPerson sp

INNER JOIN Sales.SalesOrderHeader AS soh

ON sp.BusinessEntityID = soh.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS sd ON sd.SalesOrderID = soh.SalesOrderID INNER JOIN Production.Product AS pp ON sd.ProductID = pp.ProductID

INNER JOIN Production.ProductSubcategory AS pps

ON pp.ProductSubcategoryID = pps.ProductSubcategoryID INNER JOIN Production.ProductCategory AS ppc

ON ppc.ProductCategoryID = pps.ProductCategoryID GROUP BY ppc.Name, soh.OrderDate, soh.SalesOrderNumber, pps.Name, pp.Name, soh.SalesPersonID HAVING

ppc.Name = 'Clothing'

AND (soh.OrderDate BETWEEN (@StartDate) AND (@EndDate)) AND soh.SalesPersonID IN (@BusinessPersonID) 6.

单击“运行”(!) 按钮。提示输入查询参数的值时,请使用下表来输入值。查询设计器不支持测试多值参数。

@StartDate @EndDate @BusinessPersonID 7.

单击“确定”。

20010101 20030101 290 随即显示 BusinessPersonID = 290 的销售人员 Ranjit Varkey Chudukatil 的结果集。

编辑 BusinessPersonID 报表参数以接受多个值 1. 2. 3. 4.

在“报表数据”窗格中,展开“参数”,并双击 BusinessPersonID 参数。 选中“允许多个值”选项。 单击“确定”。

单击“预览”。报表将自动运行。BusinessPersonID 的下拉列表显示所有销售人员姓名。

注意: 系统将(“全选”)值用作多值参数可用值下拉列表中的第一个值。使用该复选框可以选中或清除所有值。默认情况下,会选中所有值。 添加新数据集以填充报表参数的有效值 1. 2.

切换到“设计”视图。

在“报表数据”窗格中,右键单击 AdventureWorks_Ref,然后单击“添加数据集”。此时将打开“数据集属性”对话框。 在“名称”字段中,键入 WeekDaysfromQuery。 在“查询类型”中,验证是否已选中“文本”。 在“查询”中,键入或粘贴以下查询字符串:

3. 4. 5.

SET DATEFIRST 1; SELECT DISTINCT

DATEPART(weekday, S.OrderDate) as WeekDayNumber, DATENAME(weekday, S.OrderDate) as Weekday FROM Sales.SalesOrderHeader S Order by WeekDayNumber

6.

单击查询设计器工具栏上的“运行”(!) 按钮。结果集将显示序号及每周的工作日。

单击两次“确定”退出“数据集属性”对话框。

数据集 WeekDaysfromQuery 将显示在“报表数据”窗格中。

7.

编辑参数以接受多个值、默认值和有效值 1.

在“报表数据”窗格中,展开“参数”,并双击 DayoftheWeek。此时将打开“报表参数属性”对话框。 选择“允许多个值”。 单击“可用值”。

选择“从查询中获取值”。

在“数据集”下拉列表中,选择 WeekDaysfromQuery。 在“值字段”下拉列表中,选择 Weekday。 在“标签字段”下拉列表中,选择 Weekday。 单击“默认值”。 选择“指定值”。

2. 3. 4. 5. 6. 7. 8. 9.

10. (可选)选择现有值 Friday,并单击“删除”。 11. 单击“添加”。

12. 在“值”中,键入 Saturday。 13. 单击“添加”。

14. 在“值”中,键入 Sunday。 15. 单击“确定”。

在预览该报表之前,需要更改为表数据区域定义的筛选表达式以使用 IN 运算符,这是因为 DayoftheWeek 参数接受多个值。 更改筛选器以使用多值参数 1.

在“设计”视图中,右键单击表,然后单击“Tablix 属性”。此时将打开“Tablix 属性”对话框。

2.

单击“筛选器”。其中已包含一个在第 1 课中为 DaysoftheWeek 添加的筛选器。

在“表达式”的下拉列表中,确保值为 [Weekday]。 确保已选中“文本”。

将“运算符”由等号 (=) 更改为 In 运算符。

在“值”文本框的下拉列表中,确保值为 [@DayoftheWeek]。 单击“确定”。

现在设置表的筛选器,使其使用 In 运算符比较字段 Weekday 的值和参数 DayoftheWeek 的值。为报表参数选择多个值时,筛选器将测试表的每一行,以查看 Weekday 字段是否存在于 DayoftheWeek 集合中。

3. 4. 5. 6. 7.

8.

单击“预览”。该报表会显示默认值为 Saturday 和 Sunday 的报表参数 DaysoftheWeek。使用下拉列表为 DayoftheWeek 参数选择多个值。

第 4 课:添加级联参数。

级联参数提供了一种管理大量报表数据的方法。使用级联参数,一个参数的值列表取决于前面参数选取的值。顺序对于级联参数来说很重要,因为对较晚出现在列表中的参数的数据集查询将包含对较早出现在列表中的参数的引用。 向打开的报表服务器项目添加新报表 1.

在解决方案资源管理器中,右键单击“报表”,指向“添加”,再单击“新建项”。

在“添加新项”对话框的“模板”下,单击“报表”。

在“名称”中,键入 CascadingParameters.rdl,再单击“添加”。 此时报表设计器将打开,并在“设计”视图中显示新的 .rdl 文件。 创建对共享数据源的引用 1. 2. 3. 4. 5.

在“报表数据”窗格中,单击“新建”,然后单击“数据源”。 在“名称”中,键入 AdventureWorks_Ref。 选择“使用共享数据源引用”。 从下拉列表中选择 AdventureWorks。 单击“确定”。

2. 3.

使用查询和查询参数创建主数据集 1.

在“报表数据”窗格中,右键单击数据源 AdventureWorks_Ref,然后单击“添加数据集”。

在“名称”中,键入 SalesbyCategory。

在“数据源”中,确保已选中 AdventureWorks_Ref。 在“查询类型”中,确保已选中“文本”。 在查询窗格下面,单击“查询设计器”。 粘贴以下查询:

2. 3. 4. 5. 6.

SELECT

PC.Name AS Category,

PSC.Name AS Subcategory, P.Name AS Product, SOH.[OrderDate],

SOH.SalesOrderNumber, SD.OrderQty, SD.LineTotal

FROM [Sales].[SalesPerson] SP

INNER JOIN [Sales].[SalesOrderHeader] SOH

ON SP.[BusinessEntityID] = SOH.[SalesPersonID] INNER JOIN Sales.SalesOrderDetail SD ON SD.SalesOrderID = SOH.SalesOrderID INNER JOIN Production.Product P ON SD.ProductID = P.ProductID

INNER JOIN Production.ProductSubcategory PSC

ON P.ProductSubcategoryID = PSC.ProductSubcategoryID INNER JOIN Production.ProductCategory PC

ON PC.ProductCategoryID = PSC.ProductCategoryID WHERE (PC.Name = (@Category)

AND PSC.Name = (@Subcategory) AND P.Name = (@Product)) 7. 8. 9.

查询现在包含查询参数 @Category、@Subcategory 和 @Product。 单击“运行”(!) 以查看结果集。系统将打开“定义查询参数”对话框。 在“参数值”列中,按照下表键入各查询参数的值。

参数名称 参数值 @Category @Subcategory @Product 10. 单击“确定”。

Components Brakes Front Brakes 结果集包含按日期分组的 Front Brakes 的销售订单号列表。

运行查询时,每个查询参数生成了相应的报表参数。单击两次“确定”退出查询设计器和相应对话框。

11. (可选)在“报表数据”窗格中,展开“参数”节点,确保显示以下报表

参数:Category、Subcategory 和 Product。 12. (可选)每个数据集查询参数的值绑定到同名的报表参数。若要对此进行

验证,请在“报表数据”窗格中,右键单击 SalesbyCategory,然后单击“数据集属性”。

a. b.

单击“参数”。

在“参数名称”列中,确保名称为 @Category、@Subcategory 和 @Product。

在“参数值”列中,确保值为 [@Category]、[@Subcategory] 和 [@Product]。

这些简单表达式引用在“报表数据”窗格中显示的报表参数。

c.

接下来,您将创建一个在运行时为每个报表参数提供两个值的数据集。这些值将填充可用值,并且还会提供默认值,以使报表自动运行。 为报表参数定义有效值数据集 1.

在“报表数据”窗格中,右键单击 AdventureWorks_Ref,然后单击“添加数据集”。

在“名称”中,键入 CategoryValues。

在“数据源”中,确保已选中 AdventureWorks_Ref。 在“查询类型”中,确保已设置“文本”。 在“查询”窗格下面,单击“查询设计器”。 将以下查询文本粘贴到“查询”窗格中:

2. 3. 4. 5. 6.

SELECT DISTINCT Name AS Category FROM Production.ProductCategory 7. 8.

SELECT DISTINCT 命令仅检索列中的唯一值。

单击“运行”(!) 以查看结果集。Category 列将显示有四个值:Accessories、Bikes、Clothing 和 Components。 单击“确定”。

9.

接下来,您将设置 Category 报表参数的属性,并将上面查询中的值用作其可用值和默认值。

设置报表参数的可用值和默认值 1.

在“报表数据”窗格的“参数”文件夹中,右键单击 Category,然后单击“参数属性”。

在“名称”中,确保名称为 Category。 单击“可用值”。

单击“从查询中获取值”。随即将显示以下三个字段。 在“数据集”下拉列表中,选择 CategoryValues。 在“值”字段中,单击 Category。 在“标签”字段中,单击 Category。 单击“默认值”。

单击“从查询中获取值”。

2. 3. 4. 5. 6. 7. 8. 9.

10. 在“数据集”下拉列表中,选择 CategoryValues。 11. 在“值”字段中,选择 Category。 12. 单击“确定”。

接下来,您将修改 @Subcategory 参数,使其取决于为 @Category 选取的值。 为报表参数 Subcategory 添加值数据集 1.

在“报表数据”窗格中,右键单击 AdventureWorks_Ref,然后单击“添加数据集”。

在“名称”中,键入 SubcategoryValues。

2.

3.

将以下查询文本粘贴到“查询”窗格中:

SELECT DISTINCT PSC.Name AS Subcategory

FROM Production.ProductSubcategory AS PSC

INNER JOIN Production.ProductCategory AS PC

ON PC.ProductCategoryID = PSC.ProductCategoryID WHERE PC.Name = (@Category) 4. 5.

单击“确定”。

数据集 SubcategoryValues 将显示在“报表数据”窗格中。Subcategory 字段具有 14 个列出组件的行。

接下来,设置 @Subcategory 报表参数的属性,并将上面查询中的值用作其可用值和默认值。

设置 Subcategory 报表参数的可用值和默认值 1.

在“报表数据”窗格的“参数”文件夹中,右键单击 Subcategory,然后单击“参数属性”。 单击“可用值”。

单击“从查询中获取值”。

在“数据集”下拉列表中,单击 SubcategoryValues。 在“值”字段中,单击 Subcategory。 在“标签”字段中,单击 Subcategory。 单击“默认值”。

单击“从查询中获取值”。

在“数据集”下拉列表中,单击 SubcategoryValues。

2. 3. 4. 5. 6. 7. 8. 9.

10. 在“值”字段中,单击 Subcategory。 11. 单击“确定”。

接下来,创建取决于 @Category 值和 @Subcategory 值的 @Product 参数。 为报表参数 Product 添加值数据集 1.

在“报表数据”窗格中,右键单击 AdventureWorks_Ref,然后单击“添加数据集”。

2. 3.

在“名称”中,键入 ProductValues。 将以下查询文本粘贴到“查询”窗格中:

SELECT DISTINCT P.Name AS Product FROM Production.Product P

INNER JOIN Production.ProductSubcategory AS PSC

ON P.ProductSubcategoryID = PSC.ProductSubcategoryID INNER JOIN Production.ProductCategory AS PC

ON PC.ProductCategoryID = PSC.ProductCategoryID WHERE (PC.Name = (@Category)

AND PSC.Name = (@Subcategory)) 4.

单击“确定”。

此时,将向“报表数据”窗格添加包含一个 Product 字段的 ProductValues 数据集。

接下来,设置 @Product 参数的属性,并将上面查询中的值用作其可用值和默认值。

设置 Product 报表参数的可用值和默认值 1.

在“报表数据”窗格的“参数”文件夹中,右键单击 Product,然后单击“参数属性”。 单击“可用值”。

单击“从查询中获取值”。

在“数据集”下拉列表中,单击 ProductValues。 在“值”字段中,单击 Product。 在“标签”字段中,单击 Product。 单击“默认值”。

单击“从查询中获取值”。

在“数据集”下拉列表中,单击 ProductValues。

2. 3. 4. 5. 6. 7. 8. 9.

10. 在“值”字段中,单击 Product。 11. 单击“确定”。

接下来,将添加一个显示选择每个级联参数的值的效果的表。

添加显示结果的表 1. 2.

在“设计”视图中,添加一个表。

在“报表数据”窗格中,将以下字段从 SalesbyCategory 数据集拖至表的详细信息行中的 3 个单元:SalesOrderNumber、OrderQty 和 LineTotal。 将 Category 从 SalesbyCategory 数据集拖到“行组”窗格,并将其放置到“详细信息”组上面。

将 Subcategory 从 SalesbyCategory 数据集拖到“行组”窗格,并将其放置到 Category 下面。

将 Product 从 SalesbyCategory 数据集拖到“行组”窗格,并将其放置到 Subcategory 下面。

将 OrderDate 从 SalesbyCategory 数据集拖到“行组”窗格,并将其放置到 Product 下面。

(可选)设置以下各单元的格式:将 [LineTotal] 设置为“货币”,将 [OrderDate] 设置为“日期”。

3.

4.

5.

6.

7.

测试级联参数 1.

单击“预览”。

由于已设置每个报表参数的默认值,因此报表将自动运行。 2. 3. 4.

从 Category 下拉列表中选择 Components。 从 Subcategory 下拉列表中选择 Brakes。 从 Product 下拉列表中选择 Front Brakes。

注意:在选择每个后续参数时,下一参数的下拉列表将根据您前面的选择只显示有效值。 5.

在报表查看器工具栏上,单击“查看报表”。

此时报表将针对包含“Front Brakes”产品的订单显示销售订单号以及订单数量和行总计。表显示按 category、subcategory、product 和 order date 组织的销售订单。

第 5 课:添加要传递给钻取报表的参数。

钻取报表是通过单击当前报表中的链接对其进行访问的一种报表。单击具有钻取操作的文本框,即可打开钻取报表。如果钻取报表具有参数,则必须为每个报表参数传递参数值。

向打开的报表服务器项目添加新报表 1.

在解决方案资源管理器中,右键单击“报表”,指向“添加”,再单击“新建项”。

在“添加新项”对话框的“模板”下,单击“报表”。

在“名称”中,键入 Sales Order Detail.rdl,再单击“添加”。 此时报表设计器将打开,并在“设计”视图中显示新的报表定义。 创建对共享数据源的引用 1.

2. 3. 4. 5.

在“名称”中,键入 AdventureWorks_Ref。 选择“使用共享数据源引用”。 从下拉列表中选择 AdventureWorks。 单击“确定”。

在“报表数据”窗格中,单击“新建”,然后单击“数据源”。

2. 3.

新建数据集 1.

在“报表数据”窗格中,右键单击数据源 AdventureWorks_Ref,然后单击“添加数据集”。

在“名称”中,键入 SalesDetails。 将以下查询粘贴到“查询”文本框中:

2. 3.

SELECT P.Name AS Product, SD.OrderQty AS Quantity, SD.LineTotal FROM Sales.SalesOrderDetail AS SD

INNER JOIN Production.Product AS P ON SD.ProductID = P.ProductID

INNER JOIN Sales.SalesOrderHeader AS SOH ON SD.SalesOrderID = SOH.SalesOrderID

WHERE (SOH.SalesOrderNumber = (@SalesOrder) )

ORDER BY SD.SalesOrderDetailID 4.

请注意,若要为数据集创建字段集合,您无需使用查询参数值在查询设计器中运行查询。

(可选)打开查询设计器,并单击工具栏上的“运行”(!)。为 @ SalesOrder 提供以下值:SO43659。结果窗格显示 12 种产品。单击“确定”。

单击“确定”。

在“报表数据”窗格中,展开“参数”,并确保显示 SalesOrder 参数。

5.

6. 7.

向表添加数据集字段 1. 2.

使用工具箱将表拖到设计图面。

从“报表数据”窗格中,将以下字段拖到“Data”行中的表单元:Product、Quantity 和 LineTotal。 预览报表。

在运行报表之前,必须输入一个有效的销售订单号。 4.

在报表查看器工具栏上的“销售订单”中,键入 SO43659。 报表随即显示指定销售订单的行总计。 设置表的格式 1. 2. 3. 4. 5. 6.

切换到“设计”视图。

右键单击包含 [LineTotal] 的单元,并单击“文本框属性”。 单击“数字”。

在“类别”中,单击“货币”。 单击“确定”。

在表中单击包含列标题的第一行的行控点。随即将选中该行中的所有单元。

从“格式”菜单中指向“字体”,并单击“加粗”。

查看报表时,LineTotal 的值显示为货币,并以粗体显示列标题。 接下来,添加钻取操作以便指定该报表。

3.

7.

向报表添加报表钻取操作 1.

在解决方案资源管理器中,双击 Sales Orders.rdl。将在“设计”视图中打开此报表。

在 Order 列中,右键单击包含 [Order] 的文本框,然后单击“文本框属性”。

单击“操作”。

在“启用为超链接”中,选择“转到报表”。 此时将在对话框中显示其他区域。 5. 6.

在“从列表中选择报表”的下拉列表中,选择 Sales Order Detail。 在“使用这些参数运行报表”中,单击“添加”。 此时将向网格添加一个新行。 7.

在“名称”中,从显示了为报表定义的参数列表的下拉列表中,选择 SalesOrder。

在“值”的下拉列表中,选择 [Order]。 这会将主报表的值绑定到需要目标报表的参数。 下一步将更改钻取链接的文本样式和颜色。 9.

单击“字体”。

2.

3. 4.

8.

10. 在“效果”的下拉列表中,选择“下划线”。 11. 单击“颜色”旁的 (fx),打开“表达式”对话框。 12. 用其他颜色替换默认文本“黑色”,例如“蓝色”。

注意: 若要查看字体颜色的有效值,请单击“值”窗格中的“其他颜色”。此时将打开“选择颜色”对话框。您可以浏览该对话框中的有效颜色,并选择要使用的颜色。单击“确定”。 13. 单击两次“确定”。

添加的文本框现在具有带下划线的文本,并且将按照您选择的颜色显示。这种直观的表示方式有助于报表读者了解存在指向另一个报表的活动链接。 预览报表

1.

单击“预览”。Sales Orders 报表显示按日期分组的销售订单。Order 列显示表示钻取链接的销售订单号。 单击带有钻取链接的销售订单号。

此时将运行钻取链接指定的报表,并显示单击的销售订单号的订单详细信息。

注意: 若要返回到主报表,请使用报表查看器工具栏上的返回箭头。 2.

动手实验3:创建基本矩阵报表

本动手实验旨在帮助您使用报表设计器创建基于 AdventureWorks2008 数据库的基本矩阵报表。必须已经完成动手实验:创建基本表报表 中的前两个课程

行组区显示 Clothing 和 Components 的两个类别组实例。列组显示 North America 的地理组实例,其中包括 Canada (CA) 和 United States (US) 两个嵌套国家/地区组实例。此外,相邻列显示 2003 和 2004 的两个年份组实例。Total 列显示行总计;总计 (totals) 行重复用于显示子类别总计的类别组,而总计 (grand total) 行对数据区域显示一次类别总计。

任务

第 1 课:为矩阵报表定义数据集查询

第 2 课:添加带有行组和列组的矩阵数据区域 第 3 课:设置矩阵格式和添加总计 第 4 课:发布报表

------------------------------------------------------------------- 第 1 课:为矩阵报表定义数据集查询 打开现有的 Reporting Services 项目 1.

单击“开始”,依次指向“所有程序”、Microsoft SQL Server 2008,然后单击 Business Intelligence Development Studio。

在“文件”菜单上,指向“打开”,然后单击“项目/解决方案”。 导航至名为 Tutorial 的报表服务器项目。 在 Tutorial 文件夹中,单击 Tutorial.sln。 单击“打开”打开该项目。

解决方案资源管理器中将显示 Tutorial 项目。 创建新的报表 1.

在解决方案资源管理器中,右键单击“报表”,指向“添加”,再单击“新建项”。 2. 3.

在“添加新项”对话框的“模板”窗格中,选择“报表”。

在“名称”中,键入 Sales by Area and Year.rdl,然后单击“添加”。 报表设计器将在设计模式下打开,并显示空白报表定义。 为报表数据定义 Transact-SQL 查询 1.

在“报表数据”窗格中,单击“新建”,然后单击“数据源”。

2. 3. 4. 5.

2. 3. 4. 5. 6.

在“名称”框中,键入 AdventureWorksMatrixData。

在“数据源”中,单击“新建”。此时将打开“数据源属性”对话框。 在“名称”中,键入 AdventureWorks2008。

请确保选中“嵌入连接”且“类型”为 Microsoft SQL Server。 在“连接字符串”中,键入以下内容:

Data source=localhost; initial catalog=AdventureWorks2008 7.

单击“确定”。

数据源将显示在“报表数据”窗格中。 8.

在“报表数据”窗格中,右键单击 AdventureWorks2008,然后单击“添加数据集”。

在“名称”中,键入 Sales。

9.

10. 在“查询类型”中,确保已选中“文本”。

11. 在“查询”窗格下,单击“查询设计器”打开基于文本的查询设计器。 12. 在查询窗格中,粘贴以下 Transact-SQL 查询:

SELECT

SOH.SalesPersonID AS ID, P.FirstName, P.LastName, SOH.SalesOrderNumber AS [Order], SOH.OrderDate AS [Date],

DATEPART(yy, SOH.OrderDate) AS [Year], DATEPART(mm, SOH.OrderDate) AS [Month], ST.[Group] AS [Geography],

ST.CountryRegionCode AS CountryRegion, ST.Name AS Territory,

PPC.Name AS Category, PPS.Name AS Subcat, PP.Name AS Product, PP.Color, PP.Size, CASE

WHEN PP.Size = 'S' THEN 1 WHEN PP.Size = 'M' THEN 2 WHEN PP.Size = 'L' THEN 3 WHEN PP.Size = 'XL' THEN 4 ELSE PP.Size

END AS SizeSortOrder, SUM(SD.OrderQty) AS Qty,

SUM(SD.LineTotal) AS LineTotal FROM Sales.SalesPerson AS SP

INNER JOIN Sales.SalesOrderHeader AS SOH

ON SP.BusinessEntityID = SOH.SalesPersonID INNER JOIN Person.Person AS P

ON P.BusinessEntityID = SP.BusinessEntityID INNER JOIN Sales.SalesOrderDetail AS SD ON SD.SalesOrderID = SOH.SalesOrderID INNER JOIN Production.Product AS PP ON SD.ProductID = PP.ProductID

INNER JOIN Sales.SalesTerritory AS ST ON ST.TerritoryID = SP.TerritoryID

INNER JOIN Production.ProductSubcategory AS PPS

ON PP.ProductSubcategoryID = PPS.ProductSubcategoryID INNER JOIN Production.ProductCategory AS PPC

ON PPC.ProductCategoryID = PPS.ProductCategoryID GROUP BY PPC.Name, SOH.OrderDate, SOH.SalesOrderNumber, PPS.Name, PP.Name,

SOH.SalesPersonID, P.LastName, P.FirstName, ST.[Group], ST.CountryRegionCode, ST.Name, PP.Color, PP.Size

HAVING (DATEPART(yy,SOH.OrderDate) IN ('2003','2004') AND ST.[Group] = 'North America' AND LEFT(PPS.Name,1) IN ('C','T') AND LEFT(PPC.Name,1) = 'C')

13. 若要查看查询结果,请单击查询设计器工具栏上的“运行”(!)。 14. 单击“确定”。再次单击“确定”。

数据集查询中的字段将显示在“报表数据”窗格中。

第 2 课:添加带有行组和列组的矩阵数据区域 向报表布局中添加矩阵数据区域、行组和列组以及字段 1. 2.

单击“设计”选项卡。

在“工具箱”中,单击“矩阵”,再单击设计图面。报表设计器随即添加包含两列和两行的矩阵数据区域。矩阵的左侧角与单击位置对齐。

3.

4. 5.

在“报表数据”窗格中,展开 Sales 数据集以显示字段。

将 Category 字段从“报表数据”窗格拖到显示“行”的矩阵单元。 将 Geography 字段从“报表数据”窗格拖到显示“列”的矩阵单元。 列控点显示列组的方括号,并且“列组”窗格显示列组 Geography。

6. 将 LineTotal 字段拖到显示文本“数据”的矩阵单元。 LineTotal 表示数据集中的数字字段。该单元显示聚合表达式 [Sum(LineTotal)]。

添加嵌套行组

将 Subcat 字段从“报表数据”窗格拖到“行组”窗格,并将其放置到 Category 组下面。 添加嵌套列组

将 CountryRegion 字段从“报表数据”窗格拖到“列组”窗格,并将其放置到 Geography 组下面。 添加相邻列组

1.

在“列组”窗格中,右键单击 Geography,指向“添加组”,然后单击“后面相邻”。此时将打开“Tablix 组”对话框。 从“分组依据”的下拉列表中,选择 [Year]。

单击“确定”。右键单击包含 [Sum(LineTotal)] 的单元,然后单击“复制”。

2.

3.

右键单击 Year 列中的相邻单元,然后单击“粘贴”。该操作将根据 [Year] 添加列组的聚合表达式 [Sum(LineTotal)]。 (可选)预览报表。

报表显示按 category、subcategory、geography、countryregion 和 year 组织的未设置格式的值。

4.

第 3 课:设置矩阵格式和添加总计。

设置货币值的格式 1. 2.

确保设计图面显示在上一课中添加的矩阵。

右键单击显示 [Sum(LineTotal)] 字段表达式的第一个单元,再单击“文本框属性”。 单击“数字”。

在“类别”中,单击“货币”。 单击“确定”。

接下来,将格式值粘贴到下一单元中。 6. 7.

右键单击同一单元,然后单击“复制”。

右键单击显示相同字段表达式的其他单元,再单击“粘贴”。复制和粘贴单元内容时,还将复制该单元的格式设置。 接下来,将添加一个显示行总计的列。 添加行总计

3. 4. 5.

右键单击显示 [Year] 的列标题,指向“添加总计”,并单击“之后”。 随即将在矩阵的右侧添加一个带有“Total”标签的新列。单元内容和样式默认为 [Year] 列包含的经过格式化的数字字段的内容和样式。 接下来,将设置行标题和列标题的格式。 设置列标题和行标题的格式

1.

单击第一列的列控点,并拖至下一列控点。这将选中包含行标题 Category 和 Subcat 的列。

从“格式”菜单中单击“字体”,然后单击“加粗”。 这将设置 Category 和 Subcat 行组区的格式。

2.

3.

对前两个行控点重复步骤 1 和 2。这将设置 Geography、Year 和 CountryRegion 列组区的格式。

在前两行仍处于选中状态时,请从“格式”菜单中,单击“背景色”。将打开“选择颜色”对话框。

单击“其他颜色”。此时将打开“选择颜色”对话框。

4.

5.

6. 7.

在“标准调色板”中,滚动到“浅蓝色”并选中它。 单击“确定”。再次单击“确定”。

此时,您已经将行标题和列标题的格式设置为粗体文本,并将列标题的背景色设置为浅蓝色。

接下来,将合并 Year 列组的单元,并使标签居中。

合并列单元,并使列组标题文本居中 1.

单击显示 [Year] 的列组标题,并将鼠标向下拖动一个单元。此时已选中两个垂直单元。

右键单击所选的两个单元中的任意位置,并单击“合并单元”。上述两个单元即被合并为一个跨越两行的单元。

右键单击合并后的单元,然后单击“文本框属性”。 单击“对齐”。

在“水平”中,单击“居中”。 在“垂直”中,单击“垂直居中”。 单击“确定”。

列标题值 [Year] 随即在合并单元的中间位置显示。 8.

对于 Total 列,请重复步骤 1-7。

接下来,将合并角部区中的单元,并删除多余的行。 合并角部区中的单元 1. 2.

单击左边第一个角单元,沿对角线方向拖动鼠标以选择四个角单元。 右键单击所选单元中的任意位置,然后单击“合并单元”。 以上单元即被合并为一个单元。

接下来,将为角单元添加使用多种样式和大小的标签。 添加使用不同文本样式和大小的标签 1. 2.

右键单击角单元,然后单击“文本框属性”。 在“值”中,键入 Sales by Area and Year。

2.

3. 4. 5. 6. 7.

3. 4. 5. 6. 7. 8. 9.

单击“对齐”。

在“水平”中,单击“居中”。 在“垂直”中,单击“垂直居中”。 单击“确定”。

在同一单元中,双击文本 Area。将突出显示该文字。 右键单击突出显示的文本,然后单击“文本属性”。 单击“字体”。

10. 在“大小”中,单击 14 pt。 11. 在“样式”中,单击“加粗”。 12. 单击“确定”。

13. 请对 Year 一词重复以上步骤。 14. 单击“确定”。 15. (可选)预览报表。

角单元中的文本显示多种字体和大小。

预览报表之后,您可以在“设计”视图中对报表进行其他修改或者将报表发布到报表服务器。 第 4 课:发布报表 1.

2.

在“动手实验属性页”对话框中,确保 OverwriteDataSources 中的值为 False。

在 TargetDataSourceFolder 中,保留 Data Sources 默认名称。 在 TargetReportFolder 中,保留 Tutorial 默认名称。

在 TargetServerURL 中,键入指向报表服务器的路径;例如,http://<服务器名称>/reportserver,其中,<服务器名称> 是要发布到的服务器的名称, 单击“确定”。

在解决方案资源管理器中,右键单击 Tutorial 项目,再单击“属性”。

3. 4.

5. 6.

保存报表项目。在“文件”菜单上,单击“全部保存”。

在“生成”菜单中,单击“部署动手实验”。在“输出”窗格中,将显示部署进程的结果。

打开浏览器,并键入报表服务器的报表目录的 URL,例如,http://<服务器名称>/reports。单击报表文件夹,再单击相应的报表名称以查看该报表。

7.

动手实验4:向报表添加饼图

饼图和圆环图将数据显示为整体的一定比例。 为饼图定义数据源 1.

在“视图”菜单上,单击“报表数据”。“报表数据”窗格将会显示在 Business Intelligence Development Studio 环境中。

在“报表数据”窗格中,单击“新建”,然后单击“数据源”。 在“数据源属性”对话框中,确保选中“嵌入连接”。 单击“编辑”。

在“连接属性”对话框中的“服务器名称”文本框中,输入您服务器的名称。 单击“使用 Windows 身份验证”或“SQL Server 身份验证”,并键入有权访问 AdventureWorks2008 数据库的用户的名称和密码。 7. 8.

在“选择或输入数据库名称”框中,键入或选择 AdventureWorks2008 数据库。 单击“确定”。新数据源(默认情况下为 DataSource1)将显示在“报表数据”窗格中。

2. 3. 4. 5. 6.

为报表定义数据集 1. 2.

SELECT [FullName] as Name ,[2002] as SalesBeforeLast ,[2003] as SalesLastYear

,[2004] as SalesYTD

FROM [AdventureWorks].[Sales].[vSalesPersonSalesByFiscalYears] 3.

单击“确定”。

在“报表数据”窗格中,右键单击上一步中创建的数据源,然后单击“添加数据集”。 在“数据集属性”对话框中的“查询”文本框中,输入以下查询:

向报表添加饼图 1. 2. 3. 4. 5. 6.

在“视图”菜单上,单击“工具箱”。

双击“图表”图标,或将其从工具箱中拖放至设计图面。

在“选择图表类型”对话框中,单击“形状”。选择列表中的第一个饼图图标。 将 Name 字段从“报表数据”窗格拖放至类别字段放置区。 将 SalesYTD 字段从“报表数据”窗格拖放至数据字段放置区。 单击功能区上的“预览”。

在饼图的每个切片中显示百分比 1. 2. 3. 4.

右键单击饼图,然后单击“显示数据标签”。数据标签将显示在图表上。 右键单击任一标签,然后单击“序列标签属性”。

在“序列标签属性”对话框中的“标签数据”框中,选择 #PERCENT。

(可选)若要指定标签显示的小数位数,请指定“#PERECENT{Pn}”,其中 n 为要显示的小数位数。例如,如果要将关键字的格式设置为两位小数,请使用字符串“#PERCENT{P2}”。 向饼图添加绘制效果 1. 2. 3. 4.

将饼图上所有小于 5% 的切片组合为一个切片 1. 2. 3.

打开“属性”窗格。

在设计图面上,单击饼图的任一切片。序列的属性将显示在“属性”窗格中。 在“常规”部分中,展开 CustomAttributes 节点。 在“视图”选项卡上,选择“属性窗格”选项。

单击饼图。饼图的序列属性将会显示在“属性”窗格中。 在“属性”窗格中,展开 CustomAttributes 节点。 将 PieDrawingStyle 设置为 SoftEdge。

4. 将 CollectedStyle 属性设置为 SingleSlice。

设置收集的阈值和阈值的类型。 5. 6.

在饼图外显示数据点标签 1. 2. 3. 4. 5. 6.

创建一个饼图,并显示数据标签。 打开“属性”窗格。

在设计图面上,单击饼图。该饼图的属性显示在“属性”窗格中。

在“杂项”部分,展开 CustomAttributes 节点。此时将显示该饼图的属性列表。 将 PieLabelStyle 属性设置为 Outside。

将 PieLineColor 属性设置为 Black。PieLineColor 属性可为每个数据点标签定义标注线条。 防止在饼图外显示的标签重叠 1. 2.

创建一个带有外部标签的饼图。

在设计图面上,右键单击饼图的外部,然后在饼图内部选择“三维效果”。随即显示“图表区属性”对话框。 选择“启用三维”。

如果希望饼图显示二维效果,在“三维选项”中,将“旋转”和“倾角”属性设置为 0。 将 CollectedThresholdUsePercent 属性设置为 True。 将 CollectedThreshold 属性设置为 5。

3. 4.

动手实验5:向报表添加条形图

条形图可用于水平显示类别数据,有助于:

 

提高长类别名称的可读性。 比较多个序列的相对值。 创建报表服务器项目

1.

单击“开始”,依次指向“程序”和 Microsoft SQL Server 2008,然后单击 Business Intelligence Development Studio。

2. 3. 4. 5. 6.

在“文件”菜单上,指向“新建”,再单击“项目”。 在“项目类型”列表中,单击“商业智能项目”。 在“模板”列表中,单击“报表服务器项目”。 在“名称”中,键入“条形图教程”。 单击“确定”创建项目。

该教程项目将显示在解决方案资源管理器中。

为条形图定义数据源 1.

单击“视图”,然后选择“报表数据”。“报表数据”窗格将会显示在 Business Intelligence Development Studio 环境中。

在“报表数据”窗格中,单击“新建”下拉列表,然后单击“数据源”。 在“数据源属性”对话框中,确保选中“嵌入连接”。 在“类型”框中,选择 Microsoft SQL Server。

在连接字符串文本框中,键入一个有效的连接字符串,或单击“编辑”按钮以打开“连接属性”对话框。

在“连接属性”对话框的“服务器名称”文本框中,键入或选择服务器的名称。 选择“使用 Windows 身份验证”或“SQL Server 身份验证”,并键入有权访问 AdventureWorks2008 数据库的用户名和密码。

在“选择或输入数据库名称”列表框中,键入或选择 AdventureWorks2008。 单击“文本连接”。

单击“确定”以关闭“连接属性”对话框。在“数据源属性”对话框中,您将会看到默认

2. 3. 4. 5.

6. 7.

8. 9. 10.

数据源名称 DataSource1 和连接字符串。 11.

单击“确定”。新数据源将显示在“报表数据”窗格中。

为报表定义数据集 1. 2. 3.

在“报表数据”窗格中,右键单击数据源,然后单击“添加数据集”。 在“数据集属性”对话框中,确保为“查询类型”选中“文本”。 在“查询”文本框中,输入以下查询:

SELECT [FullName] as 'Name'

,[2002] as 'SalesBeforeLast' ,[2003] as 'SalesLastYear' ,[2004] as 'SalesYTD'

FROM [AdventureWorks].[Sales].[vSalesPersonSalesByFiscalYears] 4.

单击“确定”。数据集字段将显示在“报表数据”窗格中。

向报表添加带有销售信息的条形图 1. 2. 3. 4. 5.

在“视图”菜单上,单击“工具箱”。

双击“图表”或将其拖到设计图面。此时将显示“选择图表类型”对话框。 单击“条形图”以显示条形图列表。选择列表中的第一个条形图图标。 单击该图表以显示图表控点。拖动该图表的右下角以扩大该图表。

将 Name 字段从“报表数据”窗格拖到该图表。图表数据区域周围将会出现三个放置区,分别用于数据、序列和类别。将 Name 字段放入类别字段放置区。 6.

将 SalesYTD 和 SalesLastYear 字段从“报表数据”窗格拖放至数据字段放置区。

单击“预览”以运行报表。您的报表应与下面的示例相似:

7.

您将会发现该图表并不在 y 轴上标记所有类别。这是因为有一个自动算法,它会计算显示标签的间隔,从而避免标签冲突。如果要在该图表中显示所有类别,则必须将轴间隔指定为 1。

沿条形图的类别轴显示所有销售人员

1. 2. 3. 4.

5.

切换到“设计”视图。

右键单击 y 轴,然后单击“轴属性”。

在“类别轴属性”对话框的“轴选项”页中,为“间隔”键入 1。 单击“确定”。

单击“预览”。您的报表应与下面的示例相似:

为了提高图表值的可读性,可能需要移动图表图例。例如,在水平显示图条的条形图中,您可以更改图例的位置,将其放置在图表区的上方或下方。这可为图条提供更大的水平空间。 在条形图的图表区下方显示图例 1. 2. 3. 4.

5.

如果将图例置于图表的顶部或底部,则图例的布局将会从垂直改为水平。您可以从

“布局”下拉列表中选择不同的布局。 切换到“设计”视图。 右键单击图表上的图例。 选择“图例属性”。

对于“图例位置”,请选择其他位置。例如,将图例位置设置为底部中间。

6.

单击“确定”。

接下来,您可以更改图表标题和轴标题,还可以添加格式设置。 更改条形图的图表区上方的图表标题 1. 2. 3. 4. 5.

切换到“设计”视图。

右键单击位于图表顶部的图表标题,然后单击“标题属性”。

用文本“销售人员年内迄今的销售情况与去年销售情况”替换“标题文本”字段。 单击该文本的外部。

单击“预览”。您的报表应与下面的示例相似:

最后,您可以将销售数字的格式设置为货币而非常规数字。 将水平轴上数字的格式设置为货币 1. 2. 3.

切换到“设计”视图。

右键单击沿图表底部方向的水平轴,然后单击“轴属性”。

在“标签格式”中的“类别”下,单击“货币”。您还可以指定多个与货币值的格式设置方式相关的选项。 4.

单击“预览”。

筛选条形图中的前 5 个值 1. 2. 3. 4. 5. 6. 7.

切换到“设计”视图。

单击图表一次,以调出类别、序列和数据放置区。 右键单击类别放置区中的 Name 字段。 选择“类别组属性”。

单击“筛选器”。此时将显示筛选表达式的列表。默认情况下,此列表是空的。 单击“添加”。此时将显示一个新的空白筛选器。 在“表达式”框中,键入以下表达式: =Sum(Fields!SalesYTD.Value) 8. 9. 10.

在“运算符”列表框中,选择 Top N。 在“值”框中,键入 =5

单击“预览”。图表中将会显示五个名字,即销售数据中的前 5 名销售人员。

按字母顺序对条形图中的姓名进行排序 1. 2. 3. 4. 5. 6. 7.

切换到“设计”视图。

单击图表一次,以调出类别、序列和数据放置区。 右键单击类别放置区中的 Name 字段。 选择“类别组属性”。

单击“排序”。此时将显示排序表达式的列表。默认情况下,此列表是空的。 单击“添加”。此时将显示一个新的排序表达式。

在“排序依据”框中,选择 [Name] 表达式。这与表达式 =Fields!Name.Value 等效

在“顺序”框中,选择“从 Z 到 A”。

单击“预览”。图表中将按字母顺序,从上到下显示姓名。

8. 9.

动手实验6:向报表添加KPI

关键绩效指标 (KPI) 是报表中对业务具有重大意义的任何可测量值,例如,总销售额。如果要在报表上显示 KPI 的当前状态,则可以使用以下三种不同方法之一:

  

使用背景色突出显示用于显示 KPI 状态的单元值。 将单元值替换为显示 KPI 状态的图像。 插入仪表。

为了定义 KPI 的当前状态,我们将根据 AdventureWorks 示例数据库创建业务需求。我们假定以 Line Total 作为 KPI。当 Line Total 值低于 30 时,我们的要求是突出相应 KPI 作为可能的关注源。当 Line Total 值低于 20 时,我们的要求是突出相应值作为必须立即解决的关注源。 打开现有的项目 1.

单击“开始”,依次指向“程序”和 Microsoft SQL Server 2008,再单击 Business Intelligence Development Studio。 在“文件”菜单上,指向“打开”,然后单击“项目”。

导航到 Tutorial.sln。本教程是在教程:创建基本表报表 中创建的。

单击“确定”打开项目。“教程”项目即在解决方案资源管理器中显示,并带有一个名为 Sales Orders.rdl 的报表。

双击 Sales Orders.rdl 文件以打开此报表。

2. 3. 4.

5.

使用背景色显示 KPI 的当前状态 1. 2.

在表中,右键单击包含 [LineTotal] 字段的单元,并选择“文本框属性”。 在“填充”中,键入以下表达式:

=IIF(Sum(Fields!LineTotal.Value) >= 30, \"Transparent\IIF(Sum(Fields!LineTotal.Value) < 20, \"Red\ 使用仪表显示 KPI 的当前状态 1.

在表中,右键单击包含 [LineTotal] 字段的单元,指向“插入列”,并选择“后面”以便在 [LineTotal] 右侧插入新列。 单击“设计”选项卡。

在“工具箱”中,单击“仪表”,然后单击表外部的设计图面。此时将显示“选择仪表类型”对话框。 2. 3.

4. 5. 6.

单击“线性”。此时将选中第一个线性仪表。 单击“确定”。

将 LineTotal 字段从“报表数据”窗格拖到仪表。

将该字段拖到仪表中时,将使用内置 SUM 函数聚合该字段。有关详细信息,请参阅向仪表数据区域添加数据。 1.

将表内的仪表拖到在步骤 1 中插入的列。 注意: 可能需要调整列大小,以使单元能够容纳水平线性仪表。若要调整列大小,请单击列标题,并使用控点水平和垂直调整单元大小。 2. 3.

单击“预览”。 (可选)添加处理溢出的最大刻度格,以使超出最大刻度的任何值始终指向最大刻度格: a. b. c. d.

打开“属性”窗格。

单击刻度。该刻度的属性将显示在“属性”窗格中。 在“刻度格”类别中,展开 MaximumPin 节点。

将“启用”属性设置为 True。随即将在刻度的最大值之后显示一个刻度格。

动手实验7: 使用report builder2.0创建报表

(一)

新建报表

1. 打开Report Builder 2.0。在页面的中间点击Chart图标。

2. 在打开的New Chart对话框中,点击 New„按钮。在数据源属性面板中,

点击Connection string文本框右边的build按钮。在server name中输入(local),使用Windows身份验证。在Select or enter a database name的下拉列表中选择HealthDW数据库。点击左下角的测试数据库按钮,测试成功后点击OK。在数据源属性面板中OK。 3. 在New Chart页面中,点击Next。

4. 在Design a query页面中,点击Edit As Text按钮,在文本框中输入

如下代码:

select DeptName,sum(Amount) Amount,sum(Quantity) Quantity from dbo.FactSales F left join dbo.DimDate D on F.TimeKey=D.TimeKey left join DimEmp E

on F.EmployeeKey=E.EmployeeKey where D.Y=2006 group by DeptName

然后点击!按钮运行代码。如下图:

5. 点击Next。进入到Choose a chart type页面。确定选中了Column。然

后点击Next。

6. 在Arrange chart fields页面中。在Available fields面板中,分别

双击里面的三个字段。结果如图。然后点击Finish。

7. 点击左上角的保存按钮,将报表保存。Name和Location都使用默认值。 (二)修改Chart的属性

1.在功能区中点击View,然后勾选上properties。这是右边会出现一个属

性 列表。

2.在黄色的柱子上点击右键。在列表中选择Change chart type,在打开的

对话框中选择lines最右边的那个,然后点击OK。

3.在黄色的线上点击右键。在列表中选择series properties。在打开的对

话框中,点击左边列表中的Axes and Chart Area,在Value axis下选上Secondary。

2.在Title文本框中输入销售情况表。在Chart Title文本框中输入2006

年各部门销售额和销售量统计。在左边的Axis Title文本框中输入Amount。在右边的Axis Title文本框中输入Quantity。在下边的Axis Title文本框中输入部门。保存所有更改。

3.点击途中蓝色的柱子。在右边的属性面板的Apperance中。在

BackguoundGradientType右边选中TopBottom。点击Color右边的单元格,

再点击出现的小三角,在出现的列表中选择Expression„。然后在打开的对话框中用下面的代码替换原来的代码。然后点击OK。 =IIF(Sum(Fields!Amount.Value)>8000,\"Green\

右键单击,在出现的列表中选择Legendproperties。在打

开的对话框中的圆形圈圈中按自己的喜好勾选,以对它的位置进行设置。完成之后界面如下:

3.单击左上角的RUN按钮查看报表。再次点击返回到设计界面。 (三)新建Gauge

1.点击chart下面的小虚线,当出现上下箭头的时候,按住往下拖,以扩大界面。

2.再chart下面的空白处,单击鼠标右键,依次选择Inset|Gauge。 3.在打开的Select Gauge Type页面中。选中第一个样式,然后点击OK。建好Gauge后,为了美观,将它拖动到合适的位置。

4.在左边的report data面板中。右键单击DataSource1,选择Add Dataset。 5.在打开的数据集属性页面中。在Name中输入Gauge2006。然后点击Query

Designer„按钮。在打开的Query Designer页面中,点击左上角的Edit As Text。复制如下代码到文本框中,然后点击!运行一下看是否有语法错误。然后点击OK。再次点击OK退出数据集属性设置页面。 select sum(Amount) Amount,sum(Quantity) Quantity from dbo.FactSales F left join dbo.DimDate D on F.TimeKey=D.TimeKey where D.Y=2006

6.用上面的方法再新建一个Dataset。Name为Gauge2007。其中的代码如下: select sum(Amount) Amount,sum(Quantity) Quantity from dbo.FactSales F left join dbo.DimDate D on F.TimeKey=D.TimeKey where D.Y=2007

8. 点击保存按钮,将所有更改保存。 (四)新建一个指针

1.在表这个图形中,单击鼠标右键,选择Add Pointer。这时上面有了两个指针了。

2.在一个指针上缓慢地单击两次,直到指针变成这样面单击鼠标右键,选择Pointer properties。

。然后在上

3.在打开的对话框中。点击Value右边的Fx按钮。在打开的Expression对话框中,点击Category下面的Datasets,再点击Item下面的Gauge2006,再双击Values下面的Sum(Amount)。最后点击OK。 4.再Needle style的下拉列表中选择Arrow with tail。

5.在左边面板中点击Pointer Fill。在右边的Secondary color下选择一种自己喜欢的颜色。然后点击页面下面的OK。

6.选中另外一个指针,当它变成这样择Pointer properties。

的时候。在上面单击右键,选

7.在打开的页面中。点击Value右边的Fx按钮。在打开的界面中,点击Category下面的Datasets,再点击Item下面的Gauge2007,再双击Vlues下面的Sum(Amount)。最后点击下面的OK。 8.再Needle style下选择Arrow with tail。

9.点击左边的Pointer Fill。在右边的Secondary color中选择一种自己喜欢的颜色。然后点击OK。

10.点击选择可读盘,直到它变成,然后在它上面点击右键,选

择scale properties。在打开的对话框中,Maximum处将100改成30000。然后点击OK。

11.单击表盘边上的空白处,在右边的属性面板中,找到DataSetName,选择Gauge2006。保存更改。然后运行报表。结果如下图:

12.返回到设计模式。在表盘上点击右键,选择Add Lable。点击这个小标签,直到它变成

,在右边的属性面板中,找到Text,点击右边的单元格,

然后点击出现的小箭头,选择,在打开的面板。点击Category下面的Datasets,再点击Item下面的Gauge2006,再双击Values下面的Sum(Amount)。最后点击OK。找到Left,设置为40;找到Top,设置为30。然后运行报表,查看效果。结果如下图:

动手实验8: 使用VC#应用程序访问报表服务器

有两种方法:

1. 使用reportviewer控件 2. 使用Web services访问

假定您是在 Visual Studio 环境中进行开发的。

一.创建控制台应用程序

在“文件”菜单中,指向“新建”,再单击“项目”以打开“新建项目”对话框。

展开“Visual Basic 项目”或“Visual C# 项目”文件夹。 单击“控制台应用程序”图标。

在“名称”框中,输入您项目的名称。键入名称 GetPropertiesSample。 在“位置”框中,输入保存项目的路径,或单击“浏览”导航到所需文件夹。 单击“确定”。项目资源管理器中将显示您项目的折叠视图。

在项目资源管理器中,展开该项目节点。默认名称为 Program.cs(对于 Microsoft Visual

Basic,为 Module1.vb)的文件已添加到您的项目中。

二.添加 Web 引用

在“项目”菜单中,单击“添加 Web 引用”。

在“添加 Web 引用”的 URL 框中,键入可获取报表服务器 Web 服务说明的 URL,如

http://localhost/reportserver/reportservice2005.asmx?wsdl。然后单击“转到”按钮即可检索有关 Web 服务的信息。 - 或 -

如果本地计算机上存在报表服务器 Web 服务,则单击浏览器窗格中的“本地计算机上的 Web

服务”链接。然后在提供的列表中单击 ReportService2005 Web 服务的链接。在“Web 引用名”框中,将 Web 引用重命名为 ReportService2005,这是将用于该 Web 引用的命名空间。单击“添加引用”可添加目标 Web 服务的 Web 引用。Visual Studio 将下载服务说明并生成一个代理类,以在您的应用程序和报表服务器 Web 服务之间进行连接。

三.访问 Web 服务

首先,您必须将命名空间添加到 Program.cs 文件(在 Visual Basic 中为 Module1.vb),

采用的方法是向代码文件中添加 using(在 Visual Basic 中为 Import)指令。如果您使用该指令,则不必完全限定命名空间中的类型。

为此,请在代码文件的开头添加以下代码: using System;

using GetPropertiesSample.ReportService2005;

在代码文件中输入了命名空间指令后,请使用控制台应用程序的 Main 方法输入以下代码。

请确保在设置 Web 服务实例的 Url 属性时更改服务器的名称:

C# 代码

static void Main(string[] args) {

ReportingService2005 rs = new ReportingService2005();

rs.Credentials = System.Net.CredentialCache.DefaultCredentials; rs.Url = \"http://localhost/reportserver/reportservice2005.asmx\"; Property name = new Property(); name.Name = \"Name\";

Property description = new Property(); description.Name = \"Description\"; Property[] properties = new Property[2]; properties[0] = name; properties[1] = description; try {

Property[] returnProperties = rs.GetProperties( \"/Tutorial/Sale Orders\

foreach (Property p in returnProperties) {

Console.WriteLine(p.Name + \": \" + p.Value); } }

catch (Exception e) {

Console.WriteLine(e.Message);

} }

保存解决方案。

演练示例代码使用 Web 服务的 GetProperties 方法来检索示例报表 Company Sales 的属

性。GetProperties 方法采用两个参数:一个是要检索其属性信息的报表的名称,一个是 Property[] 对象数组,它包含要检索其值的属性的名称。该方法还返回一个 Property[] 对象的数组,其中包含在属性参数中指定的属性名称和属性值。 生成并运行 GetPropertiesSample

想学东西的请加qq492413277

因篇幅问题不能全部显示,请点此查看更多更全内容