【问题标题】:Create chart with disjointed data in Google Sheet在 Google 表格中创建包含脱节数据的图表
【发布时间】:2020-05-10 12:49:59
【问题描述】:

多年来,我有一张包含 3 列(月、计数、金额)的工作表。

2010-01, 10, 20
2010-02, 34, 34
...
2011-01, 30, 43
2011-02, 12, 23
...
2012-01, 45, 33
2012-02, 43, 22

我想为这些年来的每个月创建图表。 所以是一月、二月等的图表。

我可以编写一些脚本。 google chart api (for web) 提供了newDataTable 和setDataTable,它们可以处理脱节的数据。对于谷歌表格中的脚本,似乎只有范围可用于图表。我可以创建虚拟范围(但这只是 DataTable)吗?:-) 关于如何在 Google 表格中执行此操作的任何建议?

** 添加于 2020/05/12 **

我不确定如何进行查询以获取适当的数据集:-(

所以我决定使用脚本来创建一个图表友好的范围。

function setMonthlyStat(sheetName) {

  var ss = SpreadsheetApp.getActive().getSheetByName(sheetName);

  var value1, value2;
  var sourceX, sourceY;
  var row = 13; // number of years
  sourceX = 2; sourceY = 2; // starting x, y

  // continuous monthly value year by year (j*12 = offset by year)
  var stats = new Array(row);
  for (var i=0; i<=row-1; i++) { // vertical
    stats[i] = new Array(24);
    for (var j=0; j<=11; j++) { // horizontal
      // count
      value1 = ss.getRange(sourceX+j+i*12, sourceY).getValue();
      stats[i][j*2] = value1;
      // amount
      value2 =  ss.getRange(sourceX+j+i*12, sourceY+1).getValue();
      stats[i][j*2+1] = value2;
    }
  }
  ss.getRange("L2:AI14").setValues(stats); // the range is not the one in the screenshot
}

注意:ncount = #, namount = $

【问题讨论】:

  • 制作一个真正的新系列?
  • 是的,最后的办法是用图表所需的范围格式以编程方式创建一个新表,我只是想看看是否有办法不执行此步骤并直接从原始数据集:-)
  • 我没有做过很多图表,但是你有什么理由想要使用脚本吗?查询或类似功能不会提取每个月的数据,并允许您从查询结果中绘制图表吗?
  • =query() 将使分组更容易
  • 我不确定如何进行查询以获取适当的数据集:-(

标签: google-apps-script google-sheets


【解决方案1】:

这可能对你有用。如果我理解正确,您的问题是将数据转换为可以用来制作图表的格式,而不是实际的图表。

我认为这个公式可以将您的原始数据转换为您需要的格式。请参阅下面的示例表。

=query(DataA,"select D, sum(B), sum(C) " & L1 & " group by D pivot E label sum(B) 'Amt', sum(C) 'Cnt'",1)

样本表在这里: https://docs.google.com/spreadsheets/d/12wboxcbSu-SBhbHzZWrhmVSLMt1QoyLYu8ErUuWlPJg/edit?usp=sharing

我添加了一些辅助列(D:F,隐藏),但如果您愿意,可以将这些列删除并合并到公式中。我会在今天晚些时候看到如何将图表添加到工作表中。

请注意,尽管查询显示某些列的“SUM”,但每年每个月只有一个值,因此 SUM 仅针对一个值。但是,如果您需要能够显示每年的所有月份,则需要它 - 即。从 K1 的月份选择器中选择“全部”。如果您只需要查看一个月的数据(例如 2 月),那么公式可以简单得多,如下所示:

=QUERY(DataA,"SELECT D, B, C " & L1 & " ORDER BY D ",1)

让我知道这是否在正确的轨道上。

【讨论】:

  • 不完全。现在我可以根据原始数据按时间顺序绘制所有月份的图表。但我想为所有年份的每个月创建图表。所以我想要一个整个一月的图表,一个二月的图表,一个三月的图表等等。这样,我可以按月比较历史表现。
  • @Tom,您能否澄清一下为什么这不起作用?如果您查看 Sheet1Bkup,我选择了“二月”,它将所有二月数据过滤到 I7:K 中。然后该图表使用该范围,生成仅包含 2 月数据的图表。这不是你想要达到的目标吗?您可以在 Sheet1 中尝试相同的方法,使用不同的月份。
  • 你是对的。有用。您只是显示 9 月份。我最初的问题是找到一种直接创建图表的方法。这似乎是不可能的。所以我使用脚本为图表创建数据。似乎查询可以做同样的事情,但要容易得多。做得好!这绝对不容易理解。我需要一些时间来研究它:-)
  • 我有一个问题。如果我更改值,您的数据如何更新?在您的示例数据 2010/09 ,count=1,amount=15,我将其更改为 2 和 3,您的公式不会更新新数据。为什么?
  • @Tom,对不起,我在 I6 中修正了公式。它使用的是旧的“命名范围”,指向备份表。我将其更正为指向单元格 A6:F258 的命名范围。现在,如果您更改其中一个值 - 在正确的月份 - 它旁边的图表将会改变。如果您仍有问题,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多