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