Pick the right tool
- CRM Analytics (CRMA) — embedded in Salesforce, SAQL/SQL, Einstein Discovery. Best for in-context sales/service analytics.
- Tableau Cloud + Tableau Pulse — best for enterprise BI, wide data blending, and executive storyboards.
- Data Cloud + Tableau Semantic Layer — the modern default when data lives outside Salesforce.
Most enterprises need both. Draw the line at "does it need to render inside a Salesforce record page?".
Dataflow → Recipe → Dataset (CRMA)
Recipes replace Dataflows for new work. A minimal pipeline:
Sync (Opportunity, Account, User)
├─► Recipe: "Pipeline"
│ ├─ Transform: derive Stage_Weighted_Amount = Amount * Probability
│ ├─ Join Account.Industry
│ └─ Register: pipeline_v1
└─► Recipe: "Snapshots"
└─ Append daily → pipeline_history
Two rules that prevent nightly failures:
- Filter at sync, not in the recipe. Sync fewer rows.
- Register datasets under a version suffix (
_v1,_v2). Lens/dashboards bind by API name — versioning lets you cut over safely.
SAQL you'll actually reuse
Weighted pipeline by close month:
q = load "pipeline_v1";
q = filter q by 'IsClosed' == "false";
q = group q by ('CloseDate_Year','CloseDate_Month');
q = foreach q generate
'CloseDate_Year' + '-' + 'CloseDate_Month' as 'Month',
sum('Stage_Weighted_Amount') as 'Weighted',
sum('Amount') as 'Open';
q = order q by 'Month' asc;
Einstein Discovery for predictions
Discovery trains a model from a dataset (GLM / GBM / Random Forest under the hood) and returns SHAP-style explanations per prediction.
Deploy the model as a Predict action, then wire it into:
- A Flow (write
Predicted_Churn__con Account) - An Agentforce Action (
Get churn factors for this account) - A Sales Cloud page component (top 3 improvement suggestions inline)
Tableau Pulse: metrics that push
Pulse turns dashboards into subscribed metrics with LLM-generated narratives. Define metrics as code:
metric: net_new_arr
measure: sum(Opportunity.ARR) where IsWon and CloseDate = current_quarter
dimensions: [Segment, Region, Product]
goal: 12_500_000
cadence: weekly
Users subscribe once — Pulse ships an insight (change vs. prior period, driver breakdown, anomaly detection) every Monday.
Governance that survives contact with users
- One certified data source per grain (Opportunity, Case, Order). Everyone joins to it.
- Row-level security via Sharing Inheritance in CRMA — mirrors Salesforce sharing rules automatically.
- Version dashboards in Git via SFDX
force:analyticsmetadata. - Deprecate — don't delete — old datasets. Rename
pipeline_v1→_deprecated_pipeline_v1and set alerts on read.
Anti-patterns
- Recreating your data warehouse inside CRMA
- SAQL for anything a Recipe can express
- Dashboards with more than 8 widgets on the primary tab
- Predictions with no feedback loop (measure prediction vs. actual, retrain quarterly)
