使用 Google 表格根据 ID 拆分字符串中的逗号分隔值
我有一些数据保存在 Google Sheet 中,并与 Google Data Studio 相连。其中一些数据在字符串中以逗号分隔。以上是指向部分数据示例的链接。
我会尽力解释清楚,但这个视频展示了如何使用 Excel 中的 Power Query 解决该问题,这正是我想做的,只不过是在 Google Sheets 中。 YouTube 上的教学视频
在上面的示例表中,我在“数据”选项卡的 A 列中有一个受访者 ID,在“数据”选项卡的 B 列中有一个逗号分隔的字符串。
在 B 列的“解决方案”选项卡中,您会看到我使用以下代码将 B 列的内容从“数据”选项卡拆分并转置到“解决方案”选项卡。
=transpose(split(join(" ",arrayformula(Data!B2:B&",")),","))
这对于将值拆分到该列中的各自行中非常有效
但我需要的是将 ID 映射到“解决方案”选项卡中 A 列中的相应值。就我而言,我无法弄清楚这一点。
任何帮助都将不胜感激。谢谢!
更新:
我还发现了这个自定义函数的脚本,我认为它可以工作,但我不确定如何让它工作。我收到一条错误消息“TypeError:无法读取属性长度...”
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), "♠")), "♦")))
电子表格演示
最近在 Google 表格后端发现了一个隐藏的新函数 FLATTEN(),这为这些问题提供了一个简单的解决方案。 由于您共享的表格是仅供查看的,因此我还制作了一个副本。 链接至副本。
在新选项卡上使用此公式:
=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"))