2012-10-18 44 views
2

我是相对较新的SQLServer世界,我正在尝试为我正在使用的公司学习SSRS 2005,所以请原谅我如果我在研究中错过了任何明显的答案。有没有办法让用户排序结果留在SSRS 2005报告刷新

我遇到的问题是我有一个报告,允许用户按列对主表进行排序,只有当报告服务器刷新报告时,用户排序才会重置。这导致了大量的日常工作中使用本报告的用户的投诉。

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

任何帮助,将不胜感激。

+0

我有完全一样的问题的解释,但它是SSRS 2008 - 希望有一个答案 – JoeSharp

回答

0

如果您有许多用户整天使用报告,但对其进行了不同的分类,我首先会看到他们有哪些其他要求会导致他们以不同方式使用报告。您可能会发现,排序是冰山一角,几个用户组可以使用一个报告,而他们可以使用多个定制报告。

为了让他们通过刷新进行排序和维护他们的排序,我会通过动态存储过程使用参数化报告。可能有一个更简单的方法 - 但这应该可以做到。您必须手动标记动态查询源的字段 - 只要确保FieldSource与您的列名相同,并且您将正确拉取数据并能够将值分配给单元格。

例列排序选择:

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

现在创建动态存储过程将使用的排序顺序:

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用于获取列名

相关问题