Reporting services SSRS中基于值的交互式排序-矩阵报告
我想在SSRS矩阵报告中进行交互式排序。我们从数据库中得到3列—PrimaryKey、columns和Value。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
我们按主键对行进行分组,按列对列进行分组,并使用值作为数据 我的矩阵报告-
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