数据可视化 - 每月收入趋势,缺少客户数据

时间:2017-12-03 09:12:34

标签: postgresql data-visualization graph-visualization

我有一个概念性的问题,即如何操纵数据来克服某个月内缺少的客户数据,从而在客户开始营业时转发该客户的收入(这是一个关键点)。我总是需要拿最后一个报告,只显示它,否则我会加倍数据。 我每月都会显示收入趋势,问题是如果客户没有向我们展示某个月的收入,那么下个月的收入将不包括该客户的收入。月。所以基本上,即使当月没有收入报告,我也试图弄清楚如何将客户的收入延续到接下来的几个月。我试图在图表中将其可视化。

这是数据库中数据结构的一个示例:

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或使用可视化工具。

如何自动建模(无论是在View还是其他方法中),以便每月应用的数据包含所有客户'最新收入(如果当月该客户的数据不存在,则将其转发)。

1 个答案:

答案 0 :(得分: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()函数检查上一行 - 在您的情况下是总和。