按日期加载一系列快照时出现问题

时间:2014-03-20 21:18:57

标签: rally lookbackapi

我一直在使用LBAPI遇到一致的问题,我觉得这可能是一个常见的用例。我正在生成一个图表,该图表使用一组投资组合项目的LBAPI快照来计算图表系列。我知道最短和最大快照日期,并且需要在这两个日期之间每天查询一次。我发现有两种主要方法可以实现这一目标,这两种方法都不理想:

  • 使用_ValidFrom_ValidTo过滤器属性将结果限制为所选时间范围内的快照。这很糟糕,因为它还会加载我不特别关心的快照。例如,如果PI在一天内被多次修改,我真的只关心那天的最后一次有效快照。由于我正在寻找的一些PI已被修改了数千次,因此这种方法需要提取大部分我不感兴趣的数据,这会导致不必要的长时间加载。

  • 使用__At过滤器属性,并为每个查询日期发送单独的请求。这种方法并不理想,因为有些图表需要几百个请求,许多请求会返回多余的结果。例如,如果PI未被修改数天,则该时间范围内的每个请求都将返回同一快照的单独实例。

我的解决方法是模拟__At的效果,但每个请求都有几个过滤器。为此,我将此过滤器添加到我的请求中:

Rally.data.lookback.QueryFilter.or(_.map(queryDates, function(queryDate) {
    return Rally.data.lookback.QueryFilter.and([{
        property : '_ValidFrom',
        operator : '<=',
        value    : queryDate
    },{
        property : '_ValidTo',
        operator : '>=',
        value    : queryDate
    }]);
}))

但是,当然会出现一个新问题......添加此过滤器会导致通过LBAPI发送的请求过多,除非查询的日期少于约20个。有没有办法可以向LBAPI发送更大的过滤器?或者我是否需要将其分解为多个请求,这使得此解决方案略微比后者的第二个更好。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

康纳,我的建议是下载所有快照,即使是你不想要的快照,也可以在客户端编组。 Lumenize库中的功能与App SDK捆绑在一起,使得相对容易,TimeSeriesCalculator也将为您实现这一功能,具有更多功能,例如将数据聚合成系列。