SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate Queries, Neil Hohmann

CzechDreamin 57 views 59 slides May 23, 2024
Slide 1
Slide 1 of 59
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59

About This Presentation

Already know how to write a basic SOQL query? Great! But what about an *aggregate* SOQL query? You know, the kind that uses aggregate functions like COUNT & MAX along with GROUP BY and HAVING clauses? No? Well, get ready to learn how to slice & dice your org’s data right inside your own de...


Slide Content

Neil Hohmann SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate Queries

SOQL = Hacking Into Your Own Org

SOQL = Summoning Spell

Aggregate Functions GROUP BY GROUP BY ROLLUP GROUPING function Date Functions HAVING SOQL 201: Aggregate Queries

Developer Console > Query Editor

SELECT Id, Name, FORMAT(AnnualRevenue) FROM Account WHERE CreatedDate = THIS_MONTH SELECT COUNT(Id) FROM Account WHERE CreatedDate = THIS_MONTH Standard SOQL vs Aggregate SOQL

Standard SOQL vs Aggregate SOQL

SELECT Donor_Level__c, COUNT( Id ) , FORMAT( SUM( CC_Total_Given_Pledged__c ) ), FORMAT( AVG( CC_Total_Given_Pledged__c ) ) FROM Account WHERE CC_Total_Given_Pledged__c > 0 GROUP BY ROLLUP ( Donor_Level__c ) ORDER BY Donor_Level__c NULLS LAST Aggregate SOQL Example

Aggregate SOQL Example

SELECT Name, COUNT( Id ) FROM Opportunity GROUP BY Name HAVING COUNT(Id) > 1 Aggregate SOQL Example

Aggregate SOQL Example

Aggregate Functions

COUNT(), COUNT( fieldName ) COUNT_DISTINCT( fieldName ) SUM( fieldName ) AVG( fieldName ) MIN( fieldName ) MAX( fieldName ) Aggregate Functions

SELECT COUNT() FROM Account WHERE BillingState = 'CA' SELECT COUNT(Id) FROM Account WHERE BillingState = 'CA' COUNT() vs COUNT( fieldName )

COUNT() vs COUNT( fieldName )

COUNT() vs COUNT( fieldName )

COUNT() vs COUNT( fieldName )

SELECT CALENDAR_YEAR(MC4SF__MC_Campaign__r.MC4SF__Create_Time__c), CALENDAR_MONTH(MC4SF__MC_Campaign__r.MC4SF__Create_Time__c), COUNT_DISTINCT( MC4SF__MC_Campaign__r.Name ) , MC4SF__Action__c, COUNT( MC4SF__MC_Subscriber__c ) , COUNT_DISTINCT( MC4SF__MC_Subscriber__c ) FROM MC4SF__MC_Subscriber_Activity__c WHERE MC4SF__Action__c IN ('sent', 'open', 'click') GROUP BY CALENDAR_YEAR(MC4SF__MC_Campaign__r.MC4SF__Create_Time__c), CALENDAR_MONTH(MC4SF__MC_Campaign__r.MC4SF__Create_Time__c), MC4SF__Action__c ORDER BY CALENDAR_YEAR(MC4SF__MC_Campaign__r.MC4SF__Create_Time__c) DESC, CALENDAR_MONTH(MC4SF__MC_Campaign__r.MC4SF__Create_Time__c) DESC, MC4SF__Action__c DESC COUNT( fieldName ) vs COUNT_DISTINCT( fieldName )

COUNT( fieldName ) vs COUNT_DISTINCT( fieldName )

SELECT COUNT(Id), FORMAT( SUM( Amount ) ), AVG( Amount ) FROM Opportunity WHERE StageName = 'Closed Won' SUM( fieldName ) & AVG( fieldName )

SUM( fieldName ) & AVG( fieldName )

SUM( fieldName ) & AVG( fieldName )

SELECT COUNT(Id), FORMAT(SUM(Amount)), FORMAT(AVG(Amount)), FORMAT( MIN( Amount )) , FORMAT( MAX( Amount ) ) FROM Opportunity WHERE StageName = 'Closed Won' MIN ( fieldName ) & MAX( fieldName )

MIN ( fieldName ) & MAX( fieldName )

SELECT UserId, Status, COUNT(Id), FORMAT( MIN( LoginTime ) ), MAX( LoginTime ) FROM LoginHistory WHERE LoginTime = LAST_N_DAYS:21 GROUP BY UserId, Status MIN( fieldName ) & MAX( fieldName )

MIN( fieldName ) & MAX( fieldName )

