SSRS未正确排序

时间:2015-04-08 13:24:09

标签: sql-server sorting reporting-services sql-server-2014

我正在使用SSRS 2014访问SQL Server 2014数据库。我从最初的版本开始使用SSRS但从未遇到过这个问题所以我不知道它是否是SSRS中的错误我有一个存储过程可以返回一些数据,就像这样简单:

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

我按照正确的顺序得到了我需要的东西:

enter image description here

然后我在SSRS中创建了我的数据集,可以转到查询设计器并运行它:

enter image description here

这是提示我输入参数的地方:

enter image description here

我得到了我需要的东西:

enter image description here

到目前为止,我添加了Tablix并设置了我创建的数据集名称,甚至根据我的数据集中的列将排序部分设置为[SortOrder]

enter image description here

每次运行报告时,我都会得到错误的排序顺序:

enter image description here

简单我认为,它必须缓存一些旧版本,所以我确保删除我的报告MyReport.rdl.data文件,以便我得到一份新的报告。不过,它仍然显示" Concerto Integration"首先,然后" RIMS时事通讯" ...但我的数据集和我的存储过程正在返回正确的顺序" RIMS时事通讯"和"协奏曲整合"。我已经尝试了所有的东西,但似乎总是按表格的主键排序(文章创建时,我在RIMS时事通讯文章之前创建了Concerto Integration文章)。

我不知道在哪里查看,我甚至检查了生成的XML(查看代码功能),SortOrder位于数据集中。即使我删除了SortOrder它也应该有效,因为存储过程已经按照您在代码中看到的那样进行排序。

是什么给出了?

3 个答案:

答案 0 :(得分:11)

哇发现它并且像往常一样它是SSRS中的一个错误,我记得在SSRS 2005和SSRS 2008中存在这些错误。所以即使你在设计器中更改了SortOrder,在我的情况下我也将它改为SortOrder 。那没有用......所以我做的是右键点击实际报告并做了“查看代码”。我查找了SortExpression并且它没有值SortOrder,它几乎就像在某些情况下从设计器更新报告时代码xml部分看不到那些更新。

无论如何我改变了它,以便XML读取这个:

 <SortExpressions>
                            <SortExpression>
                              <Value>=Fields!SortOrder.Value</Value>
                            </SortExpression>
                          </SortExpressions>

保存了我的报告并再次运行,瞧,一切都很顺利。经验教训使用“查看代码”选项的先前经验来解决此类问题。

以下是整个事情:

<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更改为读取Fields!SortOrder.Value才能正确排序我的报告。

以下是评论中提到的屏幕截图:

enter image description here

更好的照片:

enter image description here

即使我在标题级别同样的问题上这样做:

enter image description here

答案 1 :(得分:5)

SQL Server 2012

在行组中,我将第一列排序更改为我想要的内容。转到行组&gt;更改排序,如图所示。另外,我更改了tablix排序。

RowGroup Sort on first column of row group

答案 2 :(得分:1)

我遇到了同样的问题,它只对该组进行排序,而该组的名称不是我想要的排序顺序。更改Tablix的排序顺序没有任何影响。我可以通过转到Group属性并选择Sorting来解决它。在那里,我将“sort by”属性从数据集“name”字段更改为数据集“sortorder”字段并修复它。 Tablix级别的排序顺序显然被分组排序顺序覆盖。 杰