本文将介绍如何使用 Tableau 逆透视 SQL 表列,并附带一个示例。虽然 Tableau Desktop 没有直接逆透视 SQL 数据库表的功能,但我将通过一个简单的示例来演示。
您可以使用以下查询从 Adventure Works 数据库获取相同的数据。
SELECT Name,[2011], [2012], [2013], [2014] FROM
(
SELECT PROD.Name,YEAR(OrdHead.OrderDate) as OrderYear,
SUM(Details.OrderQty) AS OrderQuantity FROM Sales.SalesOrderDetail AS Details
INNER JOIN Production.Product AS PROD ON Details.ProductID = PROD.ProductID
INNER JOIN Sales.SalesOrderHeader AS OrdHead
ON Details.SalesOrderID = OrdHead.SalesOrderID
GROUP BY PROD.Name,YEAR(OrdHead.OrderDate)
) AS SOURCE
PIVOT( SUM(OrderQuantity) FOR OrderYear IN ([2011], [2012], [2013], [2014])
) AS Result
ORDER BY Name
下面的截图将展示表中的数据,共有 266 条记录。首先,将 Tableau 连接到 Microsoft SQL Server。然后,从列表中选择所需的数据库。最后,拖放透视表以查看其中的数据。
Tableau 逆透视 SQL 表列
如果选择所有列,请单击向下箭头查看上下文菜单中的选项。您会看到一个“合并不匹配的字段”选项。

“合并不匹配的字段”选项会选择第一个非空值,而不是进行逆透视数据。

转到“数据”菜单,选择“转换为自定义 SQL”选项,或单击表名称旁边的向下箭头并选择“转换为自定义 SQL”选项。

我们必须使用 UNPIVOT 函数编写 SQL 查询来转换 Tableau 透视表列的数据。然后,单击“预览结果”选项以查看输出。
SELECT [Product Name]
,[Order Year]
,[Order Quantity]
FROM [dbo].[PIVOT Transformation] [PIVOT Transformation]
UNPIVOT
(
[Order Quantity] FOR [Order Year]
IN (
[PIVOT Transformation].[2011],
[PIVOT Transformation].[2012],
[PIVOT Transformation].[2013],
[PIVOT Transformation].[2014])
) AS [UNPIVOT TABLE]

关闭所有窗口以查看输出。

我将设计一个简单的水平堆积条形图来显示逆透视后的数据。

Tableau 使用透视选项进行逆透视
在这里,有一个透视选项可以将表列转换为逆透视数据。但是,此选项仅适用于文本、CSV 或 Excel 文件。对于数据库,您必须编写自己的自定义 SQL 查询。在本节中,我们将使用透视选项来执行逆透视表列。
下面的截图显示了文本文件中的数据。

拖放 CSV 文件以查看其中的数据。有关 Tableau 连接信息的步骤,请参阅“连接到逗号分隔文本文件”一文。接下来,单击“Unpivot Source.csv”旁边的向下箭头,然后选择“第一行字段名”选项。
使用透视选项进行逆透视
选择所有列,然后单击向下箭头以查看上下文菜单中的选项。请选择“透视”选项。有关数据库输入的详细信息,请参阅“使用自定义查询”一文。

我们获取了数据;但是,我们需要将列重命名为更有意义的名称。因此,右键单击列将打开上图中显示的上下文菜单。在此,我们必须选择“重命名”选项来编写自定义名称。
对剩余的列执行相同的操作。

我将设计一个简单的 Tableau 图表,向您展示从逆透视表列中获取的数据。