SELECT MIN( LastName ) , MAX( LastName ) FROM Contact MIN( fieldName ) & MAX( fieldName )

MIN( fieldName ) & MAX( fieldName )

GROUP BY

SELECT StageName, COUNT(Id), SUM(Amount), MIN(Amount), MAX(Amount), AVG(Amount) FROM Opportunity GROUP BY StageName GROUP BY fieldName

GROUP BY fieldName

GROUP BY fieldName

GROUP BY fieldName

GROUP BY fieldName

Write an aggregate SOQL query that breaks down ‘Closed Won’ opportunities by account industry. Include the opportunity record count, as well as the sum and average of the amount for each industry. Be sure to format the currency fields. SOQL CHALLENGE #1 SELECT FROM WHERE GROUP BY

GROUP BY fieldName

GROUP BY ROLLUP

GROUP BY fieldName

SELECT StageName, COUNT(Id), FORMAT(SUM(Amount)), FORMAT(MIN(Amount)), FORMAT(MAX(Amount)), FORMAT(AVG(Amount)) FROM Opportunity GROUP BY ROLLUP ( StageName ) ORDER BY StageName NULLS LAST GROUP BY fieldName

GROUP BY ROLLUP(fieldName)

GROUP BY ROLLUP(fieldName)

GROUPING Function

SELECT StageName, GROUPING( StageName ) total, COUNT(Id), FORMAT(SUM(Amount)), FORMAT(MIN(Amount)), FORMAT(MAX(Amount)), FORMAT(AVG(Amount)) FROM Opportunity GROUP BY ROLLUP ( StageName ) ORDER BY StageName NULLS LAST GROUPING(fieldName)

GROUPING(fieldName)

GROUPING(fieldName)

Date Functions

Date Functions Date functions allow you to group and filter data by date periods (eg, day, calendar month, fiscal quarter, etc.): CALENDAR_MONTH() → returns a number 1 - 12 CALENDAR_YEAR() → returns the year DAY_IN_WEEK () → returns a number 1 - 7 FISCAL_YEAR() → returns the fiscal year FISCAL_QUARTER() → returns the fiscal quarter (1 - 4)

SELECT CALENDAR_YEAR( MC4SF__MC_Campaign__r.MC4SF__Create_Time__c ) , CALENDAR_MONTH( MC4SF__MC_Campaign__r.MC4SF__Create_Time__c ) , COUNT_DISTINCT(MC4SF__MC_Campaign__r.Name), MC4SF__Action__c, COUNT(MC4SF__MC_Subscriber__c), COUNT_DISTINCT(MC4SF__MC_Subscriber__c) FROM MC4SF__MC_Subscriber_Activity__c WHERE MC4SF__Action__c IN ('sent', 'open', 'click') GROUP BY CALENDAR_YEAR( MC4SF__MC_Campaign__r.MC4SF__Create_Time__c ) , CALENDAR_MONTH( MC4SF__MC_Campaign__r.MC4SF__Create_Time__c ) , MC4SF__Action__c ORDER BY CALENDAR_YEAR( MC4SF__MC_Campaign__r.MC4SF__Create_Time__c ) DESC , CALENDAR_MONTH( MC4SF__MC_Campaign__r.MC4SF__Create_Time__c ) DESC , MC4SF__Action__c DESC Date Functions : CALENDAR_YEAR(), CALENDAR_MONTH()

Date Functions: CALENDAR_YEAR(), CALENDAR_MONTH()

Write a query that breaks down ‘Closed Won’ opportunities by account owner, year, and month. Include the record count and the sum. Also, include the most recent opportunity close date. Include a roll-up summary field. Format all currency and date fields. SOQL CHALLENGE #2 SELECT FROM WHERE GROUP BY

SOQL CHALLENGE #2

HAVING

SELECT Account.Name, COUNT(Id) FROM Opportunity WHERE StageName = 'Closed Won' GROUP BY Account.Name HAVING Count(Id) >= 3 HAVING

HAVING

Write a query that catches duplicate contacts. It should only identify duplicates if both the name and email are found in another contact. It should return the name, email, and number of matches. Make sure it doesn’t return records where the email field is null or blank. SOQL CHALLENGE #3 SELECT FROM WHERE GROUP BY HAVING

SOQL CHALLENGE #3

Resources Salesforce SOQL and SOSL Reference (Spring ‘24) neilhohmann.com: SOQL 101 Part 3: Aggregate Queries CampApex.org (SOQL section) Coding with the Force (YouTube): SOQL & SOSL Guide Trailhead: SOQL for Admins > Use Bind Variables and Aggregate Functions