Today's blog post was written by Kyle Dreyer, Principal Architect at Sonoma Partners.
The genesis of nearly all CRM implementations comes from the desire to see a 360° view of your customers.
This typically involves the desire to see Contacts, Opportunities, Cases, Orders, etc. for an individual customer in an intuitive user interface. This provides a sales organization and customer service organization (as well as other business groups) insight into all activities around a customer. It is not difficult to realize the value that this brings.
The question now becomes – how do we take that to the next level? We are consistently hearing from our clients that they expect to have visibility from their account hierarchy to the data that resides within child accounts.
Imagine the following scenario of a customer hierarchy:
It is easy to see the logic that users would want to see Opportunity/Cases/etc. that reside in Division 1 and 2. Additionally, at the Holding Company level, users want to see everything that is occurring at Company A, B, and C – as well as what is occurring at each division.
So, how do we do this? This would, in theory, be possible with native reporting, but reporting across an inconsistent hierarchy (it won’t always be as simple as the example shown above!) can be challenging in reports. Additionally, you would either need to create a report for each account or provide the ability to change the parameter that the report is using (which, in the Salesforce world, would also give users additional reporting access that is not always ideal!). Lastly, users will want to see this data on the account record that they are currently working on.
The good news is that all of this can accomplished relatively easily using configuration. Let’s take a look at how to do this in Salesforce (for this illustration, I’ll show this capability on an Opportunity):
1. Create Account Record Types
*In this example, I’ve created generic record type names. More descriptive ones may be appropriate.
2. Create fields on the Opportunity object called “Parent Account” and “Ultimate Parent Account”
3. Create an Account Page Layout for Each Record Type
4. Map Account Page Layouts to appropriate Account Record Types
5. Add the appropriate Opportunity Related List to each Account Page Layout
*The above related list should be placed on the “Account Layout”
*The above related list should be placed on the “Parent Layout”
*The above related list should be placed on the “Ultimate Parent Layout”
6. Make Parent Account and Ultimate Parent Account Read only on Opportunity Page Layout(s)
7. Use Process Builder to auto-populate the Parent Account and Ultimate Parent Account when an Opportunity is created
- Parent Account:
- IF([Opportunity].Account.RecordType.Name = 'Grandparent', [Opportunity].Account.Id, IF([Opportunity].Account.RecordType.Name = 'Parent', [Opportunity].Account.Id, [Opportunity].Account.ParentId))
- Ultimate Parent Account:
- IF([Opportunity].Account.RecordType.Name = 'Grandparent', [Opportunity].Account.Id, IF([Opportunity].Account.RecordType.Name = 'Parent', [Opportunity].Account.ParentId, [Opportunity].Account.Parent.ParentId))
- Activate the Process Builder and test it out!
In order to test this process, I’ve built out the account hierarchy in our previous example.
I created an opportunity on the Account “Division 1”, “Customer C”, “Customer B” and the “Holding Company” – lets check out the results by viewing the pages of these accounts.
Additionally, the opportunity on Division 1 should “roll-up” to Company A (I’ve already shown this rolling up to the Holding Company) since its parent account is Company A. Let’s take a look at that account:
Now that we’ve shown how this functionality would work, I should mention a few considerations/requirements:
- Define the maximum depth of the hierarchy.
- In this example, I’ve shown a 3-level hierarchy. There is no requirement to the depth that the hierarchy needs to be. That said, a maximum depth must be set. The greater the depth, the more complicated this becomes. I would encourage you to limit the hierarchy to 4 levels deep.
- This is a simplified example.
- You’ll notice that the formula in the process builder is pretty straightforward. This design would allow for more complicated scenarios to determine the Parent and Ultimate Parent accounts on the Opportunities.
- This is extendable to more child objects to an account – or any objects with a hierarchy.
- Do not extend this to all objects related to an account.
- This design is not suitable for all objects. For example, we rarely (if ever) do this for Contacts. Often times, the number of contacts in the system would be overwhelming (and thus reduce the value) at the highest level in the hierarchy.
I hope that helps your organization consider the value of re-defining a 360° view of a customer. Our clients have found this to be instrumental to the way that they operate their business. You can imagine the benefit of “rolling up” certain objects (who doesn’t want to know the total dollars from orders that they do with a customer?). As always, should you have any questions, please do not hesitate to contact us!