SSRS 按列名对矩阵进行排序

时间:2021-05-04 18:18:10

标签: sql-server reporting-services ssrs-2012

假设我在 sql 中有包含一些行和列的表。列是 (id, column1,column2,column3), 我没有旋转。并在 ssrs 中获得数据集,例如:Key、ColumnName、ColumnValue。我创建了如下结构的矩阵:

----------------------
Key     | ColumnName
----------------------
[Key]   | [ColumnValue]
------------------------

问题:我如何在 SSRS 的矩阵中执行以下操作:“按 Column2 排序”(或按多个 column2、Column3 排序)?我需要提及按特定列名排序的地方?

2 个答案:

答案 0 :(得分:1)

我已经生成了一些测试数据,并且我假设您的非透视数据看起来与这些类似。

在数据集查询中

如果是这样,您可以将排序列名称作为参数从 SSRS 传入。如果你这样做,你将不需要在你的数据集查询中声明变量,但我已经为这个例子声明并设置了它的值。

CREATE TABLE #t (KeyID int, ColName varchar(20), ColValue int)
INSERT INTO #t VALUES
(1, 'Price',        10),
(1, 'Quantity',     10),
(1, 'Value',        100),
(2, 'Price',        20),
(2, 'Quantity',     2),
(2, 'Value',        40),
(3, 'Price',        30),
(3, 'Quantity',     1),
(3, 'Value',        30)

DECLARE @SortCol varchar(20) = 'Quantity'

SELECT 
    t.*, s.SortBy
    FROM #t t
        JOIN (SELECT KeyID, SUM(ColValue) AS SortBy FROM #t WHERE ColName = @SortCol GROUP BY KeyID) s 
            ON t.KeyID = s.KeyID
    ORDER BY SortBy desc

这将为您提供以下结果。

enter image description here

您实际上不需要 ORDER BY 子句,因为您将在 SSRS 中对其进行排序,在 SSRS 中,您可以通过 SortBy 字段对行或行组进行排序。

使用 SSRS 表达式

如果您只想使用 SSRS 表达式,则使用与上述相同的示例数据(但没有额外的排序列)...

创建一个包含 dsCols 列表的新数据集(例如 ColName),例如

SELECT DISTINCT ColName FROM #t ORDER BY ColName

创建一个名为 SortCol

的参数

在参数属性中,选择 AVailable Values“从查询中获取值”并选择 dsCols。将值和标签都设置为 ColName 字段。

现在,在您的矩阵中,选择行组(在我的示例中称为 KeyID

转到“排序”选项卡...

enter image description here

设置排序表达式为

=SUM
   (
    IIF(Fields!ColName.Value = Parameters!SortCol.Value, 
        Fields!ColValue.Value, 
        NOTHING)
   )

根据需要设置顺序“A到Z”或“Z到A”。

现在,当您运行报告时,您可以选择作为排序依据的列...

enter image description here

enter image description here

答案 1 :(得分:0)

也许问题不够清楚。但是在@Alan 的帮助下,我找到了适合我的完美解决方案。 因此,如果我们想要“按 Column1 排序”,那么在 unpivot 之后将您的数据集放入矩阵中。转到要按特定列排序的矩阵(在我的情况下为 column1) 行组属性---->排序---->添加--->表达式:

MAX( IIF(Fields!ColumnName.Value="Column1",Fields!ColumnValue.Value,Nothing) )

如果您想将 Column2 也添加到该矩阵进行排序,只需在同一窗口中设置第一个表达式后单击 --->add---> 表达式----> 相同的查询,但使用您的列名(例如第 2 列)。

希望这对某人有所帮助。