我正在尝试创建一个 SOQL 查询,该查询返回具有影响机会的活动列表,类似于具有相同名称的标准活动报告。以下似乎没有返回与报告相同的值:
SELECT Id,Name FROM Opportunity
where CampaignId in (SELECT CampaignId from CampaignMember where CampaignId = '??')
任何帮助将不胜感激。
我正在尝试创建一个 SOQL 查询,该查询返回具有影响机会的活动列表,类似于具有相同名称的标准活动报告。以下似乎没有返回与报告相同的值:
SELECT Id,Name FROM Opportunity
where CampaignId in (SELECT CampaignId from CampaignMember where CampaignId = '??')
任何帮助将不胜感激。
如果您追求简单的东西 - 这可能就足够了:
SELECT Campaign.Name, Id, Name, Amount
FROM Opportunity
WHERE CampaignId != null AND CloseDate = THIS_MONTH
您可以轻松地将其转换为汇总查询,该查询也可以为您提供每个广告系列的总数:
SELECT Campaign.Name, Campaign.NumberOfOpportunities, SUM(Amount), COUNT(Id)
FROM Opportunity
WHERE CampaignId != null AND CloseDate = THIS_MONTH
GROUP BY Campaign.Name, Campaign.NumberOfOpportunities
(如果你会得到Campaign.NumberOfOpportunities
Opps 和计数之间的差异,那没关系。这是因为第一个字段是“所有时间计数器”,而后一个字段受 影响WHERE CloseDate = THIS_MONTH
)
如果您需要与报告返回的完全一致的数据集(尤其是“已响应”),这将很棘手,因为这些对象的 ERD 图有点讨厌。
Campaign Influence 允许营销人员衡量和报告影响了单个机会的多个活动。
所以我们可以以某种方式从联系开始,通过 OpportunityContactRole 转到机会。同时从 Contact 转到 CampaignMembers 到 Campaign。
SELECT Name, Email, Account.Name,
(SELECT HasResponded, Campaign.Name FROM CampaignMembers),
(SELECT Opportunity.Name, Opportunity.Amount FROM OpportunityContactRoles)
FROM Contact
LIMIT 10
但是,您必须处理查询结果以获取活动名称(例如,我认为不允许使用 Data Loader 导出子查询)。
最后但并非最不重要的一点 - 如果您只对一个 Campaign 或一个 Opp感兴趣,它可以被简化(而且您非常接近!)
SELECT Contact.Name, Opportunity.Account.Name, Opportunity.Name, Opportunity.Amount
FROM OpportunityContactRole
WHERE ContactId IN (SELECT ContactId FROM CampaignMember WHERE Campaign.Name = 'Sample Campaign')