1

SSRSは初めてです。トランザクションテーブルをcustomeridでグループ化し、customeridごとのトランザクション数をカウントしたいと思います。私はそれをすることができました。

しかし、その数で並べ替えたり、その数でフィルタリングしたりします。どうですか?

ありがとう!

4

2 に答える 2

2

行グループの並べ替えとフィルター処理を設定するには、行グループを右クリックします。

ここで、グループの並べ替えとフィルタリングのプロパティにアクセスできます。どちらも、カウント列の名前に基づいてルールを設定できるはずです。

于 2012-08-23T20:23:49.013 に答える
0

オプション1

レポートにトランザクションを表示する必要がない場合は、SSRS ではなく、クエリのデータベース レベルで集計を実行する必要があります。次の利点があります。

  1. より高速なレンダリング。
    • ネットワーク経由で送信するデータが少なくなります。
    • SSRS エンジンが処理するデータが少なくなるため、注文をより迅速に実行できます。
  2. ORDER BY基になるクエリの句に 最も一般的な/期待される値を入れることで、データ セットを「事前に並べ替える」ことができます。
    • これにより、レンダリングの速度も向上します。
  3. SSRS で複雑な式を試したり実行したりすることなく、クエリによって返された集計データに対して任意のフィルターを直接適用できます。
    • これにより、レンダリング時のパフォーマンスも向上します。
  4. HAVING集計クエリ の句で使用できる「フィルター」パラメーターを持つことができます
    • 繰り返しになりますが、ネットワーク全体で処理されるデータが少ないため、パフォーマンスが向上します。
    • ユーザーの好みを事前に定義しようとしたり、式や「最善の推測」にフィルター条件を設定したりするのではなく、レポートに一定レベルの対話性を提供します。

-- Will filter out any customers who have 2 or fewer transactions
DECLARE @Filter AS int = 2
;

SELECT 
    CustomerId
    ,COUNT(TransactionId)

FROM
    Transactions

GROUP BY
    CustomerId

HAVING
     COUNT(TransactionId) > @Filter

オプション 2

それでもトランザクションを表示する必要がある場合は、クエリに列を追加して、次のように節 andCount()を使用して実行します。OVERPARTITION BY customerid

COUNT(transactions) OVER (PARTITION BY customerid) AS CustomerTransactionCount

非常に単純なテーブル構造を想定すると、次のようなクエリ構造になります。

SELECT
    CustomerId
    ,TransactionId
    ,TransactionAttribute_1
    ,TransactionAttribute_2
    ,TransactionAttribute_3
    .
    .
    .
    ,TransactionAttribute_n
    ,COUNT(TransactionId) OVER (PARTITION BY CustomerId) AS CustomerTransactionCount

FROM
    Transactions

CustomerTransactionCountSSRS 内の任意の行/列グループでフィルターおよび並べ替え列として使用できます。

このアプローチの欠点

  • ウィンドウ関数、つまり の使用は、句が使用されていないOVER (PARTITION BY...)ため、句では使用できません。これは、すべてのフィルタリングを SSRS で実行する必要があることを意味します。HAVINGGROUP BY

回避策のオプション

  1. 上記のクエリを CTE でラップします。これにより、集計結果に基づいてフィルタリングできます。
  2. 集計を派生テーブルに入れます。

CTE の例

--Filter variable
DECLARE @Filter AS int = 2
;

WITH    DataSet_CTE AS
        (
            -- Build the data set with transaction information and the aggregate column
            SELECT
                CustomerId
                ,TransactionId
                ,TransactionAttribute_1
                ,TransactionAttribute_2
                ,TransactionAttribute_3
                .
                .
                .
                ,TransactionAttribute_n
                ,COUNT(TransactionId) OVER (PARTITION BY CustomerId) AS CustomerTransationCount

            FROM
                Transactions
        )

-- Filter and return data       
SELECT  *
FROM    DataSet_CTE
WHERE   CustomerTransationCount > @Filter

派生テーブルの例

--Filter variable
DECLARE @Filter AS int = 2
;

SELECT
    *

FROM
    (
        -- Build the data set with transaction information and the aggregate column
        SELECT
            CustomerId
            ,TransactionId
            ,TransactionAttribute_1
            ,TransactionAttribute_2
            ,TransactionAttribute_3
            .
            .
            .
            ,TransactionAttribute_n
            ,COUNT(TransactionId) OVER (PARTITION BY CustomerId) AS CustomerTransationCount

        FROM
            Transactions
    ) AS DataSet

WHERE
    DataSet.CustomerTransationCount > @Filter
于 2012-10-31T04:08:26.063 に答える