首页 > 解决方案 > 按参考字段 SQQL Salesforce 分组

问题描述

我即将在SOQL Apex Salesforce查询 中使用参考字段创建GROUP BY,我收到以下消息:该字段无法在查询调用中分组

我的解决方案是创建自定义字段并使用流程构建器更新它们,但此解决方案仅对新记录有帮助,我必须更新数据库中的所有现有记录(超过 100 万条)以填充这些自定义字段新创建的。

我可以用父级的引用字段创建分组依据是什么?

这是我的查询:

SELECT Delivery__r.Beneficiaire__r.ASPO_Master__r.Name, Delivery__r.Beneficiaire__r.ASPO_Master__r.New_ID__c, UM__c,  SUM(Quantity__c)qty 
FROM Item_Distributed__c
WHERE Quantity__c !=0 AND Delivery__r.Beneficiaire__r.ASPO_Master__c !=''
AND Del_Status__c='Delivered'
AND Product__c IN :articleContainersId                                        
GROUP BY  Delivery__r.Beneficiaire__r.ASPO_Master__r.Name, Delivery__r.Beneficiaire__r.ASPO_Master__r.New_ID__c, UM__c];

我想注意到查询是在一个名为 Item_Distributed__c 的自定义对象上进行的,其父对象为 Delivery,它是 Account 的子对象。我要查询的字段来自Account。

标签: salesforceapexapex-codesoql

解决方案


您可以按参考字段(查找和主详细信息)进行分组。这两个应该工作得很好:

SELECT Account.Name, COUNT(Id)
FROM Contact
GROUP BY Account.Name
HAVING COUNT(Id) > 1
LIMIT 5

SELECT Account.Owner.Profile.Name, COUNT(Id)
FROM Contact
GROUP BY Account.Owner.Profile.Name

您不能使用公式字段,也许是其他类型。您应该检查您的所有字段的“描述”调用结果,调用GROUP BY它们isGroupable()。从顶点或 API(https://workbench.developerforce.com/可能是最快的),或者您甚至可以在FieldDefinition表中查询它......

在此处输入图像描述

一旦你确定了那个公式......如果数据修复是不可能的,那么想想你是否可以稍微分解一下公式,以某种方式按其源字段分组,然后再执行一些步骤来解释结果。这有点讨厌,因为如果有人编辑公式并且不更新您的查询,它将不同步。

如果你分两步做呢?抓取父母(您已标记apex,因此您可以将它们放入 helper 中Map<Id, Account>。在 SOQL 组中仅通过帐户 ID?您仍然需要遍历结果并为不同的父母添加行但具有相同的公式值但可能会有所帮助?


推荐阅读