3

是否可以计算给定实体中的所有行,绕过 5000 行限制并绕过页面大小限制?

我不想在一个请求中返回超过 5000 行,而只想要该给定实体中所有行的计数。

根据 Microsoft 的说法,您不能在请求 URI 中执行此操作:

The count value does not represent the total number of entities in the system. 

It is limited by the maximum number of entities that can be returned.

我试过这个:

GET [Organization URI]/api/data/v9.0/accounts/?$count=true

还有什么办法吗?

4

5 回答 5

5

使用函数RetrieveTotalRecordCount

如果要检索超过 5000 条实体的记录总数,请使用 RetrieveTotalRecordCount 函数。

您的查询将如下所示:

https://<your api url>/RetrieveTotalRecordCount(EntityNames=['accounts'])
于 2020-04-28T10:48:48.103 回答
4

更新:

最新版本 v9.1 具有实现此功能的直接功能 - RetrieveTotalRecordCount

——————————————————————————————</p>

不幸的是,我们必须选择其中一条路径来根据限制内的预期结果来识别记录数。

1.如果小于5000,使用这个:(你已经尝试过这个)

GET [Organization URI]/api/data/v9.0/accounts/?$count=true

2.少于50,000,使用这个:

GET [Organization URI]/api/data/v8.2/accounts?fetchXml=[URI-encoded FetchXML query]

超出限制会报错:AggregateQueryRecordLimit exceeded. Cannot perform this operation.

示例查询:

<fetch version="1.0" mapping="logical" aggregate="true">
  <entity name="account">
    <attribute name="accountid" aggregate="count" alias="count" />
  </entity>
</fetch>

使用 URI 进行浏览器地址栏测试:

[Organization URI]/api/data/v8.2/accounts?fetchXml=%3Cfetch%20version=%221.0%22%20mapping=%22logical%22%20aggregate=%22true%22%3E%3Centity%20name=%22account%22%3E%3Cattribute%20name=%22accountid%22%20aggregate=%22count%22%20alias=%22count%22%20/%3E%3C/entity%3E%3C/fetch%3E

解决此问题的唯一方法是根据某些属性对数据集进行分区,以便获得较小的记录子集以单独聚合。

阅读更多

3.最后的手段是用代码变量遍历@odata.nextLink并统计每一页中的记录(查询下一页的代码示例

于 2018-07-26T19:09:00.620 回答
2

XrmToolBox 有一个计数工具可以帮助解决这个问题。

此外,我们 MetaTools Inc. 刚刚发布了一个名为AggX的在线工具,该工具在 Dynamics 365 Online 组织中的任意数量的记录上运行聚合,并且在测试版发布期间是免费的。

于 2018-07-30T12:51:00.673 回答
1

您可以尝试OData 的$inlinecount 查询选项。仅$inlinecount=allpages在查询字符串中添加将返回所有记录,因此$top=1在 URI 中添加以仅获取一条记录以及所有记录的计数。

你的网址看起来像/accounts/?$inlinecount=allpages&$top=1

例如,单击此处,响应 XML 将计数为<m:count>11</m:count>

注意:此查询选项仅在 OData 版本 2.0 及更高版本中受支持

于 2018-07-26T19:28:01.720 回答
0

这有效:

[组织 URI]/api/data/v8.2/accounts?$count

于 2021-09-29T10:40:00.807 回答