第 3 课:使用参数更改初始排序和交互式排序

新建日期: 2006 年 7 月 17 日

您可以定义报表,为报表读者提供交互式更改数据区域或组中一列或多列报表数据的排序顺序的功能。您可以提供使用交互式排序或参数化排序更改排序顺序的功能。

使用交互式排序,可以设置列标题或组头文本框的 UserSort 属性。报表呈现时,列标题上将显示排序控件按钮,报表读者可以单击此按钮对数据进行排序。数据最初未进行排序。第一次单击将以升序对数据进行排序。以后单击将在升序和降序之间切换排序顺序。

使用参数化排序,可以创建用于设置排序顺序的参数并在数据集、数据区域或组的排序表达式中包含带有该参数的表达式。

在本课中,您将添加两种类型的排序。您将添加名为 InitialSort 的参数,并对表列 TotalDue 设置排序表达式以按聚合总量对表组进行最初排序。您将创建 SortBy 参数,该参数允许报表读者选择是按每个商店的商店名称还是销售订单数量对表的 Store 列进行排序。您将向 Store 列添加交互式排序按钮并将其排序表达式设置为取决于 SortBy 值。

打开“高级参数教程”报表服务器项目

  1. SQL Server Business Intelligence Development Studio 中,打开“高级参数教程”报表服务器项目(如果此项目尚未打开)。

  2. 在解决方案资源管理器中,双击 Resellers Worldwide 报表。将在“布局”视图中打开此报表。

在下一步中,您将把表组头改为显示商店名称和每个商店的销售量。您将创建报表参数以允许用户选择表组的排序方式:按商店名称或按每个商店的销售量。

向组头添加组计数值

  1. 在第一个表组头行中选择 Store 文本框。

  2. 用以下内容替换表达式 =Fields!Store.Value

    =Fields!Store.Value & vbCrLf & vbTab & "(" & 
    Count(Fields!SalesOrderNumber.Value, "table1_Store") & ")"
    
  3. (可选)单击**“预览”**,在组头第一行的单独行中查看商店名称和每个商店的销售量。

在下一步中,您将创建报表参数以允许用户选择要对表组进行排序的方式:按商店名称还是按销售量。

添加新报表参数

  1. 从**“报表”菜单上,选择“报表参数”。此时将打开“报表参数”**对话框。

  2. 单击**“添加”**。将创建一个具有默认值的新参数。

  3. 在**“属性”区域的“名称”**文本框中,键入 UserSortBy。请确保数据类型为 String

  4. 在**“提示”**中,键入“您要如何对表组进行排序?”。

  5. 清除**“允许空白值”**选项。

  6. 在**“可用值”部分中,选择“无查询”**。使用下表输入值。

    标签

    商店名称

    Name

    每个商店的销售量

    Number

  7. 在**“默认值”部分中,选择“无查询”**。在此文本框中,键入 Name

  8. 单击**“确定”**。

在下一步中,您将在显示商店名称和销售量的组头文本框中添加 UserSort(也称为交互式排序)控件。您将把此控件的表达式设置为使用 UserSortBy 报表参数的值。预览报表时,该列上将显示排序按钮。对于由此参数定义的字段,您可以单击此排序按钮在升序和降序值之间切换排序。

