Skip to main content


How to manage multi-currency in Salesforce CRM Analytics

While multi-currency support in Salesforce is very robust, CRM Analytics doesn't support multi-currency whatsoever. In the following article, I will explain how to display amounts in the corporate currency, record currency, user currency, as well as to implement currency picker that recalculates amounts based on user selection . For the purpose of this demonstration, I have set EUR as the corporate currency, activated multi-currency (both in Setup -> Company Information) , and added CZK to the list of active currencies (Setup -> Manage Currencies) . Advanced Currency Management is turned off ( Dated Exchange Dates are not considered). Default behavior Let's start with a description of what's going to happen with currency-type fields in CRM Analytics if we don’t make any modifications. When CRM Analytics accesses the data, it always happens in the context of Analytics Integration User . As a result, the sync converts all of the currency-type fields into
Recent posts

How to visualize months as names in CRM Analytics

It is sometimes desirable to display month names instead of month numbers in your charts. Month numbers can be especially confusing when you are using fiscal years. For example "2024-01" ... Is it January? Or is it July, when the company= fiscal year starts? As obvious as it sounds, it is not easy to achieve this in Salesforce CRM Analytics . There are two ways to achieve this: using a recipe or employing SAQL (Salesforce Analytics Query Language) . Two ways to skin a cat To showcase both techniques we will visualize Opportunity expected amounts grouped by year and month. In the first method we will use a recipe to create an extra field with a month name . In the second method we will include case method into the query itself . Recipe We require data from Opportunity object , specifically Close Date and Expected Amount fields. Create a Connection and synchronize the data. Create a new Recipe with Opportunity connected dataset as an input. Add a transfor

How to resolve: Dashboards filters not applied, when query faceting is adjusted in CRM Analytics

Adding CRM Analytics Dashboards into the Salesforce Record Pages is an awesome functionality, but only if you can set up filters directly from App Builder . Which works fine until you need to adjust the faceting, for example, by excluding some queries. The issue is registered with Salesforce with no workaround. So, let’s figure the workaround out... How to reproduce the issue I have signed up for testing CRM Analytics org on Trailhead and created a sample App called "Customer Insights" with a dashboard named "Opportunities" . On the dashboard there are two charts and one table, all based on the Opportunity SObject . Dashboard is placed on the Account Record Page . I want the two charts not to affect each other, but I need them to filter the table below. All widgets need to be filtered by Account Id from the Record Page . Therefore I am setting filter in the App Builder and removing faceting from the charts. Do you see the result? Table is filtered

How to use Event Logs to debug excessive API requests into your Salesforce instance?

Have you ever received an API usage notification email indicating that you've surpassed 75 percent of the available API call threshold? Or perhaps you've faced a situation where the API limits were entirely exceeded, causing the API to cease functioning, and you were unsure about how to proceed with an investigation? Mulesoft logs didn’t help Something similar happened on my previous project. I promptly contacted our Mulesoft team, who were responsible for integrations, and assigned them the task of examining the logs and dashboards to identify the source of this additional load. After several hours of investigation, I hadn't received any conclusive findings. The response was, "There is no unusual traffic. We don't observe any extra requests being generated by Mulesoft." While the absence of abnormal activities tends to be a good thing, in that case problem was still there, but very well hidden. Event Monitoring Luckily, Salesforce offers a built-in sum

How to Remove a Directory from All Git Commits and Branches

If you work in consultancy, you might encounter a situation where you need to hand over a project repository to a competitor. However, the repository contains some proprietary code that shouldn't have been included in the first place. Is it possible to completely remove a directory from the git history? Let's explore how we can achieve this. Prerequisites The first and most important note is that I was unable to achieve this on Windows . Instead, I had to create a virtual machine with Linux (Ubuntu 22.04) . Git and python3 were preinstalled. Unfortunately, git alone won't suffice. You need to install 'git-filter-repo' , a handy tool for rewriting git history. You can get it from GitHub ( ) or use pip to install it. I went with pip for simplicity. First, install pip : apt install python3-pip Then install git-filter-repo : python3 -m pip install --user git-filter-repo Check if the installation was completed succe

Dynamic Forms on Salesforce Standard Objects

In the latest release Salesforce finally let us to migrate fields and sections from page layout to any place on the record page as individual components. This of course means, that you can set visibility of those fields and sections individually. Unfortunately it all works on Custom Objects only… Or not? Though Dynamic Forms really work just on Custom Objects, I will show you easy workaround for Standard Objects . In the tutorial we will display Shipping Address on Account in the right region aside from the rest of the record. To accomplish this we will use Lightning App Builder to create new Record Page for Contact object and quick action to create custom section layout . For this interesting idea I would like to thank my colleague Emma Peeters , who introduced the workaround on my recent project. Update Account page layout First we will remove the Shipping Address Section from Page Layout on Account Object . Go to Object Manager → Account → Page Layouts → Account L

How to access Record Types in Apex: Apex Record Type Provider

I’ve had a pleasure to watch many Salesforce technical architects trying to find a perfect way, how to work with Record Types in Apex . One created class Global_Constants to store all Record Type Ids and DeveloperNames in static properties, the other queried RecordType table and put the result in the map. I was never impressed so I‘ve come up with Record Type Provider , that allows you to access RecordTypeId like this: RecordTypeProvider.[ObjectName].[RecordTypeName].Id . It’s not perfect, but it definitely has its pros. What doesn’t work First, I would like to stop by the usual solutions and explain, why they do not work (well). Querying the RecordType table is extremely fast – you get all the Record Type descriptions in few miliseconds, but on the other hand you lose what every Salesforce developer must treasure the most – SOQL query . You may think, that you have only limited amount of classes and this one tiny query will never mean anything, but over time logic in your o

About author

My photo
Jan Binder
Experienced Salesforce Technical Architect and Team Lead with a proven track record of delivering successful enterprise projects for major global companies across diverse industries, including automotive, oil & gas, and construction.