如何在Power BI中通过分隔符将多个列拆分为多行?

时间:2017-10-27 12:31:10

标签: sql google-bigquery powerbi

我将以下表结构导入Microsoft Power BI:

enter image description here

如何拆分列ItemIDQuantity,以便用逗号分隔的值对应,例如

enter image description here

该表存储在Google BigQuery数据库中,因此如果我的问题可以通过(标准)SQL查询解决,我也很高兴知道这一点。

2 个答案:

答案 0 :(得分:0)

如果您对SQL答案感到满意,那么PIVOT TABLES就是您的选择。

它们是将行转换为列的好方法,而且比对同一个表执行多个连接要麻烦得多。

一旦你知道要搜索什么,我就不会在这里发布完整版本,因为它已经有详细记录。

祝你好运。

答案 1 :(得分:0)

以下是BigQuery Standard SQL

  
#standardSQL
WITH `project.dataset.table` AS (
  SELECT '1' TransactionID, '1,2,3' ItemID, '1,1,1' Quantity, 6500 revenue UNION ALL
  SELECT '2', '1,3', '1,2', 4000 UNION ALL
  SELECT '3', '1,2', '', 3000 
)
SELECT TransactionID, ItemID, Quantity, revenue
FROM `project.dataset.table`, 
UNNEST(SPLIT(ItemId)) AS ItemID WITH OFFSET pos1,
UNNEST(SPLIT(Quantity)) AS Quantity WITH OFFSET pos2
WHERE pos1 = pos2 OR Quantity = ''
ORDER BY TransactionID

输出为

TransactionID   ItemID  Quantity    revenue  
1               1       1           6500     
1               2       1           6500     
1               3       1           6500     
2               1       1           4000     
2               3       2           4000     
3               1                   3000     
3               2                   3000       

只需一个方向,您需要调整此项以处理案例,例如当项目数量与数量数量不对应时等。

例如,如下所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '1' TransactionID, '1,2,3' ItemID, '1,11,111' Quantity, 6500 revenue UNION ALL
  SELECT '2', '1,3', '1111', 4000 UNION ALL
  SELECT '3', '1,2', '', 3000 
)
SELECT 
  TransactionID, ItemID,
  IFNULL((SELECT q
    FROM UNNEST(SPLIT(Quantity)) AS q WITH OFFSET pos2 
    WHERE pos2 = pos
  ), '') Quantity,
  revenue
FROM (
  SELECT TransactionID, ItemID, Quantity, revenue , pos
  FROM `project.dataset.table`, 
  UNNEST(SPLIT(ItemId)) AS ItemID WITH OFFSET pos
)
ORDER BY TransactionID, pos