【问题标题】:Is there a way to make user sort results stay on an SSRS 2005 report refresh有没有办法让用户排序结果停留在 SSRS 2005 报告刷新上
【发布时间】:2012-10-09 08:04:59
【问题描述】:

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 我也有完全相同的问题,但它是针对 SSRS 2008 的——希望有答案

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


【解决方案1】:

如果您有很多用户整天都在使用该报告,但对它进行了不同的排序,那么我首先要看看他们还有哪些其他要求导致他们以不同的方式使用该报告。您可能会发现排序只是冰山一角,几个用户组只能使用一个报告,而他们可以使用多个自定义构建的报告。

为了允许他们通过刷新进行排序和维护排序,我将通过动态存储过程使用参数化报告。可能有一个更简单的方法 - 但这应该可以解决问题。不过,您必须手动标记动态查询源的字段 - 只需确保 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

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多