Skip to main content
Featured group

* CRM Analytics (fka Tableau CRM) *

Welcome! This group is dedicated to your success with Salesforce CRM Analytics. Join the conversation here to stay up to date on the product, learn best practices, and everything in between. Use this group to review resources, ask questions, help each other, and share experiences. --------------------------------------- This group is maintained and moderated by Salesforce employees. The content received in this group falls under the official Forward-Looking Statement: http://investor.salesforce.com/about-us/investor/forward-looking-statements/default.aspx

Hello! 

 

Our company is embedding some CRMA dashboards across some pages including the Account, Opportunity, Contact, and HomePage. Everything has been complete except for the homepage as we are looking for a way to make the dashboard on the homepage reflect only the user's team data. So for instance: 

-Dashboard A is on the manager's homepage using Dataset "XYZ". 

-There is a field in Dataset "XYZ" called "Reports To" which we want to reference in order to show the manager records created by users that report to the manager 

-We essentially want Logged In User = Reports To 

 

The issue is on the hompage ligthning page builder, we are not seeing a "filter buidler tool" and all my attempts at writing a JSON code similar to JSON filters that work on other record pages are not activating. 

 

Can someone help me understand how to write a JSON filter to page on a CRMA dashboard embedded on the homepage to reference a given field in a dataset vs the logged in User ID? 

 

Here is the example of the code I tried thus far with no success:

CRMA Embedded Dashboard on User HomePage- Filtering to Logged In User Data

It is also worth asking - is thee a way to write this filter in the dashboard code instead of on the lightning page? 

 

Much thanks in advance!! 

 

#Analytics

 

@* CRM Analytics (fka Tableau CRM) *

8 answers
  1. Dec 8, 2025, 1:23 PM

    Filters on embedded dashboards work for data coming from current records only. On a homepage, you don't have a record from where you can receive any value. 

    Thus you have to build the logic into the dashboard itself. Please have a look into

    https://help.salesforce.com/s/articleView?id=analytics.bi_dashboard_initial_filters_user_tokens.htm&type=5

    to get an idea on how this would work. 

     

    Technically, you receive the relevant value using a direct (SOQL) query. Then you apply this filter on any list selector which is based on the "reports to" field, so you have only one value left. With the selection type "single required", this value will be selected and applied to your dashboard.

0/9000

With the rollout of SLDS 2 and Salesforce Cosmos theme, the SFDC UI has received a nice visual refresh. We would like to keep the CRM Analytics experience very close to the SFDC experience with some branding customization and want to know specifically if there are any enhancements in the pipeline for visual features seen in the Cosmos theme and other capabilities such as:

  • Font changes
  • Support for circular (not squarcle) buttons
  • Animated buttons/toggles upon hover
  • Custom theme set support (custom color presets similar the current Color Safe, Bluegrass, Watermelon, etc.)
3 answers
  1. Apr 13, 1:27 PM

    Hi @Bond Tran

    ,  

    There’s no official Salesforce commitment  that CRM Analytics will get extra theming controls like custom fonts, circular buttons, hover animations, or custom preset theme packs. What is confirmed is that Salesforce Cosmos/SLDS 2 brings broader Lightning Experience branding options, but availability varies by product, and Salesforce says some products built on other platforms may continue using their existing UI.

0/9000

Hi All, Good Day! 

 

I'm facing an unexpected behavior in CRM Analytics and would appreciate any guidance. 

 

**Scenario:** 

- I created a CRM Analytics App and set sharing to **"No One"** 

- The app contains several dashboards 

- There is a user with the following setup: 

  - **License:** Analytics Platform 

  - **Permission Set:** CRM Analytics Platform User 

 

**Issue:** 

Despite the app being shared with no one, this user is still able to **see and access the dashboards** inside the app. 

 

**What I Have Already Checked:** 

- App sharing is confirmed set to "No One" 

- The user only has the CRM Analytics Platform User permission set assigned 

 

**My Questions:** 

1. Does the **Analytics Platform license** itself grant visibility to all dashboards regardless of app sharing? 

2. Are there any system permissions within **CRM Analytics Platform User** that could override app-level sharing? 

3. Is there any other setting I might be missing that controls dashboard visibility? 

 

Any help or pointers would be greatly appreciated! 

 

Thank you 

 

 

