用 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;
}

我相信有一种方法可以在不依赖自定义函数的情况下做到这一点,或许可以使用数组公式。有没有人有解决办法。

Here is a link to a sample sheet.

试试这个:

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

参考

EOMONTH