Reporting services SSRS中基于值的交互式排序-矩阵报告

Reporting services SSRS中基于值的交互式排序-矩阵报告,reporting-services,ssrs-2008,ssrs-2008-r2,ssrs-tablix,ssrs-grouping,Reporting Services,Ssrs 2008,Ssrs 2008 R2,Ssrs Tablix,Ssrs Grouping,我想在SSRS矩阵报告中进行交互式排序。我们从数据库中得到3列—PrimaryKey、columns和Value。 我们按主键对行进行分组,按列对列进行分组,并使用值作为数据 我的矩阵报告- ID [Columns] [Primary Key] Values 矩阵报告的输出- ID FirstName MiddleName Lastname 1 Rajiv Jha Sharma 2 Prem Kum

我想在SSRS矩阵报告中进行交互式排序。我们从数据库中得到3列—PrimaryKey、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)使用交互式排序

对Lastname进行交互式排序时的预期结果

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

谢谢您的帮助。

您是否正在使用报表向导生成此报表?您应该能够使用列组上的“属性”菜单应用交互式排序

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

要将交互式排序按钮添加到列标题以对组进行排序,请执行以下操作:

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

  • 有关更多信息,请参阅本文:

    这是一个很老的问题,但我最近偶然发现了类似的问题。 尽管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
    
    我希望报告能够对任何列按“图书数量”或“图书价值”进行排序。以下是要遵循的步骤:

  • 您需要添加参数,这些参数将存储要排序的列的名称-
    @SortColumn
    ,以及要排序的度量名称(计数或值)-
    @SortMetric

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

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

  • 最后是数据库站点上发生的魔法。源表名为
    [Sales]
    。除了排序之外,如果数据集较大,下面的代码只允许选择前N行。 您可以使用此代码创建数据集,或者更好地创建存储过程。并将报表参数与数据集参数联接

  • DECLARE@TopN INT=50
    ;用户被分类为
    (
    挑选
    用户ID
    ,第_行编号()超过(订货人)
    格@SortMetric
    当“BooksCount”时,则为Sales.BooksCount
    当“BooksValue”时,则为Sales.BooksValue
    结束描述)作为行编号
    来自销售
    哪里
    Sales.Columns=@SortColumn
    )
    ,销售(主要为
    (
    挑选
    Sales.UserID
    ,Sales.Columns
    ,Sales.BooksCount
    ,销售价值
    ,ISNULL(Users_Sorted.ROWNO,
    行号()超过(按Sales.Columns分区按Sales.UserID排序ASC)
    )作为罗诺
    来自销售
    LEFT JOIN Users\u Sorted ON Sales.UserID=Users\u Sorted.UserID
    )
    
    从Sales_MAIN中选择*ROWNO Thank Lethajd,这我已经知道了,通过这一点,我们仅对矩阵中的组提供交互式排序,但我希望对动态列进行交互式排序。为什么要使用动态列?在您的示例中,列的输出数量似乎是固定的,因此为什么不将它们定义为固定的,以便您可以进行排序?如果设置为动态,我认为这是不可能的。输出列不是固定的,这就是我们尝试使用矩阵的原因。在tablix中,只需单击几下鼠标即可进行交互式排序。
    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