Если вам нужно что-то простое - этого может быть достаточно:
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 для этих объектов немного неприятна.
Влияние кампании позволяет маркетологам измерять и составлять отчеты по нескольким кампаниям, которые повлияли на одну возможность.
Итак, мы могли бы как-то начать с контакта, перейти к возможностям через OpportunityContactRole. И в то же время из Контакта перейдите в 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')
person
eyescream
schedule
28.11.2012