Google Sheets Pivot Table 按 ID 合并空白
Google Sheets Pivot Table Merge Empty by ID
所以我知道空单元格最不适合生成数据透视表 tables 但是我有一个巨大的 csv 是这样生成的:
ID
QTY
ITEM
DATE
800170
1
Donut
5/21/2022
800170
1
Bun
800170
1
Cake
800169
1
Sandwich
5/20/2022
800169
1
Cake
800169
2
Donut
800168
1
Donut
5/21/2022
800168
1
Cookie
800168
1
Tea
800167
1
Donut
5/22/2022
800167
1
Tea
这是从中生成的枢轴table。
我想知道是否有办法通过 ID“合并”日期,因为 ID 总是具有相同的日期?
期望输出:
这是我测试的 link google sheet: https://docs.google.com/spreadsheets/d/1Loe3dCe4jqj14ZD7alYkb0IhkysOpArk5ZORtIahjdk/edit?usp=sharing
尝试:
=ARRAYFORMULA(QUERY({A2:C, VLOOKUP(ROW(D2:D), IF(D2:D<>"", {ROW(D2:D), D2:D}), 2)},
"select Col1,sum(Col2) where Col2>0 group by Col1 pivot Col4"))
或者如果你想要总数:
=ARRAYFORMULA({QUERY({A:C, VLOOKUP(ROW(D:D), IF(D:D<>"", {ROW(D:D), D:D}), 2)},
"select Col1,sum(Col2) where Col2>0 group by Col1 pivot Col4"),
QUERY({A:B}, "select sum(Col2) where Col2>0 group by Col1 label sum(Col2)'Grand Total'");
{"Grand Total", TRANSPOSE(MMULT(TRANSPOSE(QUERY(QUERY({A:C,
VLOOKUP(ROW(D:D), IF(D:D<>"", {ROW(D:D), D:D}), 2)},
"select sum(Col2) where Col2>0 group by Col1 pivot Col4"), "offset 1", )*1),
SEQUENCE(COUNTUNIQUE(A2:A), 1, 1, ))), SUM(B:B)}})
或者如果你真的喜欢 pivot table 设计:
demo sheet
遗憾的是,Pivot table 没有根据 ID 合并数据的功能。您可以做的是填充原始数据的日期列。
我在这里创建了一个脚本,它将根据之前的值填充数据。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('Fill Dates', 'fillDates').addToUi()
}
function fillDates(){
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getSheetByName("Sheet1");//Change this to your sheet name
var dLastRow = ss.getRange("D"+(ss.getLastRow()+1)).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
var startRow = 2;
var dateCol = 4
var range = ss.getRange(startRow, dateCol, dLastRow, 1);
var data = range.getValues();
var temp = '';
data.forEach(date =>{
if(date[0] != ''){
temp = date[0];
}else{
date[0] = temp
}
})
range.setValues(data)
}
转到 Apps 脚本、select Extensions > Apps 脚本 .复制粘贴上面的代码,保存脚本并刷新电子表格。该脚本将在您的电子表格中创建一个自定义菜单,您可以单击该菜单以 运行 该脚本。
演示:
输出:
如果您有任何问题或疑问,请告诉我。
参考文献:
所以我知道空单元格最不适合生成数据透视表 tables 但是我有一个巨大的 csv 是这样生成的:
ID | QTY | ITEM | DATE |
---|---|---|---|
800170 | 1 | Donut | 5/21/2022 |
800170 | 1 | Bun | |
800170 | 1 | Cake | |
800169 | 1 | Sandwich | 5/20/2022 |
800169 | 1 | Cake | |
800169 | 2 | Donut | |
800168 | 1 | Donut | 5/21/2022 |
800168 | 1 | Cookie | |
800168 | 1 | Tea | |
800167 | 1 | Donut | 5/22/2022 |
800167 | 1 | Tea |
这是从中生成的枢轴table。
我想知道是否有办法通过 ID“合并”日期,因为 ID 总是具有相同的日期?
期望输出:
这是我测试的 link google sheet: https://docs.google.com/spreadsheets/d/1Loe3dCe4jqj14ZD7alYkb0IhkysOpArk5ZORtIahjdk/edit?usp=sharing
尝试:
=ARRAYFORMULA(QUERY({A2:C, VLOOKUP(ROW(D2:D), IF(D2:D<>"", {ROW(D2:D), D2:D}), 2)},
"select Col1,sum(Col2) where Col2>0 group by Col1 pivot Col4"))
或者如果你想要总数:
=ARRAYFORMULA({QUERY({A:C, VLOOKUP(ROW(D:D), IF(D:D<>"", {ROW(D:D), D:D}), 2)},
"select Col1,sum(Col2) where Col2>0 group by Col1 pivot Col4"),
QUERY({A:B}, "select sum(Col2) where Col2>0 group by Col1 label sum(Col2)'Grand Total'");
{"Grand Total", TRANSPOSE(MMULT(TRANSPOSE(QUERY(QUERY({A:C,
VLOOKUP(ROW(D:D), IF(D:D<>"", {ROW(D:D), D:D}), 2)},
"select sum(Col2) where Col2>0 group by Col1 pivot Col4"), "offset 1", )*1),
SEQUENCE(COUNTUNIQUE(A2:A), 1, 1, ))), SUM(B:B)}})
或者如果你真的喜欢 pivot table 设计:
demo sheet
遗憾的是,Pivot table 没有根据 ID 合并数据的功能。您可以做的是填充原始数据的日期列。
我在这里创建了一个脚本,它将根据之前的值填充数据。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('Fill Dates', 'fillDates').addToUi()
}
function fillDates(){
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getSheetByName("Sheet1");//Change this to your sheet name
var dLastRow = ss.getRange("D"+(ss.getLastRow()+1)).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
var startRow = 2;
var dateCol = 4
var range = ss.getRange(startRow, dateCol, dLastRow, 1);
var data = range.getValues();
var temp = '';
data.forEach(date =>{
if(date[0] != ''){
temp = date[0];
}else{
date[0] = temp
}
})
range.setValues(data)
}
转到 Apps 脚本、select Extensions > Apps 脚本 .复制粘贴上面的代码,保存脚本并刷新电子表格。该脚本将在您的电子表格中创建一个自定义菜单,您可以单击该菜单以 运行 该脚本。
演示:
输出:
如果您有任何问题或疑问,请告诉我。