如何将聚合的计算列合并为一个 table
how to consolidate aggregated calculated columns into one table
我必须计算用于报告的聚合列并将它们全部放在一个 table 中。我创建了一个参考日期 table 来比较日期。
我的来源 table 看起来像(模拟数据)
memberid startdate enddate
1 2017-05-23 2017-06-21
2 2017-05-01 2017-06-17
3 2017-04-23 2017-05-28
4 2017-06-01 2017-07-21
5 2017-04-30 2017-05-27
我必须每周进行计算,这将是 tableau 中的一种累积计算。例如,如果我想 运行 2017-06-04 的报告,那么我必须计算前一周的数据。
每周应该有以下指标。
1. how many members are new this week? count(Id's) where startdate >= 2017-05-28
2. how many are discharged this week? count(Id's) where enddate=2017-05-27
3. how many are still in service? count(ID's) where startdate<=2017-05-28 and enddate >= 2017-05-28
我为 #1 和 #2 创建了聚合计算,但找不到 #3。
下面的计算是针对#1 和#2 完成的。
--新成员
1.select DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE)) as weekdate,count(distinct memberid) as newmembers from #tempauth t
join [dbo].[Calendardays] c
on dateadd(dd,-7,dateadd(dd,-1,weekstart)) =DATEADD(DAY, 1 - DATEPART(WEEKDAY, startdate), CAST(startdate AS DATE))
group by DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE))
--出院
2.select DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE)) as weekdate,count(distinct memberid) as dischargedmembers from #tempauth t
join [dbo].[Calendardays] c
on dateadd(dd,-8,dateadd(dd,-1,weekstart)) =t.enddate
group by DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE))
谁能帮我找出仍在服役的会员(#3)?另外,我必须计算这三个计算并在我的报告中放入单个 table。我该怎么做?
您可以计算前几周的相关日期(例如在 CTE 中)并将结果return作为子查询:
with cte as
(
select distinct
DATEADD(dd, -(DATEPART(dw, pkdate) - 1), pkdate) as FirstDayOfWeek,
DATEADD(DAY, 7 - (DATEPART(dw, pkdate)), pkdate) as LastDayOfWeek
from dbo.Calendardays
where pkdate <= dateadd(day, -8, getdate()) --> Calendardays until last week
)
select (select count(distinct memberid)
from #tempauth t
where t.StartDate >= cte.FirstDayOfWeek) as NewMembers,
(select count(distinct memberid)
from #tempauth t
where ...) as DischargedMembers
(select count(distinct memberid)
from #tempauth t
where ...) as MembersStillInService
from cte;
我必须计算用于报告的聚合列并将它们全部放在一个 table 中。我创建了一个参考日期 table 来比较日期。
我的来源 table 看起来像(模拟数据)
memberid startdate enddate
1 2017-05-23 2017-06-21
2 2017-05-01 2017-06-17
3 2017-04-23 2017-05-28
4 2017-06-01 2017-07-21
5 2017-04-30 2017-05-27
我必须每周进行计算,这将是 tableau 中的一种累积计算。例如,如果我想 运行 2017-06-04 的报告,那么我必须计算前一周的数据。 每周应该有以下指标。
1. how many members are new this week? count(Id's) where startdate >= 2017-05-28
2. how many are discharged this week? count(Id's) where enddate=2017-05-27
3. how many are still in service? count(ID's) where startdate<=2017-05-28 and enddate >= 2017-05-28
我为 #1 和 #2 创建了聚合计算,但找不到 #3。 下面的计算是针对#1 和#2 完成的。 --新成员
1.select DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE)) as weekdate,count(distinct memberid) as newmembers from #tempauth t
join [dbo].[Calendardays] c
on dateadd(dd,-7,dateadd(dd,-1,weekstart)) =DATEADD(DAY, 1 - DATEPART(WEEKDAY, startdate), CAST(startdate AS DATE))
group by DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE))
--出院
2.select DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE)) as weekdate,count(distinct memberid) as dischargedmembers from #tempauth t
join [dbo].[Calendardays] c
on dateadd(dd,-8,dateadd(dd,-1,weekstart)) =t.enddate
group by DATEADD(DAY, 1 - DATEPART(WEEKDAY, c.pkdate), CAST(c.pkdate AS DATE))
谁能帮我找出仍在服役的会员(#3)?另外,我必须计算这三个计算并在我的报告中放入单个 table。我该怎么做?
您可以计算前几周的相关日期(例如在 CTE 中)并将结果return作为子查询:
with cte as
(
select distinct
DATEADD(dd, -(DATEPART(dw, pkdate) - 1), pkdate) as FirstDayOfWeek,
DATEADD(DAY, 7 - (DATEPART(dw, pkdate)), pkdate) as LastDayOfWeek
from dbo.Calendardays
where pkdate <= dateadd(day, -8, getdate()) --> Calendardays until last week
)
select (select count(distinct memberid)
from #tempauth t
where t.StartDate >= cte.FirstDayOfWeek) as NewMembers,
(select count(distinct memberid)
from #tempauth t
where ...) as DischargedMembers
(select count(distinct memberid)
from #tempauth t
where ...) as MembersStillInService
from cte;