有没有办法让用户排序结果保持SSRS 2005报告刷新

时间:2012-10-18 19:01:41

标签: sql-server-2005 reporting-services bids

我对SQLServer世界比较陌生,我正在尝试为我正在合作的公司学习SSRS 2005,所以请原谅我,如果我在研究中遗漏了任何明显的答案。

我遇到的问题是我有一个报告,允许用户按列对主表进行排序,只有当报表服务器刷新报表时,才会重置用户排序。这引起了场内用户的大量投诉,他们正在处理此报告中的大部分日常任务。

报告基本上是一个表,它根据给定的参数和存储过程返回的数据返回多个结果。通过在每个列的表头上设置用户排序来实现排序功能。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您有很多用户整天使用该报告,但对其进行不同的排序,我首先会看看他们有什么其他要求导致他们以不同方式使用报告。您可能会发现排序是冰山一角,当一些报告可以使用多个自定义报告时,几个用户组可以使用单个报告。

为了允许他们通过刷新来排序和维护他们的排序,我将通过动态存储过程使用参数化报告。可能有一种更简单的方法 - 但这应该可以解决问题。您必须手动标记动态查询源的字段 - 只需确保FieldSource与列名相同,您将正确提取数据并能够将值分配给单元格。

列排序选择示例:

CREATE PROC getSortColumns 
AS
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'DimEmployee' AND TABLE_SCHEMA='dbo'

现在创建将使用排序顺序的动态sproc:

CREATE PROC getEmployees ( @OrderByClause varchar(100) ) AS

-- Create a variable @SQLStatement
DECLARE @SQLStatement varchar(255)

-- Enter the dynamic SQL statement into the
-- variable @SQLStatement
SELECT @SQLStatement = 'SELECT Title, FirstName, LastName, HireDate, Status ' +
                       'FROM dbo.DimEmployee ORDER BY ' + @OrderByClause

-- Execute the SQL statement
EXEC(@SQLStatement)

您可以测试查询是否正在手动运行:

exec getEmployees @OrderbyClause = LastName

在BIDS中您将收到警告消息,指出查询中缺少您的字段。我在SQL 2012中测试了这个解决方案,所以它可能在早期版本中不起作用,抱歉我无法确认。

创建两个数据集,一个用于列名,一个用于查询。正常设置列名的默认值和值,手动命名并列出主数据集上的查询字段,否则将无法识别查询中的任何字段。

不是特别可维护......我肯定会首先调查报告要求。希望这有帮助!

有关动态查询说明,请参阅4 Guys,有关获取列名称的说明,请参阅this question