Top 100 Salesforce CRM Analytics (CRMA) Interview Questions 2026 | SAQL, Dataflows, Einstein Discovery
📅 CRMA
📊 Analytics Interview Prep 2026
Salesforce CRM Analytics (CRMA)
Interview Questions 2026
Interview Questions 2026
100 Salesforce CRM Analytics interview questions — Architecture, Datasets, Dataflows, Recipes, SAQL, Dashboard Design, Security, Einstein Discovery & Scenarios. The most comprehensive free CRMA prep resource. Beat ForceLearn's 100 questions with deeper explanations.
100
Questions
9
Sections
All
Levels
100%
Free
📋 Jump to Section
🔗 Related Salesforce Interview Prep
☁️ Section 1 — CRM Analytics Fundamentals
Q1–Q15 · Basic to Intermediate · Asked in Every CRMA Interview
Q1
What is Salesforce CRM Analytics (CRMA) and how has it evolved?
✅ Direct Answer
CRM Analytics (formerly Einstein Analytics, then Tableau CRM) is Salesforce's native cloud-based BI and analytics platform. It processes data from Salesforce objects and external sources into optimized datasets for interactive dashboards and AI-powered insights — all within Salesforce without a separate BI tool.
💡 Why?
Unlike Salesforce Reports limited to 2,000 records, CRMA handles millions of rows with sub-second performance. The evolution: Einstein Analytics (2014) → Tableau CRM (2021) → CRM Analytics (2022). Same platform, rebranded to reflect its native Salesforce positioning.
🌍 Real World Example
At XYZ Company, sales managers needed to analyze 2M+ opportunity records across 15 territories simultaneously. Salesforce Reports timed out. CRMA processed all 2M records in under 3 seconds with interactive territory filters, stage analysis, and Einstein win probability scores — embedded directly in the Sales Cloud homepage.
🔑 Key Points for Interviewer
- Full evolution: Einstein Analytics → Tableau CRM → CRM Analytics
- Native to Salesforce — no external BI tool needed
- Handles billions of rows with sub-second query performance
- Supports Salesforce data + external sources (CSV, Snowflake, Redshift)
- Available on mobile — 100% responsive analytics
🎤 One-Line Answer
"CRM Analytics is Salesforce's native BI platform (formerly Einstein Analytics/Tableau CRM) that processes millions of rows into interactive dashboards with AI-powered insights — all within Salesforce."
Q2
What is the difference between CRM Analytics and Salesforce Reports & Dashboards?
✅ Direct Answer
Salesforce Reports: limited to 2,000 displayed records, one object at a time, no AI, no external data. CRM Analytics: handles millions of rows instantly, multi-object datasets, AI predictions via Einstein Discovery, SAQL for complex queries, interactive drill-downs, external data support, and embedded actions from dashboards.
🌍 Real World Example
Reports: "Show me open Opportunities this month" — perfect. CRMA: "Which product lines have declining win rates by territory over 3 years, predict next quarter's revenue by rep, and surface at-risk deals based on engagement patterns" — CRMA handles this in one dashboard. Reports cannot.
🔑 Key Points for Interviewer
- Reports: 2,000 record display limit, simple aggregations
- CRMA: billions of rows, multi-source, AI predictions, SAQL
- CRMA supports external data — CSV, Snowflake, databases
- CRMA has embedded actions — update Salesforce records from dashboard
- Reports free with license; CRMA requires paid add-on
🎤 One-Line Answer
"Reports: 2,000 records, simple aggregations, one object. CRMA: millions of rows, AI predictions, multi-source, complex SAQL — Reports for daily ops, CRMA for enterprise analytics."
Q3
What are the core components of CRM Analytics architecture?
✅ Direct Answer
Core components: Datasets (preprocessed columnar data stores), Lenses (focused views/queries on one dataset), Dashboards (interactive visualizations combining multiple lenses), Apps (containers grouping related assets), Dataflows (JSON ETL pipeline), Recipes (visual drag-and-drop data prep), and SAQL (analytics query language).
🌍 Real World Example
XYZ Company architecture: Dataflow runs nightly — extracts Opportunity + Account + User → joins → creates "Sales_Pipeline" Dataset. Sales Managers open the "Pipeline Analytics" Dashboard in the Sales App — queries the Dataset via SAQL Lenses to show territory performance, stage funnels, and Einstein win scores.
🔑 Key Points for Interviewer
- Dataset: columnar, pre-joined, analytics-optimized
- Lens: single focused query on one dataset
- Dashboard: multiple lenses + widgets + interactivity
- App: container with access control for related assets
- Dataflow: JSON ETL. Recipe: visual no-code data prep
🎤 One-Line Answer
"Dataflows/Recipes prepare data → Datasets store columnar → Lenses query → Dashboards visualize → Apps organize — all within Salesforce's security model."
Q4
What is a Dataset in CRM Analytics and how is it different from a Salesforce Object?
✅ Direct Answer
Dataset: preprocessed, denormalized, columnar data store optimized for fast analytics. Unlike Salesforce Objects (row-based relational database), datasets pre-join and flatten multiple objects into one structure — enabling sub-second queries on millions of rows without real-time database joins.
🌍 Real World Example
SOQL query on 2M opportunities joining Account and User = slow. Dataset equivalent: one row already contains Opp_Amount, Account_Name, Account_Industry, Owner_Name pre-joined. SAQL returns in 200ms for 2M rows. Pre-computation is the key to CRMA's speed.
🔑 Key Points for Interviewer
- Dataset: denormalized, columnar, pre-joined, analytics-optimized
- Salesforce Object: normalized, row-based, transactional
- Datasets NOT real-time — refreshed on Dataflow/Recipe schedule
- Max dataset size depends on license (standard: 250M rows)
- External data uploadable as datasets (CSV, up to 40 GB)
🎤 One-Line Answer
"Dataset is pre-joined columnar data store — sacrifices real-time freshness for sub-second query performance on millions of rows. Salesforce Objects are normalized relational, CRMA Datasets are denormalized analytical."
Q5
What is the difference between CRM Analytics (Tableau CRM) and Tableau?
✅ Direct Answer
CRM Analytics: native Salesforce, inherits security model, CRM-optimized, embedded in Salesforce pages, Einstein Discovery AI built-in. Tableau: standalone BI tool (acquired 2019), connects any data source, enterprise-grade visualizations for cross-system reporting outside Salesforce.
🌍 Real World Example
CRMA: Sales team views pipeline analytics embedded on Salesforce Home — inherits security (reps see only their data), no separate login. Tableau: Finance connects Salesforce + ERP + HR + Excel for board-level P&L — needs separate Tableau license and tool.
🔑 Key Points for Interviewer
- CRMA: native Salesforce, security inherited, CRM-optimized, Einstein AI
- Tableau: standalone, any data source, enterprise visualizations
- Both part of Salesforce analytics portfolio
- CRMA for Salesforce-first; Tableau for cross-enterprise BI
🎤 One-Line Answer
"CRMA is native Salesforce BI with built-in security and Einstein AI. Tableau is standalone enterprise BI connecting any source — use CRMA for CRM analytics, Tableau for cross-enterprise reporting."
Q6
What is SAQL and how does it differ from SOQL?
✅ Direct Answer
SAQL: queries CRMA datasets, compositional (chains statements), returns aggregated results, used in dashboard lenses. SOQL: queries Salesforce object database, returns individual records, used in Apex and APIs. Different engines, different purposes — SAQL on columnar analytical engine, SOQL on relational transactional database.
🌍 Real World Example
// SOQL - individual records
SELECT Id, Amount, StageName FROM Opportunity WHERE IsClosed = false
// SAQL - aggregated analytics
q = load "Sales_Pipeline";
q = filter q by IsClosed == "false";
q = group q by StageName;
q = foreach q generate StageName as Stage, sum(Amount) as Total, count() as Count;
q = order q by Total desc;
🔑 Key Points for Interviewer
- SAQL: datasets, aggregated, compositional, analytics engine
- SOQL: Salesforce objects, individual records, relational DB
- SAQL uses load/filter/group/foreach/order statements
- SAQL sub-second on millions; SOQL slows on large volumes
🎤 One-Line Answer
"SAQL queries CRMA datasets for aggregated analytics using compositional statements. SOQL queries Salesforce objects for individual records — different engines, different purposes."
Q7
What is a Lens in CRM Analytics?
✅ Direct Answer
A Lens is a focused exploration of a single dataset — a saved query and visualization answering one analytical question. It's the atomic analytics unit in CRMA. Lenses are reusable — the same lens can be embedded in multiple dashboards. Users can interactively modify lenses to drill down into data.
🎤 One-Line Answer
"A Lens is a saved query + visualization on one dataset — reusable across multiple dashboards, the atomic unit of CRMA analytics."
Q8
What is a CRMA App and what are default apps provided by Salesforce?
✅ Direct Answer
CRMA App containers group related datasets, lenses, and dashboards. Default apps: My Private App (personal, only you see it), Shared App (all CRMA users). Salesforce also provides template apps: Sales Analytics, Service Analytics, B2B Marketing Analytics, Revenue Intelligence — pre-built with 15+ dashboards.
🔑 Key Points for Interviewer
- My Private App: personal workspace, invisible to others
- Shared App: visible to all CRMA-licensed users
- App sharing: Viewer (read), Editor (modify), Manager (admin)
- Template Apps: pre-built industry solutions from Salesforce
🎤 One-Line Answer
"CRMA Apps group analytics assets — My Private (personal), Shared (everyone), custom apps with Viewer/Editor/Manager access. Template Apps like Sales Analytics deploy 15+ dashboards instantly."
Q9
What is Data Sync in CRM Analytics?
✅ Direct Answer
Data Sync extracts Salesforce object data into CRMA local storage on a schedule — creating a local copy that Dataflows and Recipes read from instead of calling Salesforce APIs each run. Incremental sync copies only new/changed records. Dramatically reduces Dataflow run time for large orgs.
🌍 Real World Example
Without Data Sync: Dataflow extracts 2M Opportunity records via API each run = 45 minutes. With Data Sync: hourly incremental copies only changed records. Dataflow reads local copy = 3 minutes. 15x faster. API limits preserved.
🎤 One-Line Answer
"Data Sync creates local CRMA copies of Salesforce objects via incremental refresh — Dataflows read local instead of calling APIs, dramatically reducing refresh time for large orgs."
Q10
What are the different ways to load data into CRM Analytics?
✅ Direct Answer
Four methods: 1) Dataflow — JSON ETL from Salesforce objects. 2) Recipe — visual drag-and-drop data prep. 3) External Data API — upload CSV files up to 40 GB. 4) Direct Data — live query to Snowflake, Redshift, BigQuery without importing.
🔑 Key Points for Interviewer
- Dataflow: Salesforce objects, JSON, max 24 runs/day
- Recipe: visual, any source, more transformations
- External Data API: CSV, REST API, max 40 GB/file
- Direct Data: live query, no import, no storage cost
🎤 One-Line Answer
"Four data loading methods: Dataflow (Salesforce JSON ETL), Recipe (visual prep), External Data API (CSV upload), Direct Data (live external DB) — choose based on source and freshness needs."
Q11
What CRMA licenses are required to access CRM Analytics?
✅ Direct Answer
Two license types: CRM Analytics Plus (full platform — create datasets, dashboards, Einstein Discovery, dataflows) and CRM Analytics Growth (lighter — view dashboards, limited creation). Permission Sets: CRM Analytics Plus Admin, CRM Analytics Plus User, CRM Analytics Viewer. Three layers: License + Permission Set + App Sharing.
🎤 One-Line Answer
"CRMA needs platform license (Plus/Growth) + Permission Set (Admin/User/Viewer) + App sharing — three-layer access model for fine-grained analytics governance."
Q12
What are CRMA Template Apps and when should you use them?
✅ Direct Answer
Template Apps are pre-built CRMA apps for specific clouds: Sales Analytics (pipeline, forecasting, rep performance), Service Analytics (case metrics, SLA), B2B Marketing Analytics (campaign attribution), Revenue Intelligence (AI deal insights). Deploy in hours with 15+ pre-built dashboards rather than building from scratch.
🎤 One-Line Answer
"Template Apps deploy 15+ pre-built dashboards in hours — Sales, Service, B2B Marketing Analytics. Customize on top rather than building from scratch. Requires clean Salesforce data quality."
Q13
What is Direct Data in CRM Analytics?
✅ Direct Answer
Direct Data enables live querying of external databases (Snowflake, Amazon Redshift, Google BigQuery, Databricks) directly from CRMA without importing data. CRMA pushes queries to the external DB and displays results. Real-time access without ETL overhead — ideal for petabyte-scale data that can't be copied.
🎤 One-Line Answer
"Direct Data queries Snowflake/Redshift/BigQuery live from CRMA — no import, no storage cost, real-time freshness. Ideal for petabyte-scale external data."
Q14
What are the three field types in CRM Analytics datasets?
✅ Direct Answer
Three types: Dimension (text-based, used for grouping and filtering — StageName, Region, Owner), Measure (numeric, used for aggregation — Amount, Count, Revenue), Date (date/datetime for time-series and range filtering). Misclassifying a Measure as Dimension breaks all aggregation calculations.
🎤 One-Line Answer
"Three field types: Dimension (text, grouping), Measure (numeric, aggregation), Date (temporal, time-series) — classifying wrong breaks analytics. Measure stored as Dimension = can't sum or average it."
Q15
How does CRM Analytics inherit Salesforce security?
✅ Direct Answer
CRMA inherits Salesforce sharing via Sharing Inheritance — when enabled, applies same record-level security (OWD, role hierarchy, sharing rules). Users see only analytics data they can see in Salesforce. For complex patterns or users with >3,000 visible records, use Row Level Security (RLS) predicates — custom SAQL-based security.
🎤 One-Line Answer
"CRMA inherits Salesforce security via Sharing Inheritance — same OWD/roles/sharing auto-applied. For complex patterns or high-volume users, use RLS predicates with custom SAQL expressions."
🗄️ Section 2 — Datasets & Data Manager
Q16–Q25 · Intermediate · Data Architecture
Q16
What is the difference between a full refresh and incremental refresh in CRMA?
✅ Direct Answer
Full Refresh: rebuilds entire dataset from scratch — slow but accurate, handles deleted records. Incremental Refresh: processes only records changed since last run (via LastModifiedDate) — fast but doesn't remove deleted records. Best practice: incremental frequently + full refresh weekly.
🎤 One-Line Answer
"Full refresh = complete rebuild, handles deletes, slower. Incremental = delta only, faster, misses deletes. Best practice: run incremental hourly, full refresh weekly to clean deleted records."
Q17
What is dataset versioning and why is it important?
✅ Direct Answer
Dataset versioning maintains multiple historical versions of a dataset — each successful Dataflow run creates a new version. If a bad run produces corrupt data, you can roll back to the previous version instantly without rebuilding. Versions retained up to 28 days by default.
🎤 One-Line Answer
"Dataset versioning keeps previous Dataflow run results — if a bad run corrupts data, roll back to previous version in seconds. 28-day version history available via Data Manager."
Q18
What is an XMD (Extended Metadata) file in CRM Analytics?
✅ Direct Answer
XMD is a JSON file defining display properties for dataset fields — custom labels, number formats, colors, fiscal year settings, conditional formatting. Purely presentation layer — no data changes. Applied automatically when any field is used in a lens or dashboard.
🎤 One-Line Answer
"XMD JSON defines display properties — labels, formats, colors, conditional formatting for dataset fields. Purely cosmetic, no data changes, auto-applied in all lenses and dashboards."
Q19
How do you handle deleted records in CRM Analytics datasets?
✅ Direct Answer
CRMA doesn't automatically remove deleted records until next full refresh. Best practices: add IsDeleted = false filter in Dataflow sfdcDigest, run full refreshes weekly to clean deleted records, use soft-delete flags (IsDeleted__c = false) for custom objects.
🎤 One-Line Answer
"Deleted records persist until next full refresh — add IsDeleted = false filter in sfdcDigest and run weekly full refresh to remove them. Incremental refresh alone doesn't clean deleted records."
Q20
How do you optimize dataset performance in CRM Analytics?
✅ Direct Answer
Key optimizations: minimize fields (only include what dashboards need), filter rows early in Dataflow, use Data Sync for incremental refreshes, use compact field names, partition large datasets by date, create aggregate datasets for summary-only dashboards.
🌍 Real World Example
Dataset had 180 fields but dashboards used 25. Removed 155 unused fields → dataset size -70%. Added date filter (last 3 years) → rows 5M to 1.8M. Dashboard load: 4 seconds → 0.8 seconds.
🎤 One-Line Answer
"Optimize by minimizing fields, filtering rows early in Dataflow, using incremental sync, and creating aggregate datasets for summary dashboards — less data = faster queries."
Q21
How do you deploy CRM Analytics assets between environments?
✅ Direct Answer
Three methods: Change Sets (dashboards, lenses, dataflows — not dataset data), Metadata API/SFDX (source-controlled, preferred for DevOps), Analytics Templates (package entire app for multi-org). Dataset data must be rebuilt in target org by running Dataflows after deployment.
🎤 One-Line Answer
"Deploy CRMA assets via Change Sets, SFDX, or Analytics Templates — asset metadata deploys but dataset data must be rebuilt by running Dataflows in the target environment."
Q22
What is the role of Data Manager in CRM Analytics?
✅ Direct Answer
Data Manager is CRMA's admin control center — monitor Dataflow/Recipe run history (success/failure/logs), manage dataset versions and rollbacks, configure Data Sync schedules, view dataset details, schedule refresh jobs, and monitor data health. Primary tool for all CRMA data operations.
🎤 One-Line Answer
"Data Manager is CRMA's control center — monitor Dataflow/Recipe runs, manage dataset versions, configure Data Sync schedules, and troubleshoot pipeline failures from one central location."
Q23
What naming conventions should you follow for CRMA assets?
✅ Direct Answer
Best practice: Datasets — descriptive with version (Sales_Pipeline_v2). Recipes — rc_ prefix (rc_opportunity_clean). Dataflows — df_ prefix (df_sales_pipeline). Fields — human-readable labels in XMD, snake_case API names. Consistent prefixes enable faster debugging and team collaboration.
🎤 One-Line Answer
"Use ds_ for datasets, rc_ for recipes, df_ for dataflows — consistent prefixes with descriptive names and version numbers make debugging faster and teams more productive."
Q24
What is the maximum file size for external data upload in CRM Analytics?
✅ Direct Answer
Maximum 40 GB per file via External Data API. Format must be CSV with UTF-8 encoding. Requires accompanying metadata JSON to define field types and names. Files over 10 MB require multipart upload. For larger volumes, use Recipes with external connectors instead.
🎤 One-Line Answer
"Maximum 40 GB CSV per external data upload — requires metadata JSON for schema, multipart upload for files over 10 MB. Use Recipes with connectors for larger or recurring data loads."
Q25
What is the Dataset Builder in CRM Analytics?
✅ Direct Answer
Dataset Builder is a point-and-click UI for creating simple single-object datasets without JSON Dataflow code. Select object, choose fields, add basic filters — Salesforce auto-generates the underlying Dataflow JSON. Limitation: one object only. Use Recipe or Dataflow JSON for multi-object joins.
🎤 One-Line Answer
"Dataset Builder creates single-object datasets via point-and-click — no JSON. For multi-object joins or complex transformations, use Recipe or Dataflow JSON instead."
🔄 Section 3 — Dataflows & Recipes
Q26–Q40 · Intermediate to Advanced · Most Asked Technical Topic
Q26
What is a Dataflow in CRM Analytics? What are the core transformation nodes?
✅ Direct Answer
Dataflow is a JSON-based ETL pipeline — sequence of transformation nodes that extract, transform, and load data into CRMA datasets. Core nodes: sfdcDigest (extract from Salesforce), augment (LEFT JOIN), computeExpression (calculated fields), filter (WHERE clause), sfdcRegister (save as dataset), edgemart (read existing dataset).
🌍 Real World Example
// Simplified Dataflow JSON structure
{
"Extract_Opps": { "action": "sfdcDigest",
"parameters": { "object": "Opportunity",
"fields": [{"name": "Id"},{"name": "Amount"},{"name": "StageName"},{"name": "AccountId"}]}},
"Extract_Accounts": { "action": "sfdcDigest",
"parameters": { "object": "Account",
"fields": [{"name": "Id"},{"name": "Name"},{"name": "Industry"}]}},
"Join_Opp_Account": { "action": "augment",
"parameters": { "left": "Extract_Opps", "right": "Extract_Accounts",
"left_key": ["AccountId"], "right_key": ["Id"], "relationship": "Account"}},
"Save": { "action": "sfdcRegister",
"parameters": { "source": "Join_Opp_Account", "name": "Sales_Pipeline", "label": "Sales Pipeline"}}
}
🎤 One-Line Answer
"Dataflow is JSON ETL — sfdcDigest extracts, augment joins, computeExpression calculates, filter reduces rows, sfdcRegister saves to dataset. Runs up to 24 times per day org-wide."
Q27
What is the difference between a Dataflow and a Recipe?
✅ Direct Answer
Dataflow: JSON-based, requires technical knowledge, faster for Salesforce object processing, max 24 runs/day. Recipe: visual drag-and-drop UI, no-code, supports more data sources (external files, connected sources), more transformation types (pivot, deduplicate, bucket, append). Salesforce's strategic direction is Recipes.
🔑 Key Points for Interviewer
- Dataflow: JSON, technical, Salesforce objects, 24 runs/day limit
- Recipe: visual, any source, more transformations
- Recipes support pivot, deduplicate, bucket, append, flatten
- Dataflows faster for large Salesforce object processing
- Salesforce strategic direction: Recipes for all new data prep
🎤 One-Line Answer
"Dataflow: JSON-based fast Salesforce ETL. Recipe: visual drag-and-drop any data source. Recipes are Salesforce's strategic direction — more flexible, more transformations, no JSON required."
Q28
What is the augment transformation and how does it work?
✅ Direct Answer
Augment performs a LEFT JOIN — adds columns from the right dataset to the left dataset where keys match. All left rows are retained (non-matching get null values for right columns). The "relationship" parameter prefixes right-side field names in the output. Chain multiple augments for complex multi-object datasets.
🎤 One-Line Answer
"Augment is LEFT JOIN — all left rows retained, right-side columns added where keys match. Use 'relationship' prefix to namespace right-side fields. Chain multiple augments for multi-object datasets."
Q29
What is computeExpression and what can you calculate with it?
✅ Direct Answer
computeExpression adds calculated fields to a dataset using SAQL expression syntax. Can compute: date differences (date_diff), string concatenation (concat), mathematical formulas, conditional logic (case when/then/end), type conversions, and derived categories. Results become permanent fields in the dataset.
🌍 Real World Example
"computedFields": [
{"name": "DaysToClose", "type": "Numeric",
"saqlExpression": "date_diff(\"day\", toDate(CreatedDate_sec_epoch), toDate(CloseDate_sec_epoch))"},
{"name": "DealSize", "type": "Text",
"saqlExpression": "case when Amount >= 100000 then \"Enterprise\" when Amount >= 10000 then \"Mid-Market\" else \"SMB\" end"},
{"name": "RepFullName", "type": "Text",
"saqlExpression": "concat(Owner.FirstName, \" \", Owner.LastName)"}
]
🎤 One-Line Answer
"computeExpression adds calculated fields using SAQL — date diffs, case statements, string concat, math — creating new dimensions and measures permanently in the dataset."
Q30
What is the Flatten transformation and when do you use it?
✅ Direct Answer
Flatten converts hierarchical self-referential data (like Role Hierarchy) into flat rows — each row gets all ancestor values as separate columns. Most common use: Salesforce Role Hierarchy for manager roll-up analytics. Enables "show all deals under VP Sales" type filters that traverse the full hierarchy.
🎤 One-Line Answer
"Flatten converts hierarchical Role Hierarchy to flat rows with ancestor columns — enables true hierarchy roll-up in dashboards where each rep row contains all manager levels above them."
Q31
What transformations are available in CRM Analytics Recipes?
✅ Direct Answer
Recipe transformations: Add Formula (calculated fields), Filter (row filtering), Join (inner/left/right/full), Bucket (group values into categories), Flatten (hierarchy to flat), Deduplicate (remove duplicates), Pivot (rows to columns), Unpivot (columns to rows), Aggregate (group + aggregate), Append (union datasets), Transform (advanced SAQL).
🎤 One-Line Answer
"Recipes offer 12+ transformations: Join, Filter, Bucket, Flatten, Deduplicate, Pivot, Aggregate, Append — all visual, no-code, supporting external data sources that Dataflows can't handle."
Q32
What is the edgemart action in a Dataflow?
✅ Direct Answer
edgemart reads from a previously registered CRMA dataset as Dataflow input — enables Dataflow chaining. Use to read pre-processed datasets as lookup tables or combine existing datasets with new Salesforce object data. Much faster than re-extracting the same object data via sfdcDigest.
🎤 One-Line Answer
"edgemart reads an existing CRMA dataset as Dataflow input — enables chaining where pre-processed datasets serve as lookup tables, much faster than re-extracting the same source data."
Q33
What is the maximum number of Dataflow runs allowed per day?
✅ Direct Answer
24 Dataflow runs per 24-hour rolling period — shared across ALL Dataflows in the org, not 24 per Dataflow. Manual runs count toward this limit. Data Sync runs do NOT count. Recipes have a separate limit. Plan schedules carefully across all Dataflows to stay within 24 total.
🎤 One-Line Answer
"24 total Dataflow runs per 24-hour period — org-wide, all Dataflows combined including manual runs. Data Sync and Recipes have separate limits."
Q34
How do you handle NULL values in CRM Analytics Dataflows?
✅ Direct Answer
Use computeExpression with case statements: for Dimensions replace NULL with "Unknown" or "Not Assigned"; for Measures replace NULL with 0. Filter out NULL join key fields before augment to avoid unexpected LEFT JOIN nulls. In SAQL, use == null (not IS NULL like SQL).
🎤 One-Line Answer
"Replace NULL dimensions with 'Unknown' and NULL measures with 0 using computeExpression case statements. Filter NULL join keys before augment to prevent unexpected null rows in joined datasets."
Q35
How do you debug a failed Dataflow in CRM Analytics?
✅ Direct Answer
Debug via Data Manager → Dataflows → select Dataflow → Run History → click failed run → view error log. Error log identifies which node failed and specific error. Common causes: field deleted from Salesforce object, API limits exceeded, timeout on large extraction, invalid JSON syntax. Set up email alerts for proactive failure notification.
🎤 One-Line Answer
"Debug in Data Manager → Run History → Error Log — identifies failing node and cause. Common errors: deleted fields, API limits, timeout. Set email alerts for proactive failure detection."
Q36
What is computeRelative in a Dataflow?
✅ Direct Answer
computeRelative calculates window function equivalents — running totals, rankings, period-over-period comparisons. Uses partition (GROUP BY equivalent) and order (ORDER BY equivalent) parameters. Like SQL OVER(PARTITION BY ... ORDER BY ...). Used for cumulative revenue, rep rankings, and rolling averages.
🎤 One-Line Answer
"computeRelative implements SQL window functions in Dataflow — running totals, rankings, cumulative values using partition and order parameters. Essential for period-over-period and ranking analytics."
Q37
What is sliceDataset in a Dataflow?
✅ Direct Answer
sliceDataset selects specific columns from a dataset — column projection equivalent (SELECT specific fields). Use before sfdcRegister to minimize final dataset width by removing unused fields. Reduces storage cost and improves query performance. Best practice: always slice to only needed fields before registration.
🎤 One-Line Answer
"sliceDataset projects specific columns — use before sfdcRegister to store only fields dashboards actually use. Reduces dataset size and query time significantly."
Q38
How do you schedule Dataflows and Recipes in CRM Analytics?
✅ Direct Answer
Schedule via Data Manager UI (hourly, daily, weekly options) or trigger via Analytics REST API for event-driven refreshes. Org limit: 24 total Dataflow runs per 24-hour period. Plan schedules to avoid peak Salesforce API usage. Chain Dataflows using API trigger when first completes.
🎤 One-Line Answer
"Schedule via Data Manager UI or trigger via Analytics REST API. 24 Dataflow runs/day org limit — plan schedules carefully across all Dataflows to stay within limit."
Q39
What is the Bucket transformation in Recipes?
✅ Direct Answer
Bucket groups continuous values into discrete categories — similar to SQL CASE WHEN. Example: Lead_Score 0-40 = "Cold", 41-70 = "Warm", 71-100 = "Hot". Creates a new dimension field from a measure. Enables segmentation analytics without writing SAQL computeExpression code.
🎤 One-Line Answer
"Bucket groups continuous measures into discrete categories — Lead Score 0-40 'Cold', 41-70 'Warm', 71-100 'Hot'. Visual alternative to writing SAQL case statements in computeExpression."
Q40
What is the sfdcDigest transformation and what key parameters does it have?
✅ Direct Answer
sfdcDigest extracts data from a Salesforce object — the SELECT + FROM of Dataflow. Key parameters: object (API name), fields (list of field names to extract), condition (SOQL-like filter to reduce rows), relationship_fields (traverse lookup relationships). For locally synced data, use "action": "edgemart" instead.
🎤 One-Line Answer
"sfdcDigest extracts Salesforce object data — specify object, fields, condition filter, and relationship traversal. Always include only needed fields and filter early for fastest Dataflow performance."
🔍 Section 4 — SAQL (Salesforce Analytics Query Language)
Q41–Q55 · Advanced · Differentiates Senior from Junior Candidates
Q41
What are the basic SAQL building blocks and write a complete query?
✅ Direct Answer
SAQL is compositional — each statement feeds the next via variable assignment. Statements: load (dataset), filter (WHERE), group (GROUP BY), foreach + generate (SELECT with aliases and aggregates), order (ORDER BY), limit (LIMIT), offset (SKIP rows).
🌍 Real World Example
// Top 5 Sales Reps by Won Revenue this year
q = load "Sales_Pipeline";
q = filter q by CloseDate_Year == "2026";
q = filter q by IsWon == "true";
q = group q by OwnerName;
q = foreach q generate
OwnerName as "Sales Rep",
sum(Amount) as "Total Revenue",
count() as "Deals Won",
avg(Amount) as "Avg Deal";
q = order q by "Total Revenue" desc;
q = limit q 5;
🎤 One-Line Answer
"SAQL chains: load → filter → group → foreach generate → order → limit. Each statement's output feeds the next — compositional design enables readable, maintainable analytics queries."
Q42
What aggregate functions are available in SAQL?
✅ Direct Answer
SAQL aggregates: sum() (total), count() (rows), avg() (average), min() (minimum), max() (maximum), count_distinct() (unique values), median() (middle value), percentile(field, N) (Nth percentile), variance(), std_deviation(). All require a group statement first and are used in foreach generate.
🎤 One-Line Answer
"SAQL aggregates: sum, count, avg, min, max, count_distinct, median, percentile — all require group first. count_distinct for unique customer/account counting; percentile for statistical distribution analysis."
Q43
How do you write SAQL for time-series analysis (monthly revenue trend)?
🌍 Real World Example
// Monthly revenue trend - last 12 months
q = load "Sales_Pipeline";
q = filter q by IsWon == "true";
q = filter q by CloseDate_sec_epoch >= date(2025, 5, 1);
// Group by month using date formatting
q = group q by (date_to_string(toDate(CloseDate_sec_epoch), "YYYY-MM")) as Month;
q = foreach q generate
Month as "Month",
sum(Amount) as "Revenue",
count() as "Deals";
q = order q by Month asc;
// For quarter grouping: "YYYY-[Q]Q"
// For year grouping: "YYYY"
🎤 One-Line Answer
"Time-series SAQL: date_to_string(toDate(field_sec_epoch), 'YYYY-MM') for month grouping. Dates stored as _sec_epoch, filter with date(year, month, day), order ascending for trend charts."
Q44
What is cogroup in SAQL and when do you use it?
✅ Direct Answer
cogroup joins two SAQL result sets at query time on matching keys — like a runtime JOIN. Used for actual vs target comparisons, period-over-period analysis, or blending two datasets without pre-joining in a Dataflow. Slower than pre-joined datasets but flexible for ad-hoc analysis.
🌍 Real World Example
// Actual vs Target comparison
q_actual = load "Sales_Pipeline";
q_actual = filter q_actual by IsWon == "true";
q_actual = group q_actual by Region;
q_actual = foreach q_actual generate Region as Region, sum(Amount) as Actual;
q_target = load "Sales_Targets";
q_target = group q_target by Region;
q_target = foreach q_target generate Region as Region, sum(Target_Amount) as Target;
q = cogroup q_actual by Region, q_target by Region;
q = foreach q generate
q_actual.Region as "Region",
sum(q_actual.Actual) as "Actual Revenue",
sum(q_target.Target) as "Target Revenue",
(sum(q_actual.Actual) / sum(q_target.Target)) * 100 as "Achievement %";
🎤 One-Line Answer
"cogroup joins two SAQL datasets at runtime — use for actual vs target and period comparisons. Pre-join in Dataflow augment for better performance on frequently used joins."
Q45
What are SAQL date functions and how do you work with dates?
🌍 Real World Example
// Key SAQL date functions
toDate(CloseDate_sec_epoch) // Convert epoch to date
date_to_string(toDate(field_sec_epoch), "YYYY-MM") // Format for grouping
date(2026, 1, 1) // Create date literal
date_diff("day", toDate(Created_sec_epoch), toDate(Close_sec_epoch)) // Days difference
now() // Current timestamp
now() - 30*24*60*60 // 30 days ago in seconds
🎤 One-Line Answer
"CRMA dates stored as _sec_epoch — toDate() converts, date_to_string() formats for grouping, date_diff() calculates duration, now() for relative filters like 'last 30 days'."
Q46
How do you write a period-over-period comparison in SAQL (this year vs last year)?
🌍 Real World Example
// This Year vs Last Year by Month
q_ty = load "Sales_Pipeline";
q_ty = filter q_ty by IsWon == "true" && CloseDate_sec_epoch >= date(2026,1,1) && CloseDate_sec_epoch < date(2027,1,1);
q_ty = group q_ty by (date_to_string(toDate(CloseDate_sec_epoch), "MM")) as Month;
q_ty = foreach q_ty generate Month as Month, sum(Amount) as TY;
q_ly = load "Sales_Pipeline";
q_ly = filter q_ly by IsWon == "true" && CloseDate_sec_epoch >= date(2025,1,1) && CloseDate_sec_epoch < date(2026,1,1);
q_ly = group q_ly by (date_to_string(toDate(CloseDate_sec_epoch), "MM")) as Month;
q_ly = foreach q_ly generate Month as Month, sum(Amount) as LY;
q = cogroup q_ty by Month, q_ly by Month;
q = foreach q generate q_ty.Month as "Month",
sum(q_ty.TY) as "This Year", sum(q_ly.LY) as "Last Year",
((sum(q_ty.TY) - sum(q_ly.LY)) / sum(q_ly.LY)) * 100 as "YoY Growth %";
🎤 One-Line Answer
"Period comparison: load dataset twice with different year filters, group both by common period (Month), cogroup to compare side-by-side with calculated YoY growth percentage."
Q47
What are the key SAQL string functions?
🌍 Real World Example
concat(FirstName, " ", LastName) // "John Smith"
upper(StageName) // "CLOSED WON"
lower(Email) // normalize for matching
substr(AccountId, 0, 3) // First 3 chars
length(Name) // Character count
matches(Email, ".*@gmail\\.com") // Pattern match (regex-like)
trim(Name) // Remove whitespace
replace(Phone, "-", "") // Remove dashes
🎤 One-Line Answer
"Key SAQL string functions: concat, upper/lower, substr, length, matches, trim, replace — use in computeExpression for data cleansing or foreach generate for display formatting."
Q48
What is the difference between pre-aggregation and post-aggregation filtering in SAQL?
✅ Direct Answer
Pre-aggregation filter: applied with "filter" statement BEFORE group — reduces rows before grouping (like SQL WHERE). Post-aggregation filter: applied with "filter" AFTER foreach generate — filters on aggregated values (like SQL HAVING). SAQL has no explicit HAVING keyword — filter the foreach result instead.
🎤 One-Line Answer
"Filter before group = pre-aggregation (WHERE). Filter after foreach = post-aggregation (HAVING equivalent). SAQL has no HAVING keyword — filter the foreach result to show only groups meeting criteria."
Q49
How do you use SAQL for running totals (cumulative sum)?
🌍 Real World Example
// Running total revenue by month using computeRelative in Dataflow
// Then in SAQL dashboard query:
q = load "Sales_With_Running_Total"; // Pre-computed in Dataflow
q = group q by Month;
q = foreach q generate
Month as "Month",
sum(MonthlyRevenue) as "Monthly",
sum(RunningRevenue) as "Cumulative"; // Pre-computed field
q = order q by Month asc;
// Or use SAQL window-like approach with offset
// Best practice: compute running totals in Dataflow using computeRelative
// then load the pre-computed field in SAQL dashboard queries
🎤 One-Line Answer
"Best practice: compute running totals in Dataflow using computeRelative transformation, then load the pre-computed cumulative field in SAQL — much faster than computing at query time."
Q50
How do you use SAQL bindings in dashboards for interactivity?
✅ Direct Answer
SAQL bindings connect dashboard widget selections to query parameters — when a user selects a value in a filter widget, the binding dynamically modifies the SAQL query of another widget. Uses {{column(step.selection, ["null"]).asObject()}} syntax. Enables master-detail relationships between dashboard widgets without reloading the page.
🌍 Real World Example
// Dashboard step query with binding to Region filter widget
"query": "q = load \"Sales_Pipeline\";
q = filter q by '{{column(Region_Filter.selection, [\"null\"]).asObject()}}';
q = group q by StageName;
q = foreach q generate StageName as Stage, sum(Amount) as Revenue;"
// When user clicks "North" in Region_Filter widget:
// Binding injects: Region == "North" into the filter
// Chart automatically updates to show only North region data
🎤 One-Line Answer
"SAQL bindings dynamically inject user widget selections into query filters — {{column(step.selection).asObject()}} connects filter widget clicks to chart queries for interactive dashboards."
Q51
What is the difference between == and in operators in SAQL filter?
✅ Direct Answer
== : exact match for single value. in : matches any value in a list — more efficient than multiple == with OR. Also: != (not equal), > / < / >= / <= (comparison operators for measures and dates), matches (regex-like pattern), && (AND), || (OR), ! (NOT).
🌍 Real World Example
// Single value
q = filter q by StageName == "Closed Won";
// Multiple values - use 'in' instead of multiple OR
q = filter q by StageName in ["Prospecting", "Qualification", "Proposal"];
// Combined conditions
q = filter q by StageName in ["Prospecting", "Qualification"]
&& Amount > 10000
&& CloseDate_sec_epoch >= date(2026, 1, 1);
// Pattern matching
q = filter q by matches(Email, ".*@company\\.com");
🎤 One-Line Answer
"== for single exact match, in [list] for multiple values, > < >= <= for ranges, matches for patterns, && || ! for logic — SAQL filter syntax for precise dataset row filtering."
Q52
How do you write a SAQL query for Top N analysis?
🌍 Real World Example
// Top 10 Products by Revenue - with post-aggregation filter
q = load "Sales_Pipeline";
q = filter q by IsWon == "true";
q = group q by ProductName;
q = foreach q generate
ProductName as "Product",
sum(Amount) as "Revenue",
count() as "Units Sold";
q = order q by "Revenue" desc;
q = limit q 10; // Top 10 only
// Bottom 10 (worst performers)
// q = order q by "Revenue" asc;
// q = limit q 10;
// Top 10 with minimum threshold
// q = filter q by "Revenue" > 50000; // Post-aggregation filter
// q = order q by "Revenue" desc;
// q = limit q 10;
🎤 One-Line Answer
"Top N SAQL: group → foreach generate → order by measure desc → limit N. Add post-aggregation filter before limit for minimum threshold. Reverse order for bottom N analysis."
Q53
What is the offset statement in SAQL and when do you use it?
✅ Direct Answer
offset skips a specified number of rows from the result — enables pagination in SAQL queries. Combined with limit: offset 20 + limit 10 = rows 21-30 (page 3 of 10 per page). Used when dashboards need paginated data tables showing large result sets in chunks.
🎤 One-Line Answer
"offset skips N rows — used with limit for pagination: offset 20 + limit 10 = page 3. Enables dashboards to show large tabular datasets in paginated chunks."
Q54
How do you calculate percentages and ratios in SAQL?
🌍 Real World Example
// Win Rate by Stage
q = load "Sales_Pipeline";
q = group q by StageName;
q = foreach q generate
StageName as "Stage",
count() as "Total",
sum(case when IsWon == "true" then 1 else 0 end) as "Won",
// Win Rate percentage
(sum(case when IsWon == "true" then 1 else 0 end) / count()) * 100 as "Win Rate %",
// Revenue share - NOTE: grand total needs cogroup or pre-computed field
sum(Amount) as "Revenue";
// Tip: avoid division by zero
// (case when count() > 0 then (WonCount / count()) * 100 else 0 end)
🎤 One-Line Answer
"Calculate percentages with (numerator / denominator) * 100 in foreach generate. Always guard division by zero with case when count() > 0 else 0 end. Use cogroup for cross-group percentage of total."
Q55
How do you use SAQL for multi-value filtering from dashboard bindings?
🌍 Real World Example
// Single-select binding (one filter value)
"q = filter q by StageName == \"{{cell(Stage_Filter.selection, 0, \"StageName\").asString()}}\";"
// Multi-select binding (multiple filter values)
"q = filter q by '{{column(Stage_Filter.selection, [\"null\"]).asObject()}}';"
// When user selects multiple stages, binding generates:
// StageName in ["Prospecting", "Qualification", "Proposal"]
// Null handling - show all data when no selection made
// [\"null\"] default = returns null match condition when nothing selected
// Effectively shows all records when filter widget has no selection
🎤 One-Line Answer
"Multi-select bindings use column(step.selection, ['null']).asObject() — generates 'in [values]' filter when selections made, null match when nothing selected (shows all data)."
📊 Section 5 — Dashboard Design & Bindings
Q56–Q65 · Intermediate · User Experience & Interactivity
Q56
What are the key widget types available in CRM Analytics dashboards?
✅ Direct Answer
Key widget types: Chart (bar, line, donut, scatter, bubble, heatmap, waterfall), Table (grid with sortable columns), Number (KPI metric), Container (group widgets together), Filter (list/toggle/range/date picker for user selection), Text/Image (static content), Link (navigation), Map (geographic visualization), and Timeline.
🔑 Key Points for Interviewer
- Chart: most versatile — supports 10+ visualization types
- Number widget: KPI display — most impactful for executive dashboards
- Filter widgets: list (multi-select), toggle (on/off), range (slider), date (calendar)
- Container: responsive layout grouping for related widgets
- Map: choropleth (filled regions) or point maps for geographic analytics
🎤 One-Line Answer
"CRMA widgets: Chart (10+ types), Table (sortable grid), Number (KPI), Filter (list/toggle/range/date), Container (layout), Map (geographic), Text, Link, Timeline — combine for interactive analytical dashboards."
Q57
What is the difference between a step and a widget in a CRMA dashboard?
✅ Direct Answer
Step: the data query — defines the SAQL or dataset query, dataset source, and returns data. Widget: the visualization — defines how to display the step's data (chart type, colors, axes, labels). Multiple widgets can subscribe to one step, sharing the same query result. Separating query from visualization enables efficient data reuse.
🎤 One-Line Answer
"Step = data query. Widget = visualization of that data. Multiple widgets subscribe to one step — same query, different visual representations. Separating them enables efficient query reuse."
Q58
What are the different types of bindings in CRM Analytics dashboards?
✅ Direct Answer
Three binding types: Selection binding (user click on widget filters another widget's query), Result binding (uses a query result value in another query — e.g., use max date from one step as filter in another), Column binding (uses entire column values from one step in another step's filter). Together they enable fully interactive, interconnected dashboards.
🔑 Key Points for Interviewer
- Selection binding: most common — click bar → filter related charts
- Result binding: use computed value (max date, total) from step A in step B query
- Column binding: pass multiple values from step A selection to step B filter
- Bindings defined in dashboard JSON or visually in Dashboard Designer
- Faceting: automatic selection binding between all steps on same dataset
🎤 One-Line Answer
"Three binding types: Selection (click to filter), Result (use computed value in another query), Column (pass multiple values). Bindings create interactive dashboards where user selections dynamically update related charts."
Q59
What is faceting in CRM Analytics dashboards?
✅ Direct Answer
Faceting is automatic cross-filtering — when two or more widgets use the same dataset, clicking a value in one widget automatically filters all other widgets using that same dataset. No manual binding configuration needed. Can be disabled per widget if you want a widget to remain unaffected by other selections.
🎤 One-Line Answer
"Faceting = automatic cross-filtering between widgets using the same dataset — click one chart, all related charts filter automatically. Disable faceting on specific widgets to keep them static."
Q60
What are embedded actions in CRM Analytics and how do you use them?
✅ Direct Answer
Embedded actions allow users to update Salesforce records directly from CRMA dashboards — without leaving the analytics view. Actions: update a field value on a record, create a new record, invoke a Flow, or navigate to a Salesforce record page. Configured on chart or table widgets where each row represents a Salesforce record.
🌍 Real World Example
Sales pipeline table in CRMA: each row is an opportunity. Embedded action: "Update Next Step" — rep clicks the cell, types new next step, clicks save → Salesforce Opportunity updated instantly without leaving the dashboard. Before embedded actions: reps had to navigate to Salesforce, open each Opportunity, edit, save — 5 clicks per record. Now: 2 clicks from dashboard.
🎤 One-Line Answer
"Embedded actions let users update Salesforce records from CRMA dashboards — update fields, create records, invoke Flows without leaving analytics. Eliminates the switch between CRM and analytics tools."
Q61
What is the dashboard JSON structure and what are its key sections?
✅ Direct Answer
Dashboard JSON has four main sections: "steps" (define SAQL queries and dataset sources), "widgets" (define visualizations and layout properties), "layouts" (define responsive layout for different device sizes — desktop/tablet/mobile), "state" (define default filter values and widget selections on load). All stored as JSON in the analytics asset metadata.
🎤 One-Line Answer
"Dashboard JSON: steps (queries), widgets (visualizations), layouts (responsive positioning), state (defaults) — understanding JSON enables advanced customization beyond what Dashboard Designer UI allows."
Q62
How do you make a CRMA dashboard mobile-responsive?
✅ Direct Answer
CRMA supports separate layout definitions for desktop, tablet, and mobile in the dashboard JSON "layouts" section. Each layout specifies widget positions and sizes for that device. Dashboard Designer has a mobile preview mode. Best practices: fewer widgets on mobile, larger touch targets, vertical stacking instead of horizontal grids, KPI numbers prominently placed.
🎤 One-Line Answer
"CRMA supports separate layouts per device (desktop/tablet/mobile) in dashboard JSON — configure widget positions per breakpoint. Use Dashboard Designer mobile preview to test before publishing."
Q63
What is a container widget in CRMA and why is it useful?
✅ Direct Answer
Container widget groups multiple widgets together — applies shared styling (background color, border, padding), enables toggling visibility of the entire group, and maintains relative positioning when the dashboard layout changes. Essential for creating tabbed interfaces, collapsible sections, and logically grouped analytics panels.
🎤 One-Line Answer
"Container groups widgets with shared styling and togglable visibility — essential for tabbed interfaces, collapsible sections, and maintaining consistent layout across different dashboard states."
Q64
What is the difference between a global filter and a local filter in CRMA dashboards?
✅ Direct Answer
Global filter: applies to ALL steps in the dashboard that use the same dataset — one selection filters everything. Local filter: applies to a specific step only via binding — other steps unaffected. Use global for broad context filters (Year, Region). Use local for drill-down filters affecting only specific charts.
🎤 One-Line Answer
"Global filter applies to all steps using same dataset (context filter). Local filter via binding applies to specific steps only (drill-down). Combine both for flexible multi-level dashboard interactivity."
Q65
How do you embed a CRM Analytics dashboard in a Salesforce Lightning page?
✅ Direct Answer
Three ways: 1) Lightning App Builder — drag "CRM Analytics Dashboard" standard component onto any Lightning page, select the dashboard. 2) Record-Filtered embedding — pass Salesforce record ID as context so dashboard automatically filters to show only that record's data. 3) Visualforce page — use einstein:analyticsCloud component for classic or hybrid pages.
🎤 One-Line Answer
"Embed CRMA dashboards via Lightning App Builder (drag CRM Analytics component), record-filtered embedding (auto-filter by record ID), or einstein:analyticsCloud component for Visualforce pages."
🔒 Section 6 — Security & Row Level Security (RLS)
Q66–Q75 · Advanced · Critical for Senior Roles
Q66
What is Row Level Security (RLS) in CRM Analytics and how does it work?
✅ Direct Answer
RLS restricts which rows a user can see in a CRMA dataset — applied as a security predicate (SAQL expression) on the dataset. When a user runs a query, CRMA automatically appends the predicate to filter rows based on that user's identity. Can reference user fields (Name, ID, Profile, Role) and dataset dimensions for dynamic filtering.
🌍 Real World Example
// RLS Predicate on Sales_Pipeline dataset
// Each user only sees their own region's data
// Simple predicate: filter by owner
"OwnerName" == "$User.Name"
// Role-based: filter by user's custom field
"Region__c" == "$User.Region__c"
// Multi-value: user can see their team
"OwnerId" in ["$User.Id", "$User.ManagerId"]
// Admin bypass: System Admins see everything
"$User.ProfileName" == "System Administrator" ||
"Region__c" == "$User.Region__c"
🔑 Key Points for Interviewer
- RLS predicate: SAQL expression auto-appended to every query on the dataset
- $User.Name, $User.Id, $User.ProfileName: built-in user variables
- $User.CustomField: reference any custom field on the User object
- Applied at dataset level — affects all dashboards using that dataset
- Test RLS by logging in as different users and checking dashboard output
🎤 One-Line Answer
"RLS predicate is a SAQL expression auto-appended to every dataset query — filters rows based on $User variables (Name, Id, Profile, custom fields). Applied at dataset level, affects all dashboards."
Q67
What is the difference between Sharing Inheritance and RLS Predicate in CRMA?
✅ Direct Answer
Sharing Inheritance: auto-inherits Salesforce OWD/role/sharing rules — same security as Salesforce, zero configuration. Best for standard Salesforce sharing patterns. RLS Predicate: custom SAQL expression for complex rules, required when Sharing Inheritance doesn't support the pattern or when >3,000 records are visible to a user.
🔑 Key Points for Interviewer
- Sharing Inheritance: zero config, inherits Salesforce security automatically
- Sharing Inheritance limit: user must have <3,000 records visible — beyond that, use RLS
- RLS Predicate: custom SAQL, handles complex and high-volume scenarios
- Can't use both on same dataset — must choose one approach
- External datasets (CSV) must use RLS Predicate — no Salesforce sharing to inherit
🎤 One-Line Answer
"Sharing Inheritance = zero-config automatic Salesforce security (OWD/roles/sharing). RLS Predicate = custom SAQL security for complex patterns or users with >3K visible records."
Q68
How do you implement manager hierarchy-based RLS in CRM Analytics?
🌍 Real World Example
// Manager sees their team's data + own data
// Strategy: use Flatten on Role Hierarchy in Dataflow to add hierarchy path
// Then RLS predicate checks if user appears in any hierarchy column
// Dataset has columns: OwnerId, Level1_Id, Level2_Id, Level3_Id, Level4_Id
// (from Flatten transformation on Role Hierarchy)
// RLS Predicate:
"OwnerId" == "$User.Id" ||
"Level1_Id" == "$User.Id" ||
"Level2_Id" == "$User.Id" ||
"Level3_Id" == "$User.Id" ||
"Level4_Id" == "$User.Id"
// Result: Reps see own data. Managers see all reports beneath them.
// VP sees all Regional Managers and all their reps. All from one predicate.
🎤 One-Line Answer
"Manager hierarchy RLS: Flatten Role Hierarchy in Dataflow → adds Level1-N_Id columns → RLS predicate checks if $User.Id matches any level column — reps see own data, managers see full team."
Q69
What are CRMA app-level sharing permissions?
✅ Direct Answer
App-level sharing has three access levels: Viewer (can explore data, use dashboards, create lenses — cannot edit assets), Editor (can create and modify datasets, lenses, dashboards within the app), Manager (full admin — can share the app, change permissions, delete assets). Configured per user or group in app settings.
🎤 One-Line Answer
"App sharing: Viewer (explore + use), Editor (create + modify), Manager (full admin + share). CRMA security = Platform License + Permission Set + App Sharing + Dataset RLS — four layers."
Q70
How do you test Row Level Security in CRM Analytics?
✅ Direct Answer
Testing methods: 1) Login As user — Salesforce Admin can log in as any user and open CRMA dashboards to see exactly what they see. 2) Security Coverage tool — in Data Manager, check which users the RLS predicate grants access to. 3) Preview As User — CRMA Dashboard Designer has "Preview As" option to simulate another user's view without logging in.
🎤 One-Line Answer
"Test RLS via Login As user (exact experience), Security Coverage tool in Data Manager (verify predicate coverage), or Preview As User in Dashboard Designer — always test multiple personas before deployment."
Q71
What happens to CRMA data security when a record owner changes in Salesforce?
✅ Direct Answer
For Sharing Inheritance: security updates automatically when Salesforce sharing changes — next time CRMA checks sharing, it uses updated access. For RLS Predicate based on OwnerId field: when owner changes in Salesforce, the Dataflow must re-run to update the OwnerId field in the dataset — until then, old owner still appears in dataset.
🎤 One-Line Answer
"Sharing Inheritance: security updates automatically. RLS Predicate: depends on dataset refresh — owner change in Salesforce not reflected until next Dataflow run refreshes the OwnerId field."
Q72
How do you restrict access to specific fields in CRM Analytics?
✅ Direct Answer
CRMA doesn't have native field-level security like Salesforce FLS. Options: 1) Create separate datasets for different user groups — exclude sensitive fields from datasets for general users. 2) Use multiple CRMA apps — put sensitive dashboards in a restricted app with limited Viewer access. 3) Don't include sensitive fields in the dataset at all if general users shouldn't see them.
🎤 One-Line Answer
"CRMA has no native FLS — restrict sensitive field access by creating separate datasets excluding those fields, or using separate restricted-access Apps. Design datasets with security in mind from the start."
Q73
What is the Security Coverage report in CRM Analytics?
✅ Direct Answer
Security Coverage report shows which users have access to a dataset and how many rows each user can see based on the RLS predicate. Generated from Data Manager → Datasets → select dataset → Security Coverage. Helps validate that RLS is working correctly and identifies users who might have unexpected access or no access.
🎤 One-Line Answer
"Security Coverage report in Data Manager shows which users can see which rows in a dataset — essential for validating RLS predicates are granting correct access before deploying to production."
Q74
How do you handle multi-tenant/multi-business-unit security in CRM Analytics?
✅ Direct Answer
Strategy: Create separate CRMA Apps per business unit with restricted access. Use RLS predicates with business unit field from the User record ($User.Business_Unit__c). Create separate datasets per BU if they have different field requirements. Use Permission Set Groups to control which users get CRMA access to which apps.
🎤 One-Line Answer
"Multi-BU security: separate Apps per BU (restricted access), RLS predicate using $User.Business_Unit__c, Permission Set Groups for app access control. Separate datasets if BUs have different field/row requirements."
Q75
What are the security considerations when using Direct Data (live external DB connections) in CRMA?
✅ Direct Answer
Direct Data security: credentials to external DB stored in CRMA as a connected data source (similar to Named Credentials). All users accessing dashboards using Direct Data query the external DB with the same service account credentials — individual user-level RLS must be implemented within the external DB's access layer, not in CRMA.
🎤 One-Line Answer
"Direct Data uses service account credentials — all CRMA users query external DB as same user. Implement user-level data access control in the external DB (Snowflake row policies, etc.), not in CRMA."
🤖 Section 7 — Einstein Discovery & AI
Q76–Q85 · Advanced · High Demand for Senior Roles
Q76
What is Einstein Discovery in CRM Analytics?
✅ Direct Answer
Einstein Discovery is CRMA's automated machine learning feature — analyzes datasets to automatically find patterns, build predictive models, and generate natural language explanations of what drives outcomes. No data science expertise needed. Generates "Stories" — AI-powered analyses explaining what happened, why it happened, and what will likely happen next.
🌍 Real World Example
XYZ Company: Einstein Discovery analyzed 3 years of Opportunity data. Story generated: "Win rate drops 42% when deal cycle exceeds 90 days AND no executive sponsor is identified." Einstein Discovery found this pattern by analyzing 50+ variables simultaneously — would have taken a data scientist weeks to find manually. Model deployed to score all open opportunities in real-time.
🔑 Key Points for Interviewer
- Stories: automated ML analysis — what, why, and prediction
- No-code: business analysts can run Einstein Discovery without data science
- Requires CRM Analytics Plus license
- Model writeback: predictions stored back to Salesforce records as fields
- Boost: apply prescription actions to improve predicted outcomes
🎤 One-Line Answer
"Einstein Discovery is no-code automated ML — analyzes datasets to generate Stories explaining what happened, why, and predictions for what will happen. No data science expertise required."
Q77
What is an Einstein Discovery Story and what does it contain?
✅ Direct Answer
A Story is Einstein Discovery's analysis output — contains: What Happened (descriptive statistics on the outcome variable), Why It Happened (key factors/drivers with correlation strength), What Will Likely Happen (predictive model with score), What You Can Do (prescription recommendations — Boost), and model performance metrics (R-squared, ROC AUC).
🎤 One-Line Answer
"Einstein Story contains: What Happened (descriptive), Why It Happened (key drivers), What Will Happen (prediction score), What You Can Do (Boost prescriptions) — complete AI analysis in one automated output."
Q78
What is model writeback in Einstein Discovery?
✅ Direct Answer
Model writeback deploys Einstein Discovery predictions back to Salesforce records as custom fields — for example, writing Win_Probability__c (0-100) to each open Opportunity based on the trained model. Updates via scheduled batch or real-time trigger when records change. Enables Salesforce dashboards, alerts, and automation based on AI predictions without CRMA license.
🌍 Real World Example
Einstein model trained on 3 years of Opportunity data. Writeback: every open Opportunity gets AI_Win_Probability__c field updated nightly. Sales Manager's Salesforce Report filters: AI_Win_Probability__c > 70 → high-confidence deals to focus on. Flow trigger: AI_Win_Probability__c drops below 30 → automatically creates "At Risk" task for rep. All without CRMA license for end users.
🎤 One-Line Answer
"Model writeback writes AI predictions to Salesforce record fields — enables Flows, reports, and alerts based on AI scores without CRMA license. Update scheduled or real-time on record change."
Q79
What is the Boost feature in Einstein Discovery?
✅ Direct Answer
Boost generates prescription recommendations — specific actions that would improve a predicted outcome for a specific record. Example: for an opportunity with 35% win probability, Boost suggests "Add an executive sponsor to increase win probability to 62%" or "Shorten deal cycle to under 60 days to increase win probability to 55%". Actionable AI, not just predictions.
🎤 One-Line Answer
"Boost is Einstein's prescription engine — generates 'If you do X, probability increases from 35% to 62%' recommendations. Turns AI predictions into specific actionable guidance per record."
Q80
How do you evaluate the quality of an Einstein Discovery model?
✅ Direct Answer
Key model quality metrics: R-squared (regression — how much variance explained, 0-1, higher better), ROC AUC (classification — discriminatory ability, 0.5=random, 1.0=perfect), Confusion Matrix (classification — true/false positive/negative rates), Lift (how much better than random prediction), and story-generated explanations of top predictive factors.
🔑 Key Points for Interviewer
- R-squared > 0.7: good regression model (explains 70%+ of variance)
- ROC AUC > 0.8: good classification model
- Confusion Matrix: understand false positive/negative trade-offs
- Lift: how much better than average baseline prediction
- Einstein shows model quality in Story — review before deployment
🎤 One-Line Answer
"Evaluate models: R-squared (regression, >0.7 good), ROC AUC (classification, >0.8 good), Confusion Matrix (TP/FP/TN/FN rates), Lift (improvement over baseline). Review in Story before writing back to production."
Q81
What data requirements does Einstein Discovery need to build a good model?
✅ Direct Answer
Minimum: 400 rows (recommended 1,000+), one outcome variable (what you're predicting), multiple feature variables (what might influence the outcome). Data quality requirements: outcome variable must be numeric or binary categorical, minimal missing values, balanced classes for classification (avoid extreme class imbalance), and historical data representing the pattern you want to predict.
🎤 One-Line Answer
"Einstein Discovery needs 400+ rows (1,000+ recommended), clear outcome variable, quality feature variables, minimal nulls, and balanced classes. Poor data quality = poor model — garbage in, garbage out."
Q82
What is the difference between prediction and classification in Einstein Discovery?
✅ Direct Answer
Prediction (regression): outcome is a continuous numeric value — "what will the deal amount be?" or "how many days will this case take to resolve?" Classification: outcome is a binary or categorical value — "will this deal be won or lost?" or "which support tier will this case fall into?" Einstein Discovery automatically detects the appropriate model type based on the outcome variable type.
🎤 One-Line Answer
"Prediction = continuous numeric outcome (deal amount, days to close). Classification = binary/categorical outcome (win/lose, tier assignment). Einstein auto-detects and builds appropriate model type."
Q83
How do you embed Einstein Discovery predictions in Salesforce records?
✅ Direct Answer
Three methods: 1) Model Writeback — scheduled batch writes prediction score to custom field on Salesforce records. 2) Einstein Prediction Service API — real-time prediction for individual records via REST API call. 3) Einstein Prediction Builder — simpler alternative for point-in-time predictions written to record fields via scheduled processing.
🎤 One-Line Answer
"Embed predictions via Model Writeback (scheduled batch to custom field), Einstein Prediction Service API (real-time REST), or Einstein Prediction Builder (simplified point-in-time scoring)."
Q84
What is Einstein Analytics vs Einstein Discovery — are they the same?
✅ Direct Answer
No — different products under the same umbrella. Einstein Analytics = the full CRMA platform (formerly the platform name, now CRM Analytics). Einstein Discovery = specific AI/ML feature within CRMA that builds predictive models and stories. Einstein Analytics was the old name for the entire platform; Einstein Discovery is a specific feature within it.
🎤 One-Line Answer
"Einstein Analytics was the old platform name (now CRM Analytics). Einstein Discovery is a specific ML feature within CRMA — they're not the same. CRMA = platform. Einstein Discovery = ML feature within it."
Q85
What is the Einstein Discovery writeback frequency and how do you control it?
✅ Direct Answer
Writeback frequency options: Scheduled (daily, weekly — runs as Apex batch job), Real-time (triggered when record is created or updated — uses platform event or flow trigger), or Manual (run on-demand). Real-time writeback adds slight latency to record saves. Scheduled writeback is best for large volumes; real-time for critical decisions needing immediate scores.
🎤 One-Line Answer
"Writeback options: Scheduled (daily/weekly batch — best for large volumes), Real-time (triggered on record save — immediate scoring), Manual (on-demand). Real-time adds save latency; use scheduled for 50K+ records."
⚡ Section 8 — Performance & Best Practices
Q86–Q92 · Advanced · Senior Architect Level
Q86
What are the key performance best practices for CRM Analytics dashboards?
✅ Direct Answer
Dashboard performance best practices: limit widgets per page (8-12 optimal), use step sharing (multiple widgets subscribe to same query), minimize SAQL complexity, pre-aggregate in Dataflow instead of complex SAQL at query time, use dataset filters to reduce rows, avoid nested cogroups, enable faceting for automatic cross-filtering without extra steps.
🔑 Key Points for Interviewer
- More widgets = more parallel queries = slower load
- Step sharing: one query serves multiple widgets — reduces query count
- Pre-aggregate in Dataflow: compute summaries during ETL, not at query time
- Dataset size: filter rows at Dataflow level, not dashboard level
- Browser caching: CRMA caches query results — repeated queries are instant
🎤 One-Line Answer
"Optimize dashboards: limit to 8-12 widgets, share steps across widgets, pre-aggregate in Dataflow, minimize SAQL complexity, filter dataset rows at ETL stage — less data + fewer queries = faster dashboards."
Q87
What is step sharing in CRM Analytics dashboards?
✅ Direct Answer
Step sharing allows multiple widgets to subscribe to the same step (query) — the query runs once, and all subscribed widgets display different views of the same result. Example: one step queries "Revenue by Region + Stage" — a bar chart widget shows revenue by region, a table widget shows the full grid, a number widget shows total — all from one query execution.
🎤 One-Line Answer
"Step sharing: multiple widgets subscribe to one query — reduces dashboard query count. One 'Revenue by Region + Stage' step powers a chart, table, and KPI widget simultaneously from one SAQL execution."
Q88
How do you handle large datasets (>100M rows) efficiently in CRM Analytics?
✅ Direct Answer
Strategies: create aggregate datasets (pre-summarize by common dimensions in Dataflow), partition data (separate datasets per time period or region), use Direct Data for live queries (avoid importing), apply strict Dataflow filters to reduce row count, use incremental refreshes, and consider whether all 100M rows are needed (often last 2-3 years is sufficient).
🎤 One-Line Answer
"Handle 100M+ rows with: aggregate datasets (pre-summarize in Dataflow), time-based partitioning (separate datasets per year), Direct Data for live queries, strict Dataflow filters, and incremental refresh."
Q89
What are aggregate datasets and when should you use them?
✅ Direct Answer
Aggregate datasets pre-summarize data during Dataflow ETL — instead of storing 5M individual transaction rows, create a dataset with 500 rows (monthly revenue by region by product). Dashboards query the tiny aggregate dataset instead of the full 5M row dataset. Use when: dashboards only show summary views, no need for individual record drill-down, query performance is critical.
🎤 One-Line Answer
"Aggregate datasets pre-compute GROUP BY summaries in Dataflow — 5M rows → 500 summary rows. Dashboards query 500 rows instead of 5M for instant performance when detail-level drill-down isn't needed."
Q90
What are common Dataflow performance issues and how do you fix them?
✅ Direct Answer
Common issues: sfdcDigest extracting all fields (fix: specify only needed fields), no filter on large objects (fix: add date/status condition), multiple augments on same large dataset (fix: combine into one augment chain), not using Data Sync (fix: enable incremental sync for large objects), running too frequently (fix: reduce run frequency for non-time-critical datasets).
🎤 One-Line Answer
"Fix slow Dataflows: specify only needed fields in sfdcDigest, add date filters to reduce rows, enable Data Sync for large objects, reduce run frequency for non-critical datasets, chain augments efficiently."
Q91
How do you monitor CRM Analytics usage and adoption?
✅ Direct Answer
CRMA provides built-in usage analytics: App Analytics in CRMA shows which dashboards are most viewed, which users are active, query performance metrics, and dataset usage. Also available via Salesforce Event Monitoring (Shield) for detailed audit logs. Use adoption data to prioritize dashboard improvements and identify underutilized assets for cleanup.
🎤 One-Line Answer
"Monitor usage via CRMA App Analytics (dashboard views, active users, query performance) and Salesforce Event Monitoring for audit logs. Use adoption data to improve high-traffic dashboards first."
Q92
What are CRMA governance best practices for enterprise deployments?
✅ Direct Answer
Governance best practices: naming conventions (consistent prefixes), ownership model (designated CRMA owners per business unit), version control (SFDX for analytics metadata), change management (test in sandbox before production), dataset documentation (field catalog with business definitions), scheduled monitoring (Dataflow failure alerts), and regular cleanup of unused datasets/dashboards.
🎤 One-Line Answer
"CRMA governance: naming conventions, BU ownership model, SFDX version control, sandbox testing, field catalog documentation, Dataflow failure alerts, and regular cleanup of unused assets."
🎯 Section 9 — Real-World Scenario Questions
Q93–Q100 · Advanced · Separates Experienced Candidates
Q93
SCENARIO: A Dataflow that used to run in 20 minutes now takes 2 hours. How do you diagnose and fix it?
✅ Direct Answer
Systematic diagnosis: 1) Check Data Manager run log — which node is slow? 2) Check if Salesforce object size increased (new records added causing larger sfdcDigest). 3) Check if Data Sync is enabled — if not, sfdcDigest calling API for all records. 4) Check for new fields added to sfdcDigest. 5) Check API limits — sfdcDigest hitting rate limits causing retries.
🌍 Real World Example
Investigation on XYZ Company: run log showed sfdcDigest on Opportunity taking 110 minutes (was 8 minutes). Root cause: 800K new Opportunity records added after campaign — object grew 5x. No Data Sync enabled. Fix: enabled Data Sync for Opportunity (incremental hourly sync). Dataflow now reads local copy — back to 8 minutes. Added date filter (last 3 years) to further reduce to 3 minutes.
🎤 One-Line Answer
"Diagnose in Data Manager run log to identify slow node. Common causes: object size growth, missing Data Sync, new fields added. Fix: enable Data Sync, add date filters, specify only needed fields."
Q94
SCENARIO: Business wants real-time sales pipeline analytics. What is your design?
✅ Direct Answer
Real-time is relative in CRMA — datasets are never instantaneous. Design: Data Sync incremental every 15 minutes for Opportunity → Dataflow every 30 minutes → datasets refreshed every 30 minutes. For truly real-time (< 1 minute lag), use Direct Data connection to an external DB that Salesforce writes to via outbound integration. Communicate realistic expectations: "near real-time" not "real-time."
🎤 One-Line Answer
"'Real-time' in CRMA = near real-time. Design: Data Sync every 15 min + Dataflow every 30 min = 30-min refresh lag. For sub-minute: Direct Data to external DB with Salesforce outbound sync."
Q95
SCENARIO: Sales reps can see each other's pipeline data in CRMA dashboards. How do you fix this?
✅ Direct Answer
Fix systematically: 1) Check if dataset has any RLS configured. 2) If using Sharing Inheritance — verify it's enabled for this dataset. 3) If using RLS Predicate — verify predicate is correct and references $User.Id properly. 4) Check Security Coverage report to confirm which users see which rows. 5) Test by logging in as a rep and verifying only their data appears.
🌍 Real World Example
Issue found: dataset had RLS Predicate set to "OwnerId" == "$User.Id" but the OwnerId field in the dataset was pulling from Account.OwnerId (the Account owner) not the Opportunity owner. Fix: corrected sfdcDigest to include both Opportunity.OwnerId and Account.OwnerId as separate fields. Updated RLS predicate to use Opportunity_OwnerId field. Verified with Security Coverage report.
🎤 One-Line Answer
"Debug: check RLS configuration, verify Sharing Inheritance enabled, validate predicate logic and field references, run Security Coverage report, test by logging in as affected users."
Q96
SCENARIO: Client wants to compare Salesforce data with ERP data in one CRMA dashboard. Design the architecture.
✅ Direct Answer
Architecture: Option A (import) — extract ERP data to CSV via ERP API or SFTP → upload to CRMA via External Data API → create ERP dataset → Dataflow joins ERP dataset (edgemart) with Salesforce data → one combined dataset → dashboard. Option B (Direct Data) — connect CRMA directly to ERP's database (if Snowflake/Redshift/BigQuery) — live queries, no import.
🌍 Real World Example
XYZ Company: Sales data in Salesforce, Financial data in SAP. Architecture: SAP nightly export to SFTP as CSV. MuleSoft picks up CSV, uploads to CRMA via External Data API. CRMA Dataflow: edgemart(SAP_Financial) + sfdcDigest(Opportunity) → augment on AccountId → combined "Sales_Financial" dataset. Dashboard shows Salesforce pipeline vs SAP actual invoiced revenue by account — apples-to-apples comparison.
🎤 One-Line Answer
"Two options: Import (CSV via External Data API → edgemart in Dataflow → join with Salesforce data) or Direct Data (live connection to ERP's data warehouse). Import for complex joins; Direct Data for real-time."
Q97
SCENARIO: Einstein Discovery model accuracy drops significantly after 6 months. Why and what do you do?
✅ Direct Answer
Model drift — the patterns in data have changed over time (business changes, market shifts, new products) making the original training data no longer representative. Fix: retrain the model on fresh data including the last 6 months. Schedule regular model retraining (quarterly is common). Monitor prediction accuracy monthly using actual vs predicted outcomes. Set up accuracy alerts.
🎤 One-Line Answer
"Model drift — business patterns changed, old training data no longer representative. Fix: retrain on fresh data, schedule quarterly retraining, monitor monthly accuracy. All ML models degrade without regular retraining."
Q98
SCENARIO: CEO wants a single executive dashboard showing company health across Sales, Service, and Marketing. Design it.
✅ Direct Answer
Design: Separate datasets per department (Sales_Pipeline, Service_Cases, Marketing_Campaigns) loaded via respective Dataflows. Create an "Executive_Summary" aggregate dataset combining key KPIs from each via Recipe (Append + Aggregate). Dashboard: one page with 8-10 KPI widgets (total pipeline, win rate, CSAT, case resolution time, campaign ROI), global Year filter, drill-down links to departmental dashboards.
🌍 Real World Example
XYZ Company CEO dashboard design: Row 1 — Revenue this quarter vs target (Number widget), Pipeline coverage ratio (Number), Open Cases SLA breach % (Number), CSAT Score (Number). Row 2 — Monthly Revenue trend (Line chart), Case volume by category (Bar). Row 3 — Top 5 deals (Table with embedded actions). Global filter: Year. Links to "Sales Analytics" and "Service Analytics" apps for drill-down. One page, 90-second briefing.
🎤 One-Line Answer
"Executive dashboard: 8-10 KPI numbers + 2-3 trend charts from aggregated cross-department dataset, global time filter, drill-down links to departmental apps. Minimize complexity — executives need answers, not exploration."
Q99
SCENARIO: A dashboard works in sandbox but shows no data in production. What do you check?
✅ Direct Answer
Check in order: 1) Dataset exists in production (did Dataflow run after deployment?). 2) Dataflow ran successfully in production (check Data Manager run history). 3) Dataset connections are bound to correct production objects (API names match). 4) RLS/Sharing settings correct in production. 5) User has correct CRMA license and Permission Set. 6) Dataset field names match SAQL queries.
🎤 One-Line Answer
"No data in production: check Dataflow ran and dataset exists, verify dataset connections bound to correct objects, validate RLS settings, confirm user has CRMA license and Permission Set."
Q100
SCENARIO: Company acquired a new business unit. How do you extend CRMA to include their data while maintaining security isolation?
✅ Direct Answer
Strategy: Create a separate CRMA App for the acquired BU with separate access permissions. Add BU identifier field to all datasets (BU_Name__c). Update RLS predicates to filter by $User.Business_Unit__c. If BU has separate Salesforce org: use cross-org Salesforce Connect or import via External Data API. For shared executive dashboards: create aggregate datasets combining both BUs with BU-level RLS.
🌍 Real World Example
XYZ Company acquired ABC Corp (separate Salesforce org). Architecture: ABC Corp data exported nightly as CSV → uploaded to XYZ's CRMA via External Data API. Separate "ABC_Analytics" App created with ABC team access only. XYZ Executive App shows combined view with RLS: $User.BU == "XYZ" sees only XYZ data; $User.BU == "ABC" sees only ABC data; $User.ProfileName == "Executive" sees all data.
🎤 One-Line Answer
"Acquired BU: separate CRMA App + BU field in datasets + RLS by $User.Business_Unit__c. Import via External Data API if separate org. Combined executive view with BU-level RLS for leadership visibility."
🔗 Continue Your Salesforce Analytics Prep
🚀 Bookmark sfinterviewpro.com
750+ free Salesforce interview questions across 17 topics. No paywall. No signup. Updated regularly.
Browse All Topics →