SSRS 排序不正确
SSRS Not sorting correctly
我正在使用 SSRS 2014 进入 SQL Server 2014 数据库。我从它的初始版本开始使用 SSRS,但从未遇到过这个问题,所以我不知道它是否是 SSRS 中的错误2014. 我有一个存储过程 returns 一些数据,就像这样简单:
CREATE PROCEDURE [dbo].[GetNewsletterStories]
@NewsletterID int,
@IsMainStory int=2 --2 is both, 1 is true, 0 is false
AS
BEGIN
SET NOCOUNT ON;
SELECT
ns.SortOrder as SortOrder,
ns.Title,
ns.Description,
ns.LinkText,
ns.LinkURL,
ns.PictureName,
ns.IsMainStory
FROM
NewsletterStory ns
INNER JOIN
Newsletter n
ON
n.NewsletterID = ns.NewsletterID
WHERE
n.Deleted=0
AND ns.Deleted=0
AND n.NewsletterID = @NewsletterID
--do they want non main story or main story or both
AND ((ns.IsMainStory = 0 AND @IsMainStory=0) OR (ns.IsMainStory = 1 AND @IsMainStory=1) OR (@IsMainStory=2))
ORDER BY
ns.SortOrder
END
如果我 运行 Management Studio 中的存储过程如下所示:
USE [MyDB]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[GetNewsletterStories]
@NewsletterID = 1,
@IsMainStory = 1
SELECT 'Return Value' = @return_value
GO
我以正确的顺序得到了我需要的东西:
然后我在 SSRS 中创建我的数据集,然后可以转到查询设计器和 运行 它:
这是提示我输入参数的地方:
我得到了我需要的东西:
到目前为止一切顺利,我添加了我的 tablix 并设置了我创建的数据集名称,甚至根据我数据集中的列将排序部分设置为 [SortOrder]
:
每次我 运行 我的报告都得到错误的排序顺序:
我想很简单,它一定是缓存了一些旧版本,所以我确保删除了我的报告 MyReport.rdl.data
文件,以便获得新的报告。不,它仍然先显示 "Concerto Integration",然后显示 "RIMS Newsletter"...但是我的数据集和存储过程返回正确的顺序 "RIMS Newsletter" 和 "Concerto Integration"。我已经尝试了所有方法,但它似乎总是按 table 的主键排序(在创建文章时,因为我在 RIMS Newsletter 文章之前创建了 Concerto Integration 文章)。
我不知道还能去哪里查看,我什至检查了结果 XML(查看代码功能)并且 SortOrder
在数据集中。即使我删除了 SortOrder
它也应该可以工作,因为存储过程已经按照它进行排序,正如您在代码中看到的那样。
什么给了?
哇,发现了,和往常一样,它是 SSRS 中的一个错误,我记得这些东西是 SSRS 2005 和 SSRS 2008 中的错误。所以即使你在设计器中更改了 SortOrder,在我的例子中我也更改了它排序顺序。那没有用...所以我所做的是右键单击实际报告并执行 "View Code"。我查找了 SortExpression,它没有值 SortOrder,这几乎就像在某些情况下,当您从设计器更新报告时,代码 xml 部分看不到这些更新。
无论如何我改变了它使得 XML 读到这个:
<SortExpressions>
<SortExpression>
<Value>=Fields!SortOrder.Value</Value>
</SortExpression>
</SortExpressions>
保存了我的报告并再次 运行 它,瞧,现在一切都很好。经验教训 使用 "View Code" 选项的先前经验来解决此类问题。
这是全部内容:
<TablixMembers>
<TablixMember>
<Group Name="Title">
<GroupExpressions>
<GroupExpression>=Fields!Title.Value</GroupExpression>
</GroupExpressions>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!SortOrder.Value</Value>
</SortExpression>
</SortExpressions>
<TablixMembers>
<TablixMember>
<Group Name="Details2" />
<TablixMembers>
<TablixMember />
<TablixMember />
<TablixMember />
</TablixMembers>
</TablixMember>
</TablixMembers>
</TablixMember>
</TablixMembers>
无论我在设计器中做什么都不会更新 sortexpression 值部分,这部分:
<SortExpressions>
<SortExpression>
<Value>=Fields!SortOrder.Value</Value>
</SortExpression>
</SortExpressions>
我尝试通过设计器,但它从未更新 XML,并且 运行 报告产生了错误的结果。直到我手动更改 SortExpression 以读取字段!SortOrder.Value 我的报告排序是否正确。
这是评论中提到的屏幕截图:
更好的照片:
即使我在标题级别做同样的问题:
SQL 服务器 2012
在行组中,我将第一列的排序更改为我想要的。转到行组 > 更改排序,如图所示。此外,我还更改了 tablix 排序。
我遇到了同样的问题,它只会按组名称排序,而不是我想要的排序顺序。更改 Tablix 的排序顺序没有任何影响。我能够通过转到组属性并选择排序来解决它。在那里,我将 "sort by" 属性 从数据集 "name" 字段更改为数据集 "sortorder" 字段并修复了它。 Tablix 级别的排序顺序显然被分组排序顺序覆盖。
周杰伦
我正在使用 SSRS 2014 进入 SQL Server 2014 数据库。我从它的初始版本开始使用 SSRS,但从未遇到过这个问题,所以我不知道它是否是 SSRS 中的错误2014. 我有一个存储过程 returns 一些数据,就像这样简单:
CREATE PROCEDURE [dbo].[GetNewsletterStories]
@NewsletterID int,
@IsMainStory int=2 --2 is both, 1 is true, 0 is false
AS
BEGIN
SET NOCOUNT ON;
SELECT
ns.SortOrder as SortOrder,
ns.Title,
ns.Description,
ns.LinkText,
ns.LinkURL,
ns.PictureName,
ns.IsMainStory
FROM
NewsletterStory ns
INNER JOIN
Newsletter n
ON
n.NewsletterID = ns.NewsletterID
WHERE
n.Deleted=0
AND ns.Deleted=0
AND n.NewsletterID = @NewsletterID
--do they want non main story or main story or both
AND ((ns.IsMainStory = 0 AND @IsMainStory=0) OR (ns.IsMainStory = 1 AND @IsMainStory=1) OR (@IsMainStory=2))
ORDER BY
ns.SortOrder
END
如果我 运行 Management Studio 中的存储过程如下所示:
USE [MyDB]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[GetNewsletterStories]
@NewsletterID = 1,
@IsMainStory = 1
SELECT 'Return Value' = @return_value
GO
我以正确的顺序得到了我需要的东西:
然后我在 SSRS 中创建我的数据集,然后可以转到查询设计器和 运行 它:
这是提示我输入参数的地方:
我得到了我需要的东西:
到目前为止一切顺利,我添加了我的 tablix 并设置了我创建的数据集名称,甚至根据我数据集中的列将排序部分设置为 [SortOrder]
:
每次我 运行 我的报告都得到错误的排序顺序:
我想很简单,它一定是缓存了一些旧版本,所以我确保删除了我的报告 MyReport.rdl.data
文件,以便获得新的报告。不,它仍然先显示 "Concerto Integration",然后显示 "RIMS Newsletter"...但是我的数据集和存储过程返回正确的顺序 "RIMS Newsletter" 和 "Concerto Integration"。我已经尝试了所有方法,但它似乎总是按 table 的主键排序(在创建文章时,因为我在 RIMS Newsletter 文章之前创建了 Concerto Integration 文章)。
我不知道还能去哪里查看,我什至检查了结果 XML(查看代码功能)并且 SortOrder
在数据集中。即使我删除了 SortOrder
它也应该可以工作,因为存储过程已经按照它进行排序,正如您在代码中看到的那样。
什么给了?
哇,发现了,和往常一样,它是 SSRS 中的一个错误,我记得这些东西是 SSRS 2005 和 SSRS 2008 中的错误。所以即使你在设计器中更改了 SortOrder,在我的例子中我也更改了它排序顺序。那没有用...所以我所做的是右键单击实际报告并执行 "View Code"。我查找了 SortExpression,它没有值 SortOrder,这几乎就像在某些情况下,当您从设计器更新报告时,代码 xml 部分看不到这些更新。
无论如何我改变了它使得 XML 读到这个:
<SortExpressions>
<SortExpression>
<Value>=Fields!SortOrder.Value</Value>
</SortExpression>
</SortExpressions>
保存了我的报告并再次 运行 它,瞧,现在一切都很好。经验教训 使用 "View Code" 选项的先前经验来解决此类问题。
这是全部内容:
<TablixMembers>
<TablixMember>
<Group Name="Title">
<GroupExpressions>
<GroupExpression>=Fields!Title.Value</GroupExpression>
</GroupExpressions>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!SortOrder.Value</Value>
</SortExpression>
</SortExpressions>
<TablixMembers>
<TablixMember>
<Group Name="Details2" />
<TablixMembers>
<TablixMember />
<TablixMember />
<TablixMember />
</TablixMembers>
</TablixMember>
</TablixMembers>
</TablixMember>
</TablixMembers>
无论我在设计器中做什么都不会更新 sortexpression 值部分,这部分:
<SortExpressions>
<SortExpression>
<Value>=Fields!SortOrder.Value</Value>
</SortExpression>
</SortExpressions>
我尝试通过设计器,但它从未更新 XML,并且 运行 报告产生了错误的结果。直到我手动更改 SortExpression 以读取字段!SortOrder.Value 我的报告排序是否正确。
这是评论中提到的屏幕截图:
更好的照片:
即使我在标题级别做同样的问题:
SQL 服务器 2012
在行组中,我将第一列的排序更改为我想要的。转到行组 > 更改排序,如图所示。此外,我还更改了 tablix 排序。
我遇到了同样的问题,它只会按组名称排序,而不是我想要的排序顺序。更改 Tablix 的排序顺序没有任何影响。我能够通过转到组属性并选择排序来解决它。在那里,我将 "sort by" 属性 从数据集 "name" 字段更改为数据集 "sortorder" 字段并修复了它。 Tablix 级别的排序顺序显然被分组排序顺序覆盖。 周杰伦