2017-12-03 128 views
0

我对如何处理数据,以克服一定的一个月中继客户的收入,因为他们开始业务丢失客户数据的概念问题(这是一个关键点) 。我总是需要采取的最后报告,并只显示它,否则我我增加了一倍的数据。 我展示每月收入的趋势,问题是,如果客户不告诉我们在给定月份的收入,以下月收入将不包括从上月该客户的收入。所以基本上,我试图找出如何,即使没有收入已经报道,本月会延长顾客在接下来的几个月的收入。我试图在图表中将其可视化。可视化的数据 - 营收趋势每月有缺失的客户数据

这是在数据库中的数据结构的例子:

date |  customer | revenues 
08/2017  A   100 
08/2017  B   125 
09/2017  A   200 
09/2017  B   200 
10/2017  A   450 
10/2017  B   220 
10/2017  C   180 
11/2017  A   700 
11/2017  C   250 

当前结果:

08/2017 - total 225 - A 100, B 125 
09/2017 - total 400 - A 200, B 200 
10/2017 - total 850 - A 450, B 220, C 180 
11/2017 - total 880 - A 700, C 180 

通缉结果:

08/2017 - total 225 - A 100, B 125 
09/2017 - total 400 - A 200, B 200 
10/2017 - total 850 - A 450, B 220, C 180 
11/2017 - total 1170 - A 700, B 220, C 180 

我不知道我应该我试图使用PostgreSQL或使用可视化工具。

我怎么能自动模拟它(无论是在查看或其他方法),使应用的数据每个月包含了所有客户的最新收入(携带向前,如果数据没有为客户当月存在)。

回答

0

您可以创建与PostgreSQL的这样一个查询视图。

SELECT 
     date_t, 
     COALESCE(sum_a,0) + COALESCE(sum_b,0) + COALESCE(sum_c,0) Total, 
     SUM_A, 
     SUM_B, 
     SUM_C 
FROM 
     (SELECT 
       date_t, 
       CASE 
         WHEN LAG(sum_A,1) OVER (ORDER BY date_t) IS NOT NULL 
           AND sum_A IS NULL 
         THEN LAG(sum_A,1) OVER (ORDER BY date_t) 
         ELSE sum_A 
       END SUM_A, 
       CASE 
         WHEN LAG(sum_B,1) OVER (ORDER BY date_t) IS NOT NULL 
           AND sum_B IS NULL 
         THEN LAG(sum_B,1) OVER (ORDER BY date_t) 
         ELSE sum_B 
       END SUM_B, 
       CASE 
         WHEN LAG(sum_C,1) OVER (ORDER BY date_t) IS NOT NULL 
           AND sum_C IS NULL 
         THEN LAG(sum_C,1) OVER (ORDER BY date_t) 
         ELSE sum_C 
       END SUM_C 
     FROM 
       (select 
         date_t, 
         SUM (CASE 
           WHEN customer = 'A' 
           THEN revenues 
         END) sum_A, 
         SUM (CASE 
           WHEN customer = 'B' 
           THEN revenues 
         END) sum_B, 
         SUM (CASE 
           WHEN customer = 'C' 
           THEN revenues 
         END) sum_C 
       FROM 
         yourtable 
       GROUP BY 
         date_t 
       ) s1 
     )   s2 
ORDER BY 
     date_t; 

DEMO

LAG()功能检查前一行 - 你的情况的总和。