2017-12-03 166 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()功能檢查前一行 - 你的情況的總和。