对数据进行转置(从列到行)
- 版本 :2022.1 及更高版本
适用于: Tableau Desktop, Tableau Online, Tableau Server
有时,在 Tableau 中分析以交叉表格式存储的数据可能很困难。在处理 Microsoft Excel、文本文件、Google Sheets 和 .pdf 数据源时,您可以对数据进行透视,从交叉表格式转换为分列格式。如果使用其他数据源,您可以使用自定义 SQL 进行透视 (Tableau Desktop)。
例如,假设在三个单独的字段中有按季度针对三个供应商销售的设备数量。您可以对数据进行透视,以便供应商位于一个字段中,销售的设备数量位于另一个字段中。
对数据进行透视
设置数据源之后,在网格中选择两个或更多列。单击列名称旁边的下拉箭头,然后选择“行转置为列”。将创建名为“行转置为列字段名称”和行转置为列字段值”的新列并将其添加到数据源。新列将替换您在创建行转置为列时选择的原始列。
添加到行转置为列
若要将更多数据添加到行转置为列,请选择另一个列,单击列名称旁边的下拉箭头,然后选择“将数据添加到行转置为列”。在开始分析之前,请确保行转置为列列和值按预期方式显示。
若要移除行转置为列,请单击行转置为列列名称旁边的下拉箭头,然后选择“移除行转置为列”。
行转置为列疑难解答
视图中的红色字段以及“数据”窗格中带有感叹号的字段:由于原始字段已替换为新的行转置为列字段,因此对视图中原始字段的任何引用将不再起作用。它们会致字段在视图中变为红色,或在“数据”窗格中的字段旁边显示红色感叹号。
网格中的空值:举例来说,如果在数据提取刷新中移除了行转置为列中使用的所有原始字段,则行转置为列字段中会显示空值。
无行转置为列选项:当您在单一 Microsoft Excel、文本文件、Google Sheets 和 .pdf 数据源中选择两个或更多列时,将出现行转置为列。如果在 Tableau Desktop 中使用其他数据源,您可以使用自定义 SQL 进行透视。
使用自定义 SQL 进行透视 (Tableau Desktop)
即使未使用 Excel、文本文件、Google Sheets 和 .pdf 数据源,您也可以使用自定义 SQL 对数据进行透视。在自定义 SQL 查询中使用 UNION ALL 运算符时,可以获取不同列中的值并将它们放到新列中。
例如,假设您有一个名为 Contest 的表。
Contest
Runner | Start Time | End Time |
---|---|---|
Amanda | 9/3/2016 3:04 PM | 9/3/2016 3:25 PM |
Oscar | 9/3/2016 3:04 PM | 9/3/2016 3:21 PM |
William | 9/3/2016 3:04 PM | 9/3/2016 3:16 PM |
若要在 Tableau 中优化此数据的分析,您可以使用下面的自定义 SQL 查询,对“Start Time”和“End Time”列进行透视,使其值在单个列中。
Select [Runner]
, 'Start' as [Action]
, [Start Time] as [Time]
From [Contest]
Union ALL
Select [Runner]
, 'End' as [Action]
, [End Time] as [Time]
From [Contest]
上述自定义 SQL 查询执行以下操作:
对“Start Time”列标题进行透视,使其转换为一个名为“Start”的字符串值,并将该值添加到一个名为“Action”的新列中。
对“End Time”列标题进行透视,使其转换为一个名为“End”的字符串值,并将该值添加到一个名为“Action”的新列中。
对“Start Time”和“End Time”列进行透视,使其值在一个名为“Time”的新列中。
下表显示了此自定义 SQL 查询的结果。
Runner | Action | Time |
---|---|---|
Amanda | Start | 9/3/2016 3:04 PM |
Oscar | Start | 9/3/2016 3:04 PM |
William | Start | 9/3/2016 3:04 PM |
Amanda | End | 9/3/2016 3:25 PM |
Oscar | End | 9/3/2016 3:21 PM |
William | End | 9/3/2016 3:16 PM |
使用自定义 SQL 进行数据透视
连接到数据。
双击左侧窗格中的“新建自定义 SQL”选项。有关详细信息,请参见连接到自定义 SQL 查询。
在“编辑自定义 SQL”对话框中,复制并粘贴以下自定义 SQL 查询,并将内容替换为关于表的信息:
Select [Static Column]
, 'New Value (from Column Header 1)' as [New Column Header]
, [Pivot Column Values 1] as [New Values]
From [Table]
Union ALL
Select [Static Column]
, 'New Value (from Column Header 2' as [New Column Header]
, [Pivot Column Values 2] as [New Values]
From [Table]
Union ALL
Select [Static Column]
, 'New Value (from Column Header 3' as [New Column Header]
, [Pivot Column Values 3] as [New Values]
From [Table]
如果以下条件为真:
Static Column(静态列): Table(表)中列(维度和度量)的逗号分隔列表,不应该包括在行转置为列中。
New Value (from Column Header 1-3)(新值(来自列标题 1-3)):您为原始列标题提供的新名称,用作行转置为列中的行值。
Pivot Column Values 1-3(行转置为列列值 1-3):需要对其值进行透视以转换成单一列的列。
New Column Header(新列标题):为新列提供的名称,此新列包含“New Value (from Column Header 1-3)”(新值(来自列标题 1-3))中的新行值。
New Values(新值): 为新列提供的名称,此新列包含“Pivot Column Values 1-3”(行转置为列列值 1-3)中的原始值。
Table(表): 连接到的表。
单击“确定”。