【问题标题】:Interactive sorting In SSRS on Values - Matrix report在 SSRS 中对值进行交互式排序 - 矩阵报告
【发布时间】:2014-08-24 07:56:36
【问题描述】:

我想要 SSRS 矩阵报告中的交互式排序。从数据库中,我们得到 3 列 -PrimaryKey、Columns 和 Value。
我们按Primary Key对行进行分组,按Columns对列进行分组,并使用Value作为数据。

我的矩阵报告 -

ID             [Columns]
[Primary Key]     Values

矩阵报告的输出 -

ID  FirstName   MiddleName  Lastname
1   Rajiv         Jha        Sharma
2   Prem          Kumar      Bose
3   Usha          Shamila    Praveena

我可以对 ID 使用交互式排序,因为 ID 是按行分组的,但我想对 FirstName、MiddleName 和 LastName 等动态 cloumns 值使用交互式排序。

我们对姓氏进行交互排序时的预期结果

ID  FirstName   MiddleName  Lastname
2   Prem         Kumar      Bose
3   Usha         Shamila    Praveena
1   Rajiv        Jha        Sharma

感谢您的帮助。

【问题讨论】:

    标签: reporting-services ssrs-2008 ssrs-2008-r2 ssrs-tablix ssrs-grouping


    【解决方案1】:

    您是否使用报告向导来构建它?您应该能够使用列组上的属性菜单应用交互式排序。

    通过向列标题添加交互式排序按钮,您可以允许用户单击列标题并按该列中显示的值对表或矩阵中的父组行进行排序。子组的顺序保持不变。

    将交互式排序按钮添加到列标题以对组进行排序:

    1. 在报表设计图面上的表或矩阵中,右键单击要添加交互式排序按钮的组列标题中的文本框。
    2. 单击文本框属性。
    3. 单击交互式排序。
    4. 选择在此文本框上启用交互式排序。
    5. 在“排序”中,单击“组”。
    6. 从下拉列表中,选择您要排序的组的名称。对于基于简单组表达式的组,排序依据值由组表达式填充。

    欲了解更多信息,请参阅这篇文章:http://technet.microsoft.com/en-us/library/cc627509(v=sql.100).aspx

    【讨论】:

    • 谢谢 Lethajd,我已经知道了,我们只对矩阵中的组提供交互式排序,但我希望对动态列进行交互式排序。
    • 为什么要使用动态列?从您的示例中,列的输出数量似乎是固定的,那么为什么不这样定义它们以便您可以进行排序呢?如果你设置在动态上,我认为是做不到的。
    • 输出列不固定,这就是我们尝试使用矩阵的原因。在 tablix 中,只需点击几下即可进行交互式排序。
    【解决方案2】:

    相当老的问题,但我最近偶然发现了类似的问题。 尽管 SSRS 不允许您在矩阵中的动态列上添加交互式排序,但您可以模拟类似的行为。我想出了一个方法,该方法要求报告自行触发(通过转到报告操作)按所需列排序

    我将使用一个更复杂的示例来展示此解决方案的全部功能。 想象一个在线书店,它想要一份报告,按类别显示他们的客户(行)、图书数量(价值)和图书总价值(价值)——在我的示例中为小说/非小说(列)。他们当然希望看到他们最好的客户,所以排序会递减。 我们从数据库中获取的示例数据:

    UserID          Columns    BooksCount  BooksValue
    AliBaba         Fiction    2           25.96
    AliBaba         NonFiction 4           112.00
    ThomasJefferson Fiction    3           36.83
    ThomasJefferson NonFiction 1           46.80
    BillCosby       Fiction    10          536.47
    BillCosby       NonFiction 2           26.87
    

    报告将如下所示:

                [Columns]       
                Books Count     Books Value
    [UserID]    Values          Values
    

    我希望报告能够按任何列的“图书数量”或“图书价值”排序。以下是要遵循的步骤:

    1. 您需要添加参数,这些参数将存储要排序的列的名称 - @SortColumn 和要排序的指标名称(计数或值) - @SortMetric

    2. 转到“图书计数”文本框并添加操作“转到报告”,指定相同的报告。使用来自基础数据集中 [Columns] 字段的值添加 @SortColumn 参数。添加 @SortMetric 参数,其值设置为“BooksCount”。类似于“图书价值”文本框。

    3. 您可以使用以下表达式调整列标题文本,这将向用户显示对哪一列数据进行排序: = IIf( Parameters!SortColumn.Value=Fields!Columns.Value And Parameters!SortMetric.Value = "BooksCount" ," ^","") 这是用于“图书数量”的,您可以为“图书数量”添加类似内容

    4. 终于出现在数据库站点上的魔法。源表名为[Sales]。除了排序之外,如果您的数据集较大,下面的代码允许仅选择前 N 行。 您可以使用此代码创建数据集,或者更好地创建存储过程。并将报表参数与数据集参数连接起来。

    DECLARE @TopN INT = 50
    
    ;WITH  Users_Sorted AS
    (
        SELECT
            UserID
            ,ROW_NUMBER() OVER (ORDER BY
                CASE @SortMetric
                    WHEN 'BooksCount' THEN Sales.BooksCount
                    WHEN 'BooksValue' THEN Sales.BooksValue
                END DESC) AS ROWNO
        FROM Sales
        WHERE
            Sales.Columns = @SortColumn
    )
    
    ,Sales_MAIN AS
    (
        SELECT
            Sales.UserID
            ,Sales.Columns
            ,Sales.BooksCount
            ,Sales.BooksValue
            ,ISNULL(Users_Sorted.ROWNO,
                ROW_NUMBER () OVER (PARTITION BY Sales.Columns ORDER BY Sales.UserID ASC)
                ) AS ROWNO
        FROM Sales
            LEFT JOIN Users_Sorted ON Sales.UserID = Users_Sorted.UserID
    )
    
    SELECT * FROM Sales_MAIN WHERE ROWNO <= @TopN ORDER BY ROWNO
    

    【讨论】:

    • 您能解释一下 Sales.columns 的来源吗?我有一个包含员工的数据集,并按类别完成。该类别以完成日期为中心。我需要对类别完成日期进行排序
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多