1

我一直在使用 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?或者我需要将它们分解成几个请求,这只会使这个解决方案比后者的第二个稍微好一点。

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

4

1 回答 1

2

Conner,我的建议是下载所有快照,即使是您不想要的快照,并在客户端对它们进行编组。与 App SDK 捆绑在一起的 Lumenize 库中的一些功能使这变得相对容易,TimeSeriesCalculator 还将通过更多功能为您完成此任务,例如将数据聚合成系列。

于 2014-03-21T00:08:34.217 回答