1

Sales テーブルと割引テーブルがあります。

主なデータセットは、1 人あたりの売上を含む Sales テーブルです。

各人は 1 つのプロジェクトにのみ関連付けられ、各プロジェクトには 1 人の監督者しかいません。

2 番目のデータセット - 割引テーブルには、各プロジェクトの割引エントリがあります

Sales Table

Supervisor  | Company   |Project    |Person |Sale
Adam        | CompanyA  |CompA-01   |Amy    |100
Adam        | CompanyA  |CompA-02   |Beth   |200
Adam        | CompanyA  |CompA-02   |Cary   |200
Jenny       | CompanyA  |CompA-05   |Dawn   |300
Jenny       | CompanyA  |CompA-05   |Emma   |400



Discounts table

Company | Project   |Month  |Amount
CompanyA| CompA-02  |Jan    |500
CompanyA| CompA-02  |Feb    |500
CompanyA| CompA-05  |Jan    |1000

割引フィールドが次のように計算されるレポートを表示したい

Supervisor  | Company   |Project    |Person |Sales  |Discounts 
Adam                            
          CompanyA                           500       1000 <---HELP CALCULATE THIS
                         CompA-01            100       0
                                      Amy    100
                         CompA-02            400       1000
                                      Beth   200
                                      Cary   200
...
...
TOTAL                                        12000     2000                                                            

レポートに次の行グループがあります。

Supervisor Group
---Company Group
-----Project Group
----------Details

次のように、プロジェクト グルーピング レベルで割引列を計算できます。

=Code.SumLookup(LookupSet(Fields!Project.Value,Fields!Project.Value,Fields!amount.Value,"Discounts"))

次に、合計レベルで割引を次のように計算します。

=Sum(Fields!amount.Value, "Discounts")

会社レベルと監督者レベルでの割引の合計を計算する方法を理解するのに助けが必要です。


多くの人が私のクエリが問題であると示唆したので、先に進んで、私が直面している問題を正確にデモしたかっただけです。

提案されたように、結合を使用してクエリを再設計しました

SELECT Sales.Supervisor, Sales.Company, Sales.Project, Sales.Person, Sales.SaleAmt, SUM(Discounts.Amount)
FROM Sales 
LEFT OUTER JOIN Discounts 
ON Sales.Company = Discounts.Company 
AND Sales.Project = Discounts.Project 
group by Sales.Supervisor, Sales.Company, Sales.Project, Sales.Person, Sales.SaleAmt, Discounts.Amount

のようなレポートを作成しました

ここに画像の説明を入力

レポートは次のようにプレビューされますここに画像の説明を入力

割引値がすべて間違って合計されていることに注意してください。これを修正するにはどうすればよいですか?

4

3 に答える 3

1

あなたは自分自身のためにあまりにも多くの仕事をしている私見コードにそれをさせています。SSRS は、現在のグループのレベルを理解して組み込まれています。EG: Sum(Discount) のような関数を含む詳細レベルがある場合、「プロジェクト」グループを追加し、「ヘッダー」行を追加することを選択します。その計算を「詳細」行の上の新しい行に入れると、他のデータでグループ化されます。次に、プロジェクトを会社ごとにグループ化し、会社をスーパーバイザーごとにグループ化できます。その後、別の行に同じ計算を追加すると、そのレベルを知るだけで異なる値が得られます。

于 2013-07-09T19:45:03.593 に答える
0

これら 2 つのデータセットを結合する複雑な式やネストされたクエリを記述するよりも、ルックアップに必要なデータを取得する別のデータセットを追加する方が簡単です。たとえば、次のような CompanyDiscounts という名前のデータセットを 1 つ追加します。

select Company, sum(Amount) as Discount
from DiscountsTable

これで、ルックアップ関数を追加して、会社レベルでの合計割引を取得できるようになりました。

=Lookup(Fields!Company.Value, Fields!Company.Value, Fields!Discount.Value, "CompanyDiscounts")

スーパーバイザ レベルについて、これらの手順を繰り返すことができます。

通常、このような方法はお勧めしませんが、データ構造の性質上、この種の回避策が適しています。理想的には、関連するすべてのデータを 1 つのクエリで結合し、グループ化集計を使用してテーブルに入力できるように、割引が関連付けられたセール ID を用意します。

于 2013-07-09T18:55:04.313 に答える
0

以下のクエリを使用してください

SELECT Sales.Supervisor, 
       Sales.Company, 
       Sales.Project, 
       Sales.Person, 
       Sales.Sale, 
       Discounts.Amount
FROM  Sales 
LEFT OUTER JOIN Discounts ON Sales.Company = Discounts.Company 
                          AND Sales.Project = Discounts.Project
GROUP BY Sales.Supervisor, 
         Sales.Company, 
         Sales.Project, 
         Sales.Person, 
         Sales.Sale, 
         Discounts.Amount

データセットで、表形式モードを使用してレポートを生成できます。私はそれを試してみましたが、うまくいきました。

于 2013-07-10T10:22:53.320 に答える