我需要使用TSQL在SSMS 2012上编写查询,该查询计算每个度量的charge_log_date的不同计数。此charge_log_date字段是smalldatetime(小时存储为" 00:00:00"),因此只有日期计数很重要。
此数据集将用于填充PowerPivot表,总共有5个切片器,每个度量一个。这些措施的标题是:
payor_family, company_name, base_type, base_state, payor_code
当用户点击任何这些切片器时,此charge_log_day_count需要计算单击的不同天数/度量。因此,如果他们只点击一个payor_family而没有其他切片器,则数据集只需包含该payor_family的计数。这是一个简单的案例。但是,如果他们点击多个切片器,则数据集需要包括所选切片器测量的计数。
到目前为止,我所做的是创建一个查找表,用于存储这5个度量中每个度量的计数,每行有一个度量值,其中NULLS表示其他值。
ASK:
如何将此表连接到主数据集以仅包含相关计数?这是一个包含数据的示例表:
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
这是我的主要表格。请注意,只需选择一个切片器或非常复杂,这可以非常简单。 (我注意到之前我有一些重复值的行,实际上这个表按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
答案 0 :(得分:0)
我通过在PowerPivot中执行此操作来解决此问题。谢谢你的帮助。