用 Query() 中的月份名称替换月份编号
Replacing the Month Number with the Month Name from a Query()
我在 Google 工作表查询中使用 MONTH 函数按月对数据进行分组。但是,它 returns 0-11 之间的月份数字,我更喜欢看到月份名称。
这是查询
=QUERY(DataAllMonths!A1:B, "SELECT MONTH(A), COUNT(A) WHERE LOWER(B) LIKE '%no empathy%' GROUP BY MONTH(A) LABEL MONTH(A) 'Month', COUNT(A) 'Total'", True)
这 returns 类似于以下内容:
我最终编写了一个客户函数来从 QUERY 中获取结果并将月份名称替换为数字
=returnMonthName(QUERY(DataAllMonths!A1:B, "SELECT MONTH(A), COUNT(A) WHERE LOWER(B) LIKE '%no empathy%' GROUP BY MONTH(A) LABEL MONTH(A) '', COUNT(A) ''", True), 1)
这显示了以下结果
这是脚本
function returnMonthName(data, col) {
// var data = [[1, 100], [2, 200], [3, 300]];
// var col = 1;
var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
var retArray = [["Month","Total"]];
var total = 0;
// var retArray = [];
var n = 0;
var dataLen = data.length;
for (n = 0; n < dataLen; n++) {
retArray.push([months[data[n][0]], data[n][1]]);
total+= data[n][1];
}
retArray.push(["Total", total]);
return retArray;
}
我相信有一种方法可以在不依赖自定义函数的情况下做到这一点,或许可以使用数组公式。有没有人有解决办法。
试试这个:
function lfuncko(m) {
return [...Array.from(Array(12).keys(), x => Utilities.formatDate(new Date(2022, x, 15), Session.getScriptTimeZone(), "MMM"))][m]
}
仅通过公式,尝试
=QUERY({arrayformula(eomonth(DataAllMonths!A1:A,0)),DataAllMonths!B1:B}, "SELECT (Col1), COUNT(Col1) WHERE LOWER(Col2) LIKE '%no empathy%' GROUP BY (Col1) LABEL (Col1) 'Month', COUNT(Col1) 'Total'", True)
并将列的格式更改为 MMM
参考
我在 Google 工作表查询中使用 MONTH 函数按月对数据进行分组。但是,它 returns 0-11 之间的月份数字,我更喜欢看到月份名称。
这是查询
=QUERY(DataAllMonths!A1:B, "SELECT MONTH(A), COUNT(A) WHERE LOWER(B) LIKE '%no empathy%' GROUP BY MONTH(A) LABEL MONTH(A) 'Month', COUNT(A) 'Total'", True)
这 returns 类似于以下内容:
我最终编写了一个客户函数来从 QUERY 中获取结果并将月份名称替换为数字
=returnMonthName(QUERY(DataAllMonths!A1:B, "SELECT MONTH(A), COUNT(A) WHERE LOWER(B) LIKE '%no empathy%' GROUP BY MONTH(A) LABEL MONTH(A) '', COUNT(A) ''", True), 1)
这显示了以下结果
这是脚本
function returnMonthName(data, col) {
// var data = [[1, 100], [2, 200], [3, 300]];
// var col = 1;
var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
var retArray = [["Month","Total"]];
var total = 0;
// var retArray = [];
var n = 0;
var dataLen = data.length;
for (n = 0; n < dataLen; n++) {
retArray.push([months[data[n][0]], data[n][1]]);
total+= data[n][1];
}
retArray.push(["Total", total]);
return retArray;
}
我相信有一种方法可以在不依赖自定义函数的情况下做到这一点,或许可以使用数组公式。有没有人有解决办法。
试试这个:
function lfuncko(m) {
return [...Array.from(Array(12).keys(), x => Utilities.formatDate(new Date(2022, x, 15), Session.getScriptTimeZone(), "MMM"))][m]
}
仅通过公式,尝试
=QUERY({arrayformula(eomonth(DataAllMonths!A1:A,0)),DataAllMonths!B1:B}, "SELECT (Col1), COUNT(Col1) WHERE LOWER(Col2) LIKE '%no empathy%' GROUP BY (Col1) LABEL (Col1) 'Month', COUNT(Col1) 'Total'", True)
并将列的格式更改为 MMM