2011-09-30 80 views
0

我有一些数据:有没有办法在Excel中产生累积支点?

 
Week Commencing  Channel  Count 
---------------------------------------- 
01/05/2011    C1   02 
01/05/2011    C3   01 
08/05/2011    C2   03 
15/05/2011    C1   01 

将会产生这个支点:

 
Week Commencing  C1  C2  C3 
------------------------------------------ 
01/05/2011   02    01 
08/05/2011     03 
15/05/2011   01 

不过,我想这些值是累积性的,不具有任何空白的:

 
Week Commencing  C1  C2  C3 
------------------------------------------ 
01/05/2011   02  00  01 
08/05/2011   02  03  01 
15/05/2011   03  03  01 

这样我可以在这个数据上创建一个堆积区域图,并显示通道的累积增长。

我可以看到一个可能的解决方案是“填充”源数据,以便所有通道在所有星期内都有一行,并且在数据中还有一个额外的列,即每个通道的计数累积值,一周一周......但是,这是一个额外的复杂性!

回答

0

我能得到这个工作,与一对夫妇的CTE的,一些直角连接和数字的小桌子上的主数据库的帮助:

WITH 
TestData AS (
    SELECT CAST('01 May 2011' AS DATETIME) AS StartDate,'C1' AS Channel, 02 AS COUNT 
    UNION 
    SELECT CAST('01 May 2011' AS DATETIME) AS StartDate,'C3' AS Channel, 01 AS COUNT 
    UNION 
    SELECT CAST('08 May 2011' AS DATETIME) AS StartDate,'C2' AS Channel, 03 AS COUNT 
    UNION 
    SELECT CAST('15 May 2011' AS DATETIME) AS StartDate,'C1' AS Channel, 01 AS COUNT 
), 

Data_CTE AS (
    SELECT Channel, DATEADD(d, -(DATEPART(dw, startdate)+5), CAST(startdate AS DATE)) WeekCommencing, SUM(Count) AS Count 
    FROM TestData 
    GROUP BY DATEADD(d, -(DATEPART(dw, startdate)+5), CAST(startdate AS DATE)), Channel), 

Sub_CTE AS (
    SELECT Dates.RefWeek, Channels.Channel, ISNULL((SELECT Count FROM Data_CTE WHERE Channel = Channels.Channel AND WeekCommencing = Dates.RefWeek) , 0) AS [Count] 
    FROM 
     (SELECT DATEADD(day, number * 7, (SELECT MIN(WeekCommencing) FROM Data_CTE)) RefWeek 
    FROM (SELECT DISTINCT 
        number 
      FROM  master.dbo.spt_values 
      WHERE  name IS NULL 
     ) n 
    WHERE 
     DATEADD(day, number * 7, (SELECT MIN(WeekCommencing) FROM Data_CTE)) <= (SELECT MAX(WeekCommencing) FROM Data_CTE)) AS Dates, 
     (SELECT DISTINCT Channel FROM Data_CTE) AS Channels) 

SELECT 
    RefWeek, Channel, (SELECT SUM(Count) FROM Sub_CTE WHERE Channel = s.Channel AND RefWeek <= s.RefWeek) 
FROM Sub_CTE s 

ORDER BY s.Channel, s.RefWeek 

问题是,它不是真的很理解我我肯定想知道当我回来看看它后面发生的事情是什么时候:) - 哦,好吧。

相关问题