1

SSRS マトリックス制御を使用してレポートを作成しています。

これは、私が使用しているサンプルテーブルです

ファンミックス

これが、SSRSでマトリックスツールを使用して達成しようとしているものです

結果

OK今すぐ説明

レポートでは、タイプ A、B、C とそのケース金額を場所コード別にグループ化する必要があります。6 行目には、4 行目と 5 行目 (タイプ A とタイプ B) から派生した の計算値が含まれます。

スクリーンショットに示されているように、結果 ($44) を導き出すために使用される式は、次の式を使用することによるものです。

(Case Value of Type B * average of Type B) + (Case Value of Type C * average of Type C)
-------------------------------------------------------------------------------------
                           (Case Value of Type B + Case Value of Type C)

したがって、$44 の値は次のように達成できます。

(57 * 18) + (44 * 78) / (57 + 44)

誰かがこれをssrsに実装する方法を教えてください。構造体を作ったのですが、合計値が計算できません。

4

1 に答える 1

1

それは、平均をどのように取得するかによって異なります。これは、事前に決定した何かを使用して舞台裏で行われていますか? それとも、参加できる他のテーブルに基づいて実行していますか?

取得できるデータセットにすべて含まれている場合は、これを行います。

  1. データと平均の両方であるデータセットを決定します。あなたが SQL に由来しているのか、それとも単に Excel でこれを行っているのかはわかりません。当分の間、SQLでダミーします:

    declare @Avgs Table ( location int, type varchar(1), cs int, average int);
    
    insert into @Avgs values (1, 'A', 21, 10),(1, 'B', 57, 18),(1, 'C', 44, 78);
    
    Select top 10 *
    from @Avgs
    
  2. SSRS の式エディターは通常、1 つまたは 2 つの関数に対しては問題ないため、「計算列」を追加するか、SQL で直接計算を行うことをお勧めしますが、非常に複雑な計算を行う場合は、SQL エンジンの方が処理に適していることがわかります。 . これはまた、後で物事を変更することをより良くします。

  3. したがって、SQLを次のように修正します。

    declare @Avgs Table ( location int, type varchar(1), cs int, average int);
    
    insert into @Avgs values (1, 'A', 21, 10),(1, 'B', 57, 18),(1, 'C', 44, 78);
    
    With a as 
         (
         select *, cs * average as compound
         from @Avgs
         )
     , b as 
         (
         Select 
             (max( case when type = 'B' then compound end) +    max( case when type = 'C' then compound end)) /
             (max( case when type = 'B' then cs end) + max( case when type = 'C' then cs end))  as CompoundMath
         from a
        )
    select *
    from a, b
    
  4. これは SSRS のデータセットになります。複合関数は (case when ... end) 内で「when」がロジックで、「then」が結果の後に変更できます。

  5. 新しい行を追加するだけで、カスタム式セットが「Compound Math」という列として設定されます。

于 2013-03-29T18:00:12.823 に答える