Quick Tips: Sort Pipeline by Sales stages with Salesforce CRM Analytics (aka Tableau CRM)
Problem Statement
While working on a recent change, we realized (a bit late) that the sales pipeline view shows sales stages in incorrect order. Ideally, you would want the pipeline view to reflect the stage in the same sequence as the sales process (for example Prospect, Propose, Negotiate, Close).
Sales Path
Sales Pipeline
Initial SAQL
q = load "opportunities";
q = group q by 'StageName';
q = foreach q generate 'StageName' as 'StageName',
sum('Amount') as 'sum_Amount';
q = order q by 'StageName' asc;
q = limit q 2000;
Solution Approach
Approach 1: Augment a field within the Opportunity dataset (CRM Analytics) to generate a new column for the Sales stage sequence
This approach would be faster to deliver and has comparatively less change. However, as sales stages are changed/ updated it can result in the Tableau CRM dashboard showing an incorrect sales stage sequence. So, it can lead to dual maintenance (Sales cloud and CRM Analytics)
Approach 2: Prefix opportunity stage value with stage position (for example 1 - Prospecting)
This approach may also be a faster change. However, it uses non-friendly sequence numbers in the opportunity stage. Also, if the same stage values are used across multiple sales processes (or record types for other objects), the sequence may not stay correct.
Approach 3: Create a new formula field within the Opportunity object (Sales cloud) to generate a new column for the Sales stage sequence (PREFERRED)
This approach will take more time (depending on your change management processes) but will ensure that Sales teams own and update their sales stages as needed. In other words, no dual maintenance between Sales Cloud and CRM Analytics.
However, the given solution works for approaches 1 and 3
Solution Steps
1. Create a new field on Stage Position Opportunity to reflect stage sort value
2. Update Object connection settings and required workflows/ recipes to get your new column into the desired dataset
3. Modify Chart SAQL to add a max of Stage Position to the result set to get another dimension.
q = load "opportunities";
q = group q by 'StageName';
q = foreach q generate 'StageName' as 'StageName',
sum('Amount') as 'sum_Amount',
max('Stage_Position__c') as 'sum_Stage_Position__c';
q = order q by 'StageName' asc;
q = limit q 2000;
Sample result when you run your query
4. Now, sort final result set using Stage Position field
Final SAQL
q = load "opportunities";
q = group q by 'StageName';
q = foreach q generate 'StageName' as 'StageName',
sum('Amount') as 'sum_Amount',
max('Stage_Position__c') as 'sum_Stage_Position__c';
q = order q by 'sum_Stage_Position__c' asc;
q = limit q 2000;
Sample result when you run the query (notice results are sorted by stage position column)
The given solution can work for any similar requirements, wherein sorting needs to be performed via a hidden column, that is, a column not used in chart display.
Comments
Post a Comment