我对SQLServer世界比较陌生,我正在尝试为我正在合作的公司学习SSRS 2005,所以请原谅我,如果我在研究中遗漏了任何明显的答案。
我遇到的问题是我有一个报告,允许用户按列对主表进行排序,只有当报表服务器刷新报表时,才会重置用户排序。这引起了场内用户的大量投诉,他们正在处理此报告中的大部分日常任务。
报告基本上是一个表,它根据给定的参数和存储过程返回的数据返回多个结果。通过在每个列的表头上设置用户排序来实现排序功能。
任何帮助都将不胜感激。
答案 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