在组中添加交互式排序按钮

  1. 在表格表头行中,右键单击名为 textbox2 的第一个文本框,选择**“属性”。此文本框的内容为字符串“Store”。将打开“文本框属性”**对话框。

  2. 单击**“交互式排序”**选项卡。

    设置**“交互式排序”**选项卡上属性与设置文本框中 UserSort 属性的过程相同。

  3. 选择**“将交互式排序操作添加到此文本框”**选项。

  4. 单击**“表达式”(Fx) 按钮。将打开“编辑表达式”**对话框。

  5. 将以下表达式粘贴到表达式窗格中:

    =IIF(Parameters!UserSortBy.Value="Name",Fields!Store.Value,
    Count(Fields!SalesOrderNumber.Value, "table1_Store"))
    

    如果直接将此表达式粘贴到文本框中,您将仅获得此表达式的第一行。

  6. 单击**“确定”**。

  7. 在“要排序的数据区域或分组”区域中,选择**“选择数据区域或分组”**。从下拉列表中,选择 table1。这是表数据区域。

  8. 在“计算此作用域内排序表达式的结果”区域中,选择**“选择数据区域或分组”**。从下拉列表中,选择 table1_Store。这是表内的商店分组。

    如果将 UserSortBy 参数设置为 Name,此表达式的计算结果为 Fields!Store.Value 并像在上一课中一样按商店名称的字母顺序对表组进行排序。如果 UserSortBy 参数不是 Name,将按组中的销售量以升序对表组进行排序。

  9. 单击**“预览”**。

    此时,表中的 Store 列上具有交互式排序按钮。初始排序顺序是表组排序的默认值。第一次单击交互式排序按钮时,将根据 UserSortBy 参数值对列进行排序。以后单击交互式排序按钮,将在升序和降序之间切换排序顺序。

  10. 从下拉列表中,将 UserSortBy 的参数值改为“每个商店的销售量”。单击**“查看报表”**。

    重新处理报表以便针对此新的参数设置重新计算参数表达式的值之前,排序列不会发生更改。此时,将按销售量而不是商店名称对列进行排序。

在下一步中,您将添加参数以允许用户选择如何对表的详细信息行进行排序。

添加用于参数化排序的新报表参数

  1. 从**“报表”菜单上,选择“报表参数”。此时将打开“报表参数”**对话框。

  2. 单击**“添加”**。将创建一个具有默认值的新参数。

  3. 在**“属性”区域的“名称”**文本框中,键入 InitialSort。请确保数据类型为 String

  4. 在**“提示”**中,键入“您要如何对表详细信息行进行排序?”。

  5. 清除**“允许空白值”**选项。

  6. 在**“可用值”部分中,选择“无查询”**。使用下表输入值。

    标签

    应付款总计

    TotalDue

    销售订单日期

    OrderDate

  7. 在**“默认值”部分中,选择“无查询”**。在文本框中,键入 TotalDue

  8. 单击**“确定”**。

在下一步中,您将定义使用 InitialSort 报表参数的排序表达式,以便根据您选择的值对表详细信息行进行排序。

向表详细信息行添加排序表达式

  1. 选择表。右键单击表边框,选择**“属性”。将打开“表属性”**对话框。

  2. 单击**“排序”**选项卡。

  3. 从**“表达式”文本框下拉列表中,选择“<表达式>”。将打开“编辑表达式”**对话框。

  4. 用以下内容替换等号 (=):

    =IIF(InStr(Parameters!InitialSort.Value,"TotalDue")>0,Fields!TotalDue.Value,Fields!OrderDate.Value)
    

    这将测试参数以查找字符串值“TotalDue”。如果找到,TotalDue 字段将用于排序顺序;如果找不到,将使用 OrderDate 字段。排序顺序方向**“升序”“降序”不基于表达式,因此在“排序”**选项卡上设置的值将应用于计算表达式中指定的字段。

  5. 单击**“确定”**。

  6. (可选)更改 InitialSort 的参数值,然后单击**“查看报表”**。展开商店 Efficient Cycling 的节点。请确保根据 InitialSort 设置对详细信息行进行了排序。

后续步骤

您已成功添加了两个参数以控制 Store 列上的交互式排序按钮是按商店名称还是按销售量进行排序,以及是按订单日期还是按应付款总量对表的详细信息行进行排序。在下一课中,您将学习如何使用隐藏的布尔值参数控制此报表的初始明细状态。请参阅第 4 课:添加布尔值参数以控制初始明细状态

请参阅

其他资源

在 Reporting Services 中使用参数
在报表是对数据进行排序

帮助和信息

获取 SQL Server 2005 帮助