如何在单个工作表上使用基于时间的筛选器创建多个数据透视表?

时间:2019-02-14 00:21:02

标签: google-sheets

我已将数据按月分为不同的工作表,例如2019年1月,2019年2月,依此类推。

当前,我创建了多个数据透视表来分析特定月份的数据,然后复制并粘贴以供后续月份使用,从而沿途创建新工作表。

我想创建一个工作表来分析基于月份的数据,是否可以为所有数据透视表添加过滤器选项,以便我可以即时查看所选月份的数据?

Spreadsheet link here

1 个答案:

答案 0 :(得分:0)

通过使用INDIRECT(),您可以从单独的工作表中构建一个范围,并使用该范围来选择要查看的工作表以进行进一步分析。可以将其放在由数据验证形成的下拉菜单下。您可以手动输入此工作表列表,也可以使用脚本为您抓取所有列表名称。因此,最后,您将拥有一种动态数据透视表/查询表或所需的任何内容。

=INDIRECT(cell-with-dropdown-menu&"!range-you-want")

示例:

=QUERY({INDIRECT(A1&"!A1:Z")}, "select * where Col1 contains '@', 0)"

这是一个脚本(如果您有兴趣的话)以及一些公式来控制它

  • =SHEET(2)-从左侧返回第二张纸的名称
  • =SHEET(1, TODAY())-从左侧返回第一张工作表的名称,公式应每天更新
  • =SHEETLIST()-返回工作表名称和编号的列表(也可以与TODAY()一起使用)

function SHEET(input) {
try {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets() ;
  if( (input>0) && (input <= sheets.length)) return sheets[(input-1)].getName() ;
  else return "invalid sheet #" ;
}
catch( err ) {
  return "#ERROR!" 
}
}


function SHEETLIST() {
try {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
  var out = new Array( sheets.length+1 ) ;
  out[0] = [ "NAME" , "#GID" ];
  for (var i = 1 ; i < sheets.length+1 ; i++ ) out[i] = 
  [sheets[i-1].getName() , sheets[i-1].getSheetId() ];
  return out
}
catch( err ) {
  return "#ERROR!" 
}
}