是否可以对给定实体中的所有行进行计数,从而绕过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
还有其他方法吗?
答案 0 :(得分:2)
不幸的是,我们必须选择一种方法来根据限制内的预期结果确定记录数。
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
,并使用代码变量(code example to query the next page)对每个页面中的记录进行计数
答案 1 :(得分:2)
XrmToolBox具有counting tool可以帮助解决此问题。
此外,我们这里的MetaTools Inc.刚刚发布了一个名为AggX的在线工具,该工具可以在Dynamics 365 Online组织中的任意数量的记录上运行聚合,并且在Beta版期间是免费的。
答案 2 :(得分:1)
您可以尝试使用OData's $ inlinecount查询选项。
在查询字符串中仅添加$inlinecount=allpages
会返回所有记录,因此在URI中添加$top=1
只能获取一条记录以及所有记录的数量。
您的URL看起来像/accounts/?$inlinecount=allpages&$top=1
例如,click here和响应XML的计数将为<m:count>11</m:count>
注意:此查询选项仅在OData 2.0版和 以上
答案 3 :(得分:1)
如果要检索超过5000个实体的记录总数,请使用RetrieveTotalRecordCount函数。
您的查询将如下所示:
https://<your api url>/RetrieveTotalRecordCount(EntityNames=['accounts'])