簡體   English   中英

使用SQL和Tableau進行方差分析

[英]Variance Analysis with SQL and Tableau

這是情況。 現在,我們有兩個數據庫。 數據庫A由我的部門使用。 我們每季度將數據輸入到各種表(基於Web的前端)中。 一旦該活動完成,所有數據將被推入數據庫B(整個業務的存儲庫)上的相應表中。 我並沒有參與將這些數據從數據庫A推送到數據庫B的工作,我有點不清楚首先發生了多少方差,但是,我的任務是改進隨后發生的方差分析活動。 某個地方的某個IT人員在某個時候設置了一個過程,該過程運行並轉儲方差分析表中的數據(然后將其提取到excel工作表中),並按以下方式進行設置:

碎桌

ID A.Col A B.Col A Flag Col A A.Col B B.Col B Flag Col B 1 Yellow Yellow 0 5 5 0 2 Yellow Green 1 3 2 1 3 Blue Blue 0 7 7 0 4 Red Blue 1 4 2 1 5 Yellow Red 1 1 3 1

我們嘗試對其進行差異分析的表之一,其中有40列,而產生的差異分析表中包含120+列:數據庫a中的列,數據庫b中的列以及指示是否存在兩列之間的差異(如果沒有差異,則為0;如果有差異,則為1)。

您可以想象,就我可以實現的可視化而言,從Excel文件將此摘錄導入到Tableau中是非常有限的。 我可以訪問數據庫A和數據庫B的后端,並且實際上可以將Tableau直接連接到各自數據庫中的表(而不是依賴excel提取或excel提取來自的表)並使用自定義SQL以所需的方式提取數據,並希望有一種使用SQL的方法來實現不同的表布局,如下所示:

更好的桌子

ID Flag Name Value A Value B 2 Flag A Yellow Green 2 Flag B 3 2 4 Flag A Red Blue 4 Flag B 4 2 5 Flag A Yellow Red 5 Flag B 1 3

理想情況下,如上所述,這種新布局將能夠排除沒有差異的任何行/列,但是如果無法實現,我很樂意增加一個名為“標志值”的列,過濾掉零。

因此,我將如何在SQL中編寫select語句來解決這個問題:

Database A

ID Col A Col B 1 Yellow 5 2 Yellow 3 3 Blue 7 4 Red 4 5 Yellow 1

Database B

ID Col A Col B 1 Yellow 5 2 Green 2 3 Blue 7 4 Blue 2 5 Red 3

進入更好的表,以便我實際上可以在Tableau中以有意義的方式使用此數據? 非常感謝您的幫助,Stack Overflow SQL專家!

我的方法是使用包含聯合的嵌套查詢。 盡管我經常發現語法很麻煩,尤其是當表有很多列時,您可能可以使用數據透視/取消透視來實現。

而是嘗試類似:

MS SQL服務器

SELECT a.ID, [Flag Name], [Value A], [Value B]
FROM (SELECT a.ID
          , [Flag Name] = CASE WHEN a.ColA != b.ColA THEN 'Flag A' ELSE NULL END
          , a.ColA [Value A]
          , b.ColA [Value B]
    FROM TableA a
    JOIN TableB b on a.ID = b.ID
    UNION ALL 
    SELECT b.ID
         , [Flag Name] = CASE WHEN a.ColB != b.ColB THEN 'Flag B' ELSE NULL END
         , CAST(a.ColB AS VARCHAR(1)) [Value A]
         , CAST(b.ColB AS Varchar(1)) [Value B]
    FROM TableA a
    JOIN TableB b on a.ID = b.ID
) a 
WHERE [Value A] != [Value B]
ORDER BY ID

的MySQL

SELECT a.ID, `Flag Name`, `Value A`, `Value B`
FROM (SELECT a.ID
          , CASE WHEN a.ColA != b.ColA THEN 'Flag A' ELSE NULL END AS`Flag Name`
          , a.ColA `Value A`
          , b.ColA `Value B`
    FROM TableA a
    JOIN TableB b on a.ID = b.ID
    UNION ALL 
    SELECT b.ID
         , CASE WHEN a.ColB != b.ColB THEN 'Flag B' ELSE NULL END AS `Flag Name` 
         , CAST(a.ColB AS CHAR(1)) `Value A`
         , CAST(b.ColB AS CHAR(1)) `Value B`
    FROM TableA a
    JOIN TableB b on a.ID = b.ID
) a 
WHERE `Value A` != `Value B`
ORDER BY ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM