假设我在 sql 中有包含一些行和列的表。列是 (id, column1,column2,column3), 我没有旋转。并在 ssrs 中获得数据集,例如:Key、ColumnName、ColumnValue。我创建了如下结构的矩阵:
----------------------
Key | ColumnName
----------------------
[Key] | [ColumnValue]
------------------------
问题:我如何在 SSRS 的矩阵中执行以下操作:“按 Column2 排序”(或按多个 column2、Column3 排序)?我需要提及按特定列名排序的地方?
答案 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
这将为您提供以下结果。
您实际上不需要 ORDER BY
子句,因为您将在 SSRS 中对其进行排序,在 SSRS 中,您可以通过 SortBy
字段对行或行组进行排序。
如果您只想使用 SSRS 表达式,则使用与上述相同的示例数据(但没有额外的排序列)...
创建一个包含 dsCols
列表的新数据集(例如 ColName
),例如
SELECT DISTINCT ColName FROM #t ORDER BY ColName
创建一个名为 SortCol
在参数属性中,选择 AVailable Values“从查询中获取值”并选择 dsCols
。将值和标签都设置为 ColName
字段。
现在,在您的矩阵中,选择行组(在我的示例中称为 KeyID
)
转到“排序”选项卡...
设置排序表达式为
=SUM
(
IIF(Fields!ColName.Value = Parameters!SortCol.Value,
Fields!ColValue.Value,
NOTHING)
)
根据需要设置顺序“A到Z”或“Z到A”。
现在,当您运行报告时,您可以选择作为排序依据的列...
答案 1 :(得分:0)
也许问题不够清楚。但是在@Alan 的帮助下,我找到了适合我的完美解决方案。 因此,如果我们想要“按 Column1 排序”,那么在 unpivot 之后将您的数据集放入矩阵中。转到要按特定列排序的矩阵(在我的情况下为 column1) 行组属性---->排序---->添加--->表达式:
MAX( IIF(Fields!ColumnName.Value="Column1",Fields!ColumnValue.Value,Nothing) )
如果您想将 Column2 也添加到该矩阵进行排序,只需在同一窗口中设置第一个表达式后单击 --->add---> 表达式----> 相同的查询,但使用您的列名(例如第 2 列)。
希望这对某人有所帮助。