【问题标题】:Convert column oriented table to row oriented one将面向列的表转换为面向行的表
【发布时间】:2014-03-19 23:07:11
【问题描述】:

我在 Greenplum 数据库上有一个如下表结构:

希望将其更改为以下结构,以支持 Tableau 上的饼图。

有人可以帮我吗?谢谢!

【问题讨论】:

  • 这称为数据透视表或交叉表。不知道如何在 Greenplum 中做到这一点;在 PostgreSQL 中,您将在 tablefunc 扩展中使用交叉表函数。
  • 您也可以使用 unpivot,但不会给您想要的确切结果。
  • @KrishnrajRana 。 postgres 中似乎没有 unpivot 功能。替代方案是 unnest,但我不能使用 unnest,因为我的 postgres 版本是 8.2。

标签: sql postgresql tableau-api greenplum


【解决方案1】:
  1. Export the table to a CSV file
  2. Install the Tableau Excel add-in
  3. 在 Excel 中打开 CSV 文件并使用加载项重塑数据

【讨论】:

  • 我实际上是将这些数据连接到画面。画面上有没有专门的工具来完成相同的任务
  • 内置 ETL 功能是 Tableau Desktop 经常需要的功能,很可能会出现在该产品的未来版本中,但目前它只是 Excel 加载项。
【解决方案2】:
【解决方案3】:

只是为了确保您了解此 Tableau 功能:

一旦您设计了 SQL select 语句,该语句将按照您希望的方式对数据进行反透视,那么您可以通过编辑数据连接并选择“自定义 SQL”选项来告诉 Tableau 使用它而不是 select *。

在您的情况下,取消透视的通用方法是将多个 select 语句联合在一起,除非您的数据库提供了更有效的替代方案,如 Revanayya 引用的博客条目中所述。

【讨论】:

    【解决方案4】:

    以下内容适用于预先已知的静态指标集:

    SELECT
      t.Date,
      x.Metric,
    
      CASE x.Metric
        WHEN 'metric1' THEN metric1_week
        WHEN 'metric2' THEN metric2_week
      END AS week_val,
    
      CASE x.Metric
        WHEN 'metric1' THEN metric1_13week
        WHEN 'metric2' THEN metric2_13week
      END AS "13week_val"
    
    FROM
      atable AS t
    CROSS JOIN
      (VALUES ('metric1'), ('metric2')) AS x (Metric)
    ;
    

    您可以在上面构建一个dynamic query 来说明未知数量的指标。为此,您需要先读取元数据(可能是 INFORMATION_SCHEMA.COLUMNS 系统视图)来构建动态位,即 VALUES 列表和两个 CASE 表达式,然后再将它们嵌入到查询中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多