使用 Google 表根据 ID 拆分字符串中的逗号分隔值

Split Comma Separated Values in a String against ID with Google Sheets

Sample Google Sheet

我有一些数据存在于 Google Sheet 中并连接到 Google Data Studio。其中一些数据在字符串中以逗号分隔。以上是部分数据的示例 link。

我会尽我所能解释,但是这个关于如何在 Excel 中使用 Power Query 解决问题的视频正是我想要做的,仅在 Google Sheet秒。 Instructional Video on YouTube

在上面的示例 sheet 中,我在“数据”选项卡的 A 列中有一个受访者 ID,在“数据”选项卡的 B 列中有逗号分隔的字符串。

在 B 列的“解决方案”选项卡中,您会看到我使用以下代码将 B 列的内容从“数据”选项卡拆分和转置到“解决方案”选项卡。 =transpose(split(join(" ",arrayformula(Data!B2:B&",")),",")) 这对于将值拆分到该列中各自的行非常有效

但我需要的是将 ID 映射到“解决方案”选项卡中 A 列中的相应值。对于我的生活,我无法弄清楚。

如有任何帮助,我们将不胜感激。谢谢!

更新:

我还找到了一个自定义函数的脚本,我认为它可以工作,但我不确定如何让它工作。我收到一条错误消息“TypeError: cannot read 属性 length...”

function myFunction(range) {
delimiter = ", ";
targetColumn = 1;
targetColumn2 = 2;

var output2 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
    var s = range[i][targetColumn].split(delimiter);    
    var s2 = range[i][targetColumn2].split(delimiter);
    for(var j=0, jLen=s.length; j<jLen; j++) {
       var output1 = []; 
       for(var k=0, kLen=range[0].length; k<kLen; k++) {
       if(k == targetColumn) {
          output1.push(s[j]);
       } 
       else if (k == targetColumn2) {
           output1.push(s2[j]);
       } else {
            output1.push(range[i][k]);
       }
    }
    output2.push(output1);
  } 
 }
return output2;
}

方法

我会在这里使用自定义函数:

/**
* @customfunction
*/
function covid(range) {
  let delimiter = ", ";
  let newRows = [];
  for (let i in range) {
    let row = range[i];
    let id = row[0];
    let strings = row[1].split(delimiter); // split the responses
    for (let j in strings) {
      newRows.push([id, strings[j]]); // links the responder id to its splitted response
    }
  }
  return newRows; // prints the rows
}

在您的情况下,输入参数是 A1 表示法范围: =covid(Data!A2:B383)

尝试:

=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(IFERROR(SPLIT(B2:B, ","))="",,"♠"&A2:A&"♦"&SPLIT(B2:B, ",")))
 ,,99^99)),,99^99), "♠")), "♦")))

spreadsheet demo

最近发现了一个隐藏在 Google sheet 后端的名为 FLATTEN() 的新函数,这些问题有一个简单的解决方案。 我也复制了一份,因为您共享的 sheet 只能查看。 Link to Copy.

在新标签页上这个公式:

=ARRAYFORMULA(QUERY(SPLIT(FLATTEN(Data!A2:A&"|"&TRIM(SPLIT(Data!B2:B,","))),"|",0,0),"where Col2 is not null"))

稍微复杂一些,但在 Alt.Solution 选项卡上解析为 3 列而不是 2 列。

=ARRAYFORMULA(QUERY(SPLIT(SUBSTITUTE(FLATTEN(Data!A2:A&" ("&TRIM(SPLIT(Data!B2:B,","))),")","")," (",0,0),"where Col3 is not null"))