2 answers
  1. May 6, 2:38 PM
    Hi @Harshit Sahu check and confirm if the user has access to view all data permissions. If not, check and make sure the user does not belong to a permission set group that has manage crm analytics permission. Otherwise I would check if the dashboard is also visible in the default “shared app” folder within CRMA and they are accessing it through there.
0/9000

Hello, 

 

in a dashboard, I need to display the number of Events by week group by Sales Rep. 

I have the number of events done by Sales Rep, but I need to calculate in a formula which week we are in the year. 

I need help to create this formula. 

Thanks in advance

2 answers
0/9000

Is this the group to be asking questions about Revenue Insights? 

3 answers
  1. May 4, 8:56 PM

    If you are referring to the pre-built dashboards coming with Revenue Intelligence, then yes. This is where you can ask questions about all things based on CRM Analytics.

0/9000

Hello any idea how to add total ligne in my pivot table while keeping it in pivot format ?  

 

Total ligne in pivot table

 

 

here is my query : q2 = load "France_Benelux_Splits_ENG";q2 = filter q2 by 'Split_Annual_Revenue__c' >= 0;q2 = filter q2 by 'User.Division' in ["Belgium", "Bosnia", "Croatia", "Czech Republic", "Hungary", "Luxembourg", "Netherlands", "Poland", "Romania", "Russia", "Serbia", "Slovakia", "Turkey"];q2 = filter q2 by 'Opportunity.contract_start_date__c_extract' in ["2026"];q2 = filter q2 by 'Opportunity.Contract_Type__c' == "Contractual";q2 = filter q2 by 'Opportunity.Global_Business_Type_Opportunity__c' in ["Amendment on Existing Account", "New Account"];q2 = filter q2 by 'SplitTypeId' == "149D0000000fxTEIAY";base = group q2 by (  'Opportunity.contract_start_date__c_Year',  'Opportunity.contract_start_date__c_Month');base = foreach base generate  q2.'Opportunity.contract_start_date__c_Year' as 'Year',  q2.'Opportunity.contract_start_date__c_Month' as 'Month',  sum(q2.'Split_Expected_In_Year_Revenue__c') as 'SplitRevenue';base = foreach base generate  'Year' as 'Year',  'Month' as 'RowMonth',  (case    when 'Month' == "01" then "01-Janvier"    when 'Month' == "02" then "02-Fevrier"    when 'Month' == "03" then "03-Mars"    when 'Month' == "04" then "04-Avril"    when 'Month' == "05" then "05-Mai"    when 'Month' == "06" then "06-Juin"    when 'Month' == "07" then "07-Juillet"    when 'Month' == "08" then "08-Aout"    when 'Month' == "09" then "09-Septembre"    when 'Month' == "10" then "10-Octobre"    when 'Month' == "11" then "11-Novembre"    when 'Month' == "12" then "12-Decembre"  end) as 'MoisLabel',  'SplitRevenue' as 'SplitRevenue';q01 = filter base by 'RowMonth' <= "01";q01 = foreach q01 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-01" as 'YearMonth', 'SplitRevenue' as 'Valeur';q02 = filter base by 'RowMonth' <= "02";q02 = foreach q02 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-02" as 'YearMonth', 'SplitRevenue' as 'Valeur';q03 = filter base by 'RowMonth' <= "03";q03 = foreach q03 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-03" as 'YearMonth', 'SplitRevenue' as 'Valeur';q04 = filter base by 'RowMonth' <= "04";q04 = foreach q04 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-04" as 'YearMonth', 'SplitRevenue' as 'Valeur';q05 = filter base by 'RowMonth' <= "05";q05 = foreach q05 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-05" as 'YearMonth', 'SplitRevenue' as 'Valeur';q06 = filter base by 'RowMonth' <= "06";q06 = foreach q06 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-06" as 'YearMonth', 'SplitRevenue' as 'Valeur';q07 = filter base by 'RowMonth' <= "07";q07 = foreach q07 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-07" as 'YearMonth', 'SplitRevenue' as 'Valeur';q08 = filter base by 'RowMonth' <= "08";q08 = foreach q08 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-08" as 'YearMonth', 'SplitRevenue' as 'Valeur';q09 = filter base by 'RowMonth' <= "09";q09 = foreach q09 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-09" as 'YearMonth', 'SplitRevenue' as 'Valeur';q10 = filter base by 'RowMonth' <= "10";q10 = foreach q10 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-10" as 'YearMonth', 'SplitRevenue' as 'Valeur';q11 = filter base by 'RowMonth' <= "11";q11 = foreach q11 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-11" as 'YearMonth', 'SplitRevenue' as 'Valeur';q12 = filter base by 'RowMonth' <= "12";q12 = foreach q12 generate 'MoisLabel' as 'MoisLabel', 'RowMonth' as 'RowMonth', 'Year' + "-12" as 'YearMonth', 'SplitRevenue' as 'Valeur';q = union q01, q02, q03, q04, q05, q06, q07, q08, q09, q10, q11, q12;q = group q by ('MoisLabel', 'RowMonth', 'YearMonth');q = foreach q generate  'MoisLabel' as 'MoisLabel',  'YearMonth' as 'YearMonth',  sum('Valeur') as 'SplitRevenue';q = order q by ('MoisLabel' asc, 'YearMonth' asc);q = limit q 2000;
4 answers
  1. May 4, 6:35 AM

    Thanks for the details, @Diana Ocheredko

    When I understand the query correctly, the March row aggregates the values from Jan, Feb and Mar already. Wouldn't totaling these values again mean a double count? 

    If so, you would have to create another row with something like "00-Total" to your table, which shows the max value of the column, right?

0/9000

I am encountering SAQL errors with my 'previous month' and 'WTD' (Week-to-Date) logic. I am currently building a dashboard with three charts—daily, weekly, and monthly—and the objective is to use a single toggle filter to control all of them. I need the dashboard to dynamically switch between the current month, previous month, and previous years.

I’ve tried using different selection bindings on the calendar dates, but I’m hitting SAQL limitations; the script works for the current month but breaks when rolling back to previous months.  

my question is:  

  • Is there a way to achieve this using the UI 'Date' transformations instead of heavy SAQL?
  • How do you handle 'Previous Month' logic so the MTD chart shows the full previous month rather than just 'today’s day' of that month?
  • Are there performance 'gotchas' when binding a single static toggle to three different charts with different groupings (Day vs. Week vs. Month)?" 
4 answers
  1. Divya Chauhan (Kcloud Technologies) Forum Ambassador
    Apr 29, 4:56 AM

    Hello @Jhon Damagan

     Can you do it with only UI Date transformations?

    Partially.

    You can use a static toggle + UI relative dates for basic Current/Previous Month, but full Previous Month (not MTD) and clean switching across daily/weekly/monthly charts is difficult without some SAQL or pre-computed fields.

     How to handle "Previous Month" so MTD chart shows full previous month?

    This is the main issue.

    UI "Previous Month" usually gives Previous MTD (up to same day), not the full month.

    Best solutions:

     Recommended: Add computed flags in the Recipe (e.g., Previous_Month_Full_Flag, Current_Month_Flag).

     Use SAQL date math to calculate 1st and last day of previous month.

     Or use a hidden step that converts toggle selection into proper min/max date range.

     Performance gotchas with one toggle bound to 3 charts?

    Yes, some risks:

    Dynamic bindings + different groupings (Day/Week/Month) can slow down the dashboard.

    Avoid heavy SAQL in all three charts.

    Best practice: Use one toggle --> hidden date calculator step --> bind to all charts. Pre-aggregate date flags in Recipe for better performance.

0/9000

Hello Everyone,

 

Can we show the Row Index Column in Compare table? I made the change in JSON   "showRowIndex": true, but I didn't see the index column in the table. Can you please share your valuable thoughts?

 

Thanks in advance!

 

@* CRM Analytics (fka Tableau CRM) *

2 answers
  1. Apr 29, 2:38 PM

    I'd just do a running total while keeping the grouping intact and put the column in a place that can be made for a selection, like in front of the measures.  This could drive a popup table etc.

0/9000

Hi, I am looking for advice on formatting phone numbers in a recipe. Phone records in Salesforce display with the expected formatting (555) 111-2222 x. 123. However, the phone #'s in the recipe are non-formatted text fields, ex. 5551112222123. Any tips on how to re-format the phone numbers would be greatly appreciated! I do not have a technical background and am stumped on this.

2 answers
  1. Apr 27, 8:09 PM

    Try this:

    concat(

    '(', substr(Phone_Field, 1, 3), ') ',

    substr(Phone_Field, 4, 3), '-',

    substr(Phone_Field, 7, 4),

    case

    when length(Phone_Field) > 10

    then concat(' ext. ', substr(Phone_Field, 11, length(Phone_Field) - 10))

    else ''

    end

    )

0/9000