0

次のデータセットを想定します。


declare
    @datesTest table(dateId date, someValue int)
insert into
    @datesTest 
values
    ('01/01/2013', 15),
    ('01/01/2013', 15),
    ('02/01/2013', 0),
    ('03/01/2013', 27),
    ('03/01/2013', 27),
    ('03/01/2013', 27),
    ('04/01/2013', 44),
    ('04/01/2013', 44),
    ('05/01/2013', 0)

/* data is in this format with about 15 other fields that make distinct at this level not viable */
select
    *
from
    @datesTest;

/* not the average I want */
select
    avg(someValue) incorrectAvg
from
    @datesTest;

/* the average I do want (avg of distinct) */
select
    avg(_1.someValue) correctAvg
from
(
    select distinct
        *
    from
        @datesTest
)_1

また、データセットを変更したり、SQL のフィールドを操作したりすることはできないと仮定します。

Reporting Services から、これらの値を何らかの形で受け入れ、重複を削除してから真の平均を返すカスタム関数を作成したいと考えています。

私が抱えている問題は、SSRS が複数の行をカスタム関数に渡すために使用するオブジェクトの種類がわからないことです。

4

1 に答える 1

0

別のデータセットを参照するデータセットを作成できると思います。

データセット ParentList を作成します。これがフィルター データセットになります。値列を 1 つだけ返す必要があり、元のデータセット (重複する行を持つデータセット) からこのリストを取得できる必要があります。平均化する値を引き出すだけで済みます。ParentList という名前の新しいレポート パラメーターを作成します。使用可能な値とデフォルト値の両方を、データセット ParentList からの値列の結果に設定します。パラメータを非表示に設定します。2 番目のデータセット RealAverage (または何でも) を作成します。@ParentList という名前のデータセット RealAverage に、ParentList をパラメータとして追加します。

子クエリでは、次のようにパラメーターを使用します。

SELECT DISTINCT(my column) WHERE valueColumn IN (@ParentList)

これにより、一意の行が返され、標準の SSRS Avg を使用できます

あまりきれいではありませんが、うまくいくはずです。データセットからパラメーターを作成してみてください。パラメーターは、1 行のデータセットからのみ作成できることに注意してください。

これが役立つことを願っています。

于 2013-10-31T00:40:57.887 に答える