web-dev-qa-db-ja.com

SSRSが正しくソートされていません

SSRS2014を使用してSQLServer 2014データベースを利用しています。最初のリリースからSSRSを使用しましたが、この問題が発生したことがないため、SSRS2014のバグかどうかはわかりません。いくつかのデータ、これと同じくらい単純なもの:

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

次のようにManagementStudio内からストアドプロシージャを実行すると、次のようになります。

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ファイルを削除して、新しいレポートを取得するようにしました。いいえ、それでも最初に「ConcertoIntegration」、次に「RIMSNewsletter」が表示されます...しかし、私のデータセットとストアドプロシージャは、正しい順序の「RIMSNewsletter」と「ConcertoIntegration」を返しています。私はすべてを試しましたが、常にテーブルの主キーでソートされているようです(記事が作成されたとき、RIMSニュースレターの記事の前にConcerto Integrationの記事を作成したため)。

他にどこを見ればよいかわかりません。結果のXML(コードの表示機能)を調べたところ、データセットにSortOrderが含まれています。そのSortOrderを削除しても、コードに示されているように、ストアドプロシージャはすでにソートされているため、機能するはずです。

何が得られますか?

9
JonH

うわー、それはSSRSのバグで、いつものようにSSRS2005とSSRS2008のバグだったのを覚えています。したがって、デザイナーで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

12
JonH

SQL Server 2012

行グループで、最初の列の並べ替えを必要なものに変更しました。図に示すように、[行グループ]> [並べ替えの変更]に移動します。また、tablixの並べ替えを変更しました。

RowGroupSort on first column of row group

7
Ashwini M

私は同じ問題を抱えていました、それは私が望むソート順ではなく名前であるグループでのみソートするでしょう。 Tablixの並べ替え順序を変更しても影響はありませんでした。 Groupプロパティに移動し、Sortingを選択することで、これに対処することができました。そこで、「sortby」プロパティをデータセットの「name」フィールドからデータセットの「sortorder」フィールドに変更し、それを修正しました。 Tablixレベルの並べ替え順序は、グループ化の並べ替え順序によって上書きされるようです。ジェイ

2
Jay