TSQL を使用して、SSMS 2012 でクエリを作成し、メジャーごとに charge_log_date の個別のカウントを計算する必要があります。この charge_log_date フィールドは smalldatetime (時間は「00:00:00」として格納されます) であるため、日数のみが重要です。
このデータセットは、メジャーごとに 1 つずつ、合計 5 つのスライサーで PowerPivot テーブルを設定するために使用されます。これらの措置のタイトルは次のとおりです。
payor_family, company_name, base_type, base_state, payor_code
ユーザーがこれらのスライサーのいずれかをクリックすると、この charge_log_day_count は、クリックされた日数/メジャーの個別の数をカウントする必要があります。そのため、1 つの payor_family のみをクリックし、他のスライサーをクリックしない場合、データセットにはその payor_family のみのカウントを含める必要があります。これは単純なケースです。ただし、複数のスライサーをクリックする場合は、選択した各スライサー メジャーのカウントをデータセットに含める必要があります。
これまでに行ったことは、これら 5 つのメジャーのそれぞれのカウントを格納するルックアップ テーブルを作成することでした。行ごとに 1 つのメジャー値があり、NULL は他の値を表します。
質問:
このテーブルをメイン データセットに結合して、関連するカウントのみを含めるにはどうすればよいですか? データを含むサンプル テーブルを次に示します。
create table #charge_log_dates
(
payor_family varchar(5),
company_name varchar(5),
base_type varchar(5),
base_state varchar(5),
payor_code varchar(5),
ct int
)
insert #charge_log_dates values('PF1',NULL,NULL,NULL,NULL,5)
insert #charge_log_dates values('PF2',NULL,NULL,NULL,NULL,10)
insert #charge_log_dates values('PF3',NULL,NULL,NULL,NULL,25)
insert #charge_log_dates values(NULL,'CN1',NULL,NULL,NULL,3)
insert #charge_log_dates values(NULL,'CN2',NULL,NULL,NULL,8)
insert #charge_log_dates values(NULL,'CN3',NULL,NULL,NULL,18)
insert #charge_log_dates values(NULL,NULL,'BT1',NULL,NULL,5)
insert #charge_log_dates values(NULL,NULL,'BT2',NULL,NULL,1)
insert #charge_log_dates values(NULL,NULL,'BT3',NULL,NULL,6)
insert #charge_log_dates values(NULL,NULL,NULL,'BS1',NULL,9)
insert #charge_log_dates values(NULL,NULL,NULL,'BS2',NULL,10)
insert #charge_log_dates values(NULL,NULL,NULL,'BS3',NULL,30)
insert #charge_log_dates values(NULL,NULL,NULL,NULL,'PC1',15)
insert #charge_log_dates values(NULL,NULL,NULL,NULL,'PC2',15)
insert #charge_log_dates values(NULL,NULL,NULL,NULL,'PC3',45)
SELECT * from #charge_log_dates
drop table #charge_log_dates
こちらが私のメインテーブルです。これは、1 つのスライサーのみを選択した非常に単純な場合もあれば、非常に複雑な場合もあることに注意してください。(実際には、このテーブルはpayor_family、company_name、base_type、base_state、およびpayor_codeでグループ化されているため、重複するべきではないのに、重複する値を持つ行がいくつかあることに気付きました)。
create table #main (
payor_family varchar(5),
company_name varchar(5),
base_type varchar(5),
base_state varchar(5),
payor_code varchar(5),
measure1 int,
measure2 int,
measure3 int
)
insert #main values('PF1',NULL,NULL,NULL,NULL,45,14,18)
insert #main values('PF2',NULL,NULL,NULL,NULL,52,34,13)
insert #main values('PF3',NULL,NULL,NULL,NULL,10,14,12)
select * from #main
truncate table #main
insert #main values(NULL,'CN1',NULL,NULL,NULL,9,9,18)
insert #main values(NULL,'CN2',NULL,NULL,NULL,13,9,18)
select * from #main
truncate table #main
insert #main values('PF1','CN2','BT3','BS3','PC1',41,14,18)
insert #main values('PF2','CN1','BT1','BS3','PC1',42,15,18)
insert #main values('PF3','CN1','BT3','BS3','PC1',43,16,18)
select * from #main
drop table #main
これは、出力が必要なものです。最高レベルから最も細かい階層までの階層は、payor_family、company_name、base_type、base_state、payor_code です。これは、payor_family のみが選択されている場合、一致する payor_family を含む行からのカウントのみが表示されることを意味します。ただし、payor_code は最も粒度が高いため、他のスライサーで何を選択したかに関係なく、一致する payor_code を含む行からカウントが取得されます。
payor_family company_name base_type base_state payor_code measure1 measure2 measure3 ct
PF1 NULL NULL NULL NULL 45 14 18 5
PF2 NULL NULL NULL NULL 52 34 13 10
PF3 NULL NULL NULL NULL 10 14 14 25
NULL CN1 NULL NULL NULL 9 9 18 3
NULL CN2 NULL NULL NULL 13 9 18 8
PF1 CN2 BT3 BS3 PC1 41 14 18 15
PF2 CN2 BT1 BS3 PC1 42 15 18 15
PF3 CN2 BT3 BS3 PC1 43 16 18 15