执行超过5项措施的独特计数

时间:2016-06-07 13:47:34

标签: sql-server tsql powerpivot slicers

我需要使用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

1 个答案:

答案 0 :(得分:0)

我通过在PowerPivot中执行此操作来解决此问题。谢谢你的帮助。