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 级别的排序顺序显然被分组排序顺序覆盖。 周杰伦