皆様の休日と楽しい時間をお楽しみください。機会があれば、これに返信してください。
SQL Server 2005 を使用しています。
問題は、私たちのチームの 1 つに、一連のイベント/アクションで物事を行うプロセスがあることです。ほとんどの場合、シーケンスごとに 4 つのアクション/イベントです。これらのイベントは修正されています。この DWH を実行すると、各イベントのエントリが個別の行として取得されます。
例 1) 顧客に電話する 2) 保険を販売する 3) PDS を送信する 4) 製品チームに詳細を送信する
すべてのアクションとその定義が Dimension_Point_Code テーブルにあるように設定しました。DWH からのすべてのイベントは Fact として扱われ、Fact_Point に格納されます。
ここでのポイントとは、一連のプロセスにおけるポイントを指します。
したがって、この情報を格納するテーブルは次のようになります
寸法表
CREATE TABLE [tbl_Dim_Point_Code]
(
[Point_Code_Key] [int] IDENTITY(101,1) NOT NULL,
[Point_Code] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Point_Code_TouchPoint] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
ファクト テーブル
CREATE TABLE [tbl_FACT_Point]
(
[Point_Key] [bigint] IDENTITY(100,1) NOT NULL,
[Point_Code_Key] [int] NOT NULL,
[Customer_Number] [varchar](19) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Sale_Date] [datetime] NULL,
[Rep_ID] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
ディメンション内のデータ
INSERT INTO [tbl_Dim_Point_Code]
([Point_Code]
,[Point_Code_TouchPoint])
Select 'CALC' as Point_Code,'Point1' as Point_Code_TouchPoint
UNION
Select 'SELL' as Point_Code,'Point2' as Point_Code_TouchPoint
UNION
Select 'SPDS' as Point_Code,'Point3' as Point_Code_TouchPoint
UNION
Select 'TPRD' as Point_Code,'Point4' as Point_Code_TouchPoint
実際のデータ
INSERT INTO [tbl_FACT_Point]
([Point_Code_Key]
,[Customer_Number]
,[Sale_Date]
,[Rep_ID])
Select 101,'C101501','24-Feb-2012','ABC'
UNION
Select 102,'C101501','24-Feb-2012','ABC'
UNION
Select 103,'C101501','26-Feb-2012','DEF'
UNION
Select 104,'C101501','27-Feb-2012','XYZ'
UNION
Select 101,'C101502','2-Feb-2012','GHI'
UNION
Select 102,'C101502','2-Feb-2012','GHI'
UNION
Select 104,'C101502','4-Feb-2012','XYZ'
UNION
Select 101,'C101503','14-Feb-2012','ABC'
UNION
Select 103,'C101503','20-Feb-2012','ABC'
UNION
Select 104,'C101503','22-Feb-2012','BBC'
UNION
Select 101,'C101501','24-Oct-2012','ABC'
UNION
Select 102,'C101501','24-Oct-2012','ABC'
UNION
Select 103,'C101501','26-Oct-2012','DEF'
UNION
Select 104,'C101501','27-Oct-2012','XYZ'
注意点 1) ご覧のとおり、顧客 C101501 は 2 回電話して販売されました。2) そして、チーム、DWH、SQL Server プロセスなど、関連するすべての処理が毎日行われます。したがって、ほとんどの場合、何が起こるかわかりません。イベント 1 が発生したことだけがわかります。それから数日後、イベント 2 など。3) 101 & 104 は必須イベントです。102 と 103 は発生する場合と発生しない場合があります。販売の有無にかかわらず、チームは製品チームに連絡します。
今 - 私たちが望むのは、エントリがこのテーブルに転置されることです
CREATE TABLE [tbl_Process1_EVENT]
(
[HS_EVENT_KEY] [int] IDENTITY(101,1) NOT NULL,
[Customer_Number] [varchar](19) ,
[Import_Date] [datetime] NULL,
[Point1_Date_Called] [datetime] NULL,
[Point1_PointCode] [varchar](8) ,
[Point1_Rep_Id] [varchar](50) ,
[Point2_Date_Sold] [datetime] NULL,
[Point2_PointCode] [varchar](8) ,
[Point2_Rep_Id] [varchar](50) ,
[Point3_Date_PDSSent] [datetime] NULL,
[Point3_PointCode] [varchar](8) ,
[Point3_Rep_Id] [varchar](50) ,
[Point4_Date_ProdTeamXfer] [datetime] NULL,
[Point4_PointCode] [varchar](8) ,
[Point4_Rep_Id] [varchar](50)
) ON [PRIMARY]
私がしたいのは、このような出力です。
Customer_Number Import_Date Point1_Date_Called Point1_PointCode Point1_Rep_Id Point2_Date_Sold Point2_PointCode Point2_Rep_Id Point3_Date_PDSSent Point3_PointCode Point3_Rep_Id Point4_Date_ProdTeamXfer Point4_PointCode Point4_Rep_Id
C101501 28/02/2012 24/02/2012 CALC ABC 24/02/2012 SELL ABC 26/02/2012 SPDS DEF 27/02/2012 TPRD XYZ
C101502 3/02/2012 2/02/2012 CALC GHI 2/02/2012 SELL GHI NULL NULL NULL 4/02/2012 TPRD ABC
C101503 23/02/2012 14/02/2012 CALC ABC NULL NULL NULL 20/02/2012 SPDS ABC 22/02/2012 TPRD BBC
C101501 28/10/2012 24/10/2012 CALC ABC 24/10/2012 SELL ABC 26/10/2012 SPDS DEF 27/10/2012 TPRD XYZ
同じ顧客に対して新しい販売が行われた場合、C101501 の新しいエントリを含む行にデータを転置します。Import_date は、行が更新された日付です。私が言ったように、処理は毎日行われます。
したがって、この出力の 1 行目の表を詳しく説明できれば、
2012 年 2 月 24 日にイベント CALC が発生します。これについては、2012 年 2 月 25 日にわかっています。25/02 のポイント 1 とポイント 2 はデータで満たされ、ポイント 3 とポイント 4 は空になります。Import_Date - 2012 年 2 月 25 日になります
2012 年 2 月 26 日、ポイント 3 である PDS が送信されます。したがって、同じ行が更新されます。ポイント3のみの更新となります。Import_date は 2012 年 2 月 27 日になります
2012/02/27 ポイント 4 イベントが発生します。したがって、2012 年 2 月 28 日に同じ行がポイント 4 の詳細で更新されます。
この問題について私が考えることができるのはそれだけです。
いつでも助けてください。
楽しい休日をお過ごしください。
PS: 出力の形式に問題がある可能性があります。私はそれをより良くすることができますアドバイスしてください。