3

2 組の売上目標を使用する会社の売上実績分析レポートを作成しようとしています。

  1. 既存の顧客の販売目標 - アカウント番号で識別され、顧客ごとに設定された目標が毎月設定されます。各顧客は営業担当者に割り当てられているため、その担当者の既存の販売目標の合計を簡単に計算できます。独自のテーブルに格納されます。

  2. 新規ビジネスの売上目標 - これは、各営業担当者が今会計年度に獲得しなければならない新規ビジネスの量をまとめた数値です。月、年、担当者、および金額を識別する列を含む独自のテーブルに格納されます。

私の ETL スクリプトは、毎月の顧客ごとに新しいテーブル行を作成/更新し、顧客の売上、目標、および目標に対する差異を示します。

これらの数値は通年一括なので、新規事業をどのように扱うかが問題です。それらを単にリンクすると、実際の合計ではなく、合計すると、新規顧客の数と金額の倍数である目標になります。

この種の集約が問題を引き起こした同様の経験やプロジェクトを誰かが経験しましたか?

だから私のテーブルSales_Targetsには列があります:

Company, Account Code, Target Type, Target, Cal Year, Cal Month, Month End

データあり:

BWA  P001          Large        40000   2013      7          2013-07-31

私のOther_Targetsテーブルでは、どのアカウントが新しいアカウントになるかまだわからないため、データが一般化されているため、同じ情報からアカウント コードを除いたものがあります。このtarget type表の は「新規」に設定されています。

ダニー

4

1 に答える 1

1

それぞれの実績と目標を含むアカウントを取得したいようです。次に、さらに 2 つの数値を取得します。1. その営業担当者の「その他のターゲット」 2. この営業担当者が取得した新規ビジネスの総数

Sql Server では、外側の select 句内に Select サブクエリをネストできました。また、別のものをネストして、新規顧客の数をカウントできます。最後に、これら 2 つを除算して、アカウントに割り当てられた営業担当者の平均新規顧客ターゲットを取得できます。

以下のクエリのようになりますが、想定される構造の詳細については、この Fiddle を参照してください。

select Account_Code, Cal_YYYYMM, Act_Sales, Sales_Rep
 , coalesce((select sum(Target) from Sales_targets ST 
    where ST.Account_Code=A.Account_Code 
      and ST.Cal_YYYYMM=A.Cal_YYYYMM
      and ST.Sales_Rep=A.Sales_Rep    
   ),0) SPECIFIC_TARGET

 , coalesce((select sum(Target) from Other_targets ST 
    where ST.Cal_YYYYMM=A.Cal_YYYYMM
      and ST.Sales_Rep=A.Sales_Rep    
   ),0) SALESMAN_OTHER_TARGET
 , coalesce((select count(*) from Actual_Sales A2 
    where A2.Cal_YYYYMM=A.Cal_YYYYMM
      and A2.Sales_Rep=A.Sales_Rep   
      and NOT EXISTS 
             (select 1 
              from Sales_Targets ST2
               where ST2.Account_Code=A2.Account_Code 
                 and ST2.Cal_YYYYMM=A2.Cal_YYYYMM
                 and ST2.Sales_Rep=A2.Sales_Rep  
              )
   ),0) SALESMAN_NEW_ACCOUNTS

 , coalesce((select sum(Target) from Other_targets ST 
    where ST.Cal_YYYYMM=A.Cal_YYYYMM
      and ST.Sales_Rep=A.Sales_Rep    
   ),0)
 / coalesce((select count(*) from Actual_Sales A2 
    where A2.Cal_YYYYMM=A.Cal_YYYYMM
      and A2.Sales_Rep=A.Sales_Rep   
      and NOT EXISTS 
             (select 1 
              from Sales_Targets ST2
               where ST2.Account_Code=A2.Account_Code 
                 and ST2.Cal_YYYYMM=A2.Cal_YYYYMM
                 and ST2.Sales_Rep=A2.Sales_Rep  
              )
   ),0) SALES_AVG

from Actual_Sales A
于 2013-07-16T20:24:49.887 に答える