我正在尝试创建一个SOQL查询,该查询返回带有影响力的广告系列的列表,类似于具有相同名称的标准广告系列报告。以下似乎没有返回与报告相同的值:
SELECT Id,Name FROM Opportunity
where CampaignId in (SELECT CampaignId from CampaignMember where CampaignId = '??')
非常感谢任何帮助。
答案 0 :(得分:3)
如果你追求简单的事情 - 这可能就足够了:
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 diagram for these objects有点讨厌。
广告系列影响力允许营销人员衡量和报告多个广告系列 影响单一机会的广告系列。
所以我们可以从Contact开始,通过OpportunityContactRole转到Opportunities。同时从联系人转到CampaignMembers到Campaign。
SELECT Name, Email, Account.Name,
(SELECT HasResponded, Campaign.Name FROM CampaignMembers),
(SELECT Opportunity.Name, Opportunity.Amount FROM OpportunityContactRoles)
FROM Contact
LIMIT 10
但是,您必须处理查询结果才能获取广告系列名称(我不认为允许使用数据加载器导出子查询)。
最后但并非最不重要 - 如果您对只有一个广告系列或只有一个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')