Pagination 如何从PowerQuery对OData中的大型数据集请求进行分页?

Pagination 如何从PowerQuery对OData中的大型数据集请求进行分页?,pagination,odata,powerpivot,powerquery,Pagination,Odata,Powerpivot,Powerquery,我有一个OData提要,其中包含许多大型表(数千万行)。我需要配置PowerQuery(或PowerPivot,无论哪种工具最适合此作业)来访问此OData提要,但要以分页方式进行配置,以便单个请求不会试图一次返回1000万行,而是使用多个分页查询构建数千万行的完整结果。我不想手动提交许多不同的URL,它们的$top和$skip值不同,我需要使用PowerQuery或PowerPivot来处理分页 我希望PQ/PP能够足够聪明地进行分页,也许可以先发出一个“count”查询来确定存在多少行,但事

我有一个OData提要,其中包含许多大型表(数千万行)。我需要配置PowerQuery(或PowerPivot,无论哪种工具最适合此作业)来访问此OData提要,但要以分页方式进行配置,以便单个请求不会试图一次返回1000万行,而是使用多个分页查询构建数千万行的完整结果。我不想手动提交许多不同的URL,它们的$top和$skip值不同,我需要使用PowerQuery或PowerPivot来处理分页

我希望PQ/PP能够足够聪明地进行分页,也许可以先发出一个“count”查询来确定存在多少行,但事实似乎并非如此。当我给PQ/PP一个指向大OData表的URL时,它只是盲目地发出一个查询来检索所有行(实际上,它发出了两个相同的查询,这似乎很奇怪),这会使服务器上的数据库崩溃


在寻找答案的过程中,我看到了PQ/PP可以进行分页的提示,但没有关于如何启用此行为的线索。那么,有没有办法告诉PQ/PP使用某种分页来访问大型数据集?如果是,我可以设置页面大小吗?

如果您使用的是Web API,是否可以将页面大小设置在EnableQueryAttribute上

[EnableQuery(PageSize = 10)]
public IHttpActionResult Get()
{
  return Ok(customers);
}

您可以使用递归来获取和追加连续页面。每次连续提取都会在url中使用较高的“开始”行号。如果fetch生成一个空列表,则递归结束。在“M”中,if语句可以检查空列表,否则追加并增加“@”以自引用当前函数名。

我们的假设是服务器将选择最佳页面大小,因此我们主要让服务器选择分页策略。我相信Sam的答案是在Web API服务器上启用此功能的方法,不过对于大多数应用程序,我可能会鼓励您选择大于10:d的页面大小。