2012-10-16 70 views
2

我有一个电子表格,每月的数据可追溯到将近十年,我正在为此表单和其他表单创建一个仪表板。在Google Apps脚本中的图表上过滤日期范围

我正试图过滤显示过去12个月数据的图表的数据表。我试图在使用getTime()或valueOf()的日期上使用数字范围过滤器,但都使用date.valueOf()(我假设因为大小)设置最小值时拒绝构建过滤器。我也尝试了下面链接中的解决方案,使用viewWindow,但失败了。 Date Range Google Chart Tools

我知道这可以用可视化API来完成,但不幸的是我被困在Google Apps脚本中。我试图使用一个数据表的一切,但如果这是不可能的,我可以创建一个单独的只有12行。我真的希望让用户加载自定义的时间范围,但是GAS中没有ChartRangeFilter。

回答

2

正如您发现的,NumberRangeFilter不适用于日期,并且Apps脚本目前不支持任何其他范围过滤器。我采用的一种解决方法是将日期转换为数字,并使用NumberRangeFilter对其进行过滤。例如,“2012年10月19日”可以转换为“20121019”。

为了避免由于20121031和20121101之间的整体而导致图形中出现奇怪的跳转,您需要在数值日期上设置过滤器,但使用DataViewDefinition仅显示图形中的实际日期。

下面是一段粗略的示例代码。列0是实际日期,1是数字日期,2是我想绘制的值。

var dateFilter = Charts.newNumberRangeFilter() 
    .setFilterColumnIndex(1) 
    .build(); 
var view = Charts.newDataViewDefinition() 
    .setColumns([0, 2, 3]); 
var areaChart = Charts.newAreaChart() 
    .setDataViewDefinition(view) 
    .setStacked() 
    .setDimensions(800, 400) 
    .build(); 
+0

谢谢,这主要是作品。我将最小值和最大值设置为包括过去12个月的数据(2012年8月至2011年8月)。它没有2012年8月完美的工作,在图表中给出适当宽度的列。但是,当我添加2012年8月时,列变得非常薄,有很多空的空间。 因为我的数据是每月的,所以我将它设置为每个月的最后一天(并且JavaScript假定当地时间为晚上9点)。所以我的数字日期公式是100 *年+月 – Fred

+0

其实,我的公式是(date.getFullYear() - 2003)* 12 + date.getMonth(),因为我的数据在2003年开始。它和其他的一样一。 – Fred

+0

这听起来像是图表选择渲染数据的问题。如果增加宽度,则列的缩放比例应该不同。 –