Out of the box, SAP SuccessFactors IM comes with a set of pre-built Embedded Analytics stories. These stories cover the most common reporting scenarios: monitoring quota attainment, validating calculation runs, checking plan coverage, and understanding the distribution of incentive earnings. For many organizations, the pre-built content is sufficient for 80% of reporting needs. Understanding what is available, how each story works, and how to customise them is a practical first step before building custom reports.
The Five Standard Embedded Analytics Stories
| Story Name | Primary Purpose | Key Users | Main Filters | Data Source |
|---|---|---|---|---|
| Quota Attainment Summary | Show participant quota attainment %, highlight above/below target, track attainment by period and plan | Sales leadership, sales ops, compensation analysts | Period, Plan, Region, Territory, Manager, Status | CSC_RESULTS + CSC_PARTICIPANT + CSC_QUOTA |
| Pipeline Run Audit Log | Monitor recent calculation runs—status, duration, error messages. Operational health check. | IM admins, ops team, support | Date range, Pipeline ID, Status (COMPLETED/FAILED) | CSC_PIPELINE_RUN (HANA system table) |
| Incentive Earnings Distribution | Histogram of incentive amounts across participant population. Validate calculation results. | Compensation analysts, finance, audit | Period, Plan, Earning bands (auto-binned) | CSC_RESULTS |
| Plan Assignment Coverage | Which participants have active plan assignments vs. which don't. Pre-period validation. | Compensation analysts, payroll, HR | Period, Plan, Assignment status (Active/Inactive) | CSC_PLAN_PARTICIPANT + CSC_PARTICIPANT |
| Participant Hierarchy View | Org structure and manager-participant relationships. Validation of master data. | Compensation analysts, HR, sales ops | Manager, Period (to show current assignments) | CSC_PARTICIPANT (hierarchical query) |
Story 1: Quota Attainment Summary
This is the most frequently accessed Embedded Analytics story. It answers the question sales leadership asks first: "How many of our reps hit quota?"
What It Shows
The story typically has multiple visualizations on the same page or spread across pages:
- KPI Summary tiles at the top: Total participants, % above target (green), % on track (yellow), % below target (red). These tiles give a at-a-glance sense of the population distribution.
- Attainment bar chart: Participants grouped by attainment band (ABOVE TARGET / ON TRACK / BELOW TARGET) or a histogram showing distribution of attainment percentages. Users can filter by period, plan, or region and see the chart update.
- Detail table: Participant name, manager, plan, quota, result, attainment %, attainment band. Sortable, filterable. Users can export to Excel for follow-up conversations.
Filters and Usage
Interactive filters allow users to slice the data:
- Period — compare different fiscal periods side-by-side or drill into a single period.
- Plan — if the org has multiple compensation plans (e.g., AE plan, sales engineer plan, renewal plan), filter to one plan to see performance by plan type.
- Region / Territory — if the org structure is hierarchical (EMEA, APAC, etc.), filter to see regional performance.
- Manager — team leader wants to see only their direct reports' attainment.
- Status — filter to APPROVED calculations, exclude DRAFT or REVERTED runs.
Underlying Query
The story queries the "Quota Attainment" Calculation View, which sits on top of this simplified logic:
-- Simplified logic for Quota Attainment story SELECT p.PARTICIPANT_ID, p.NAME AS PARTICIPANT, mgr.NAME AS MANAGER, cp.PLAN_NAME, pd.PERIOD_NAME, COALESCE(q.QUOTA_AMOUNT, 0) AS QUOTA, COALESCE(r.RESULT_AMOUNT, 0) AS RESULT, COALESCE(r.INCENTIVE_AMOUNT, 0) AS INCENTIVE, CASE WHEN COALESCE(q.QUOTA_AMOUNT, 0) = 0 THEN NULL ELSE ROUND(r.RESULT_AMOUNT / q.QUOTA_AMOUNT * 100, 1) END AS ATTAINMENT_PCT, CASE WHEN r.RESULT_AMOUNT >= q.QUOTA_AMOUNT * 1.2 THEN 'ABOVE TARGET' WHEN r.RESULT_AMOUNT >= q.QUOTA_AMOUNT * 0.8 THEN 'ON TRACK' ELSE 'BELOW TARGET' END AS ATTAINMENT_BAND FROM CSC_RESULTS r JOIN CSC_PARTICIPANT p ON p.ID = r.PARTICIPANT_ID LEFT JOIN CSC_PARTICIPANT mgr ON mgr.ID = p.MANAGER_ID JOIN CSC_COMP_PLAN cp ON cp.ID = r.PLAN_ID JOIN CSC_PERIOD pd ON pd.ID = r.PERIOD_ID LEFT JOIN CSC_QUOTA q ON q.PARTICIPANT_ID = r.PARTICIPANT_ID AND q.PERIOD_ID = r.PERIOD_ID AND q.PLAN_ID = r.PLAN_ID WHERE r.STATUS IN ('APPROVED', 'PROCESSED');
The Calculation View handles this join and aggregation. Embedded Analytics then queries it with filters applied.
Story 2: Pipeline Run Audit Log
This story is used by the operations and administration team—not sales leadership. It is an operational monitoring dashboard.
What It Shows
A table (and sometimes a timeline chart) showing recent pipeline runs:
- Pipeline Run ID — a unique identifier for the calculation run.
- Period — which fiscal period was calculated.
- Status — COMPLETED, FAILED, IN PROGRESS, CANCELLED.
- Start Time, End Time, Duration — when the run started, ended, and how long it took (minutes or seconds).
- Rows Processed — how many participant/plan records were calculated.
- Error Message — if status is FAILED, the error details that caused the failure.
Usage
Every morning, the IM admin checks this story to confirm that the nightly calculation run completed successfully. If the status is FAILED or if the duration is unexpectedly long, the admin investigates (perhaps data quality issues, configuration changes, or system load).
Underlying Query
-- Pipeline run monitoring query SELECT r.ID AS RUN_ID, r.PIPELINE_ID, pd.PERIOD_NAME, r.STATUS, r.START_TIME, r.END_TIME, SECONDS_BETWEEN( r.START_TIME, COALESCE(r.END_TIME, CURRENT_TIMESTAMP)) AS DURATION_SEC, r.ROWS_PROCESSED, r.ERROR_MESSAGE, r.CREATED_AT FROM CSC_PIPELINE_RUN r LEFT JOIN CSC_PERIOD pd ON pd.ID = r.PERIOD_ID WHERE r.START_TIME >= ADD_DAYS(CURRENT_DATE, -30) ORDER BY r.START_TIME DESC;
Story 3: Incentive Earnings Distribution
This story is used during results validation—before final approval, the comp analyst checks that the distribution of incentive earnings looks correct.
What It Shows
A histogram or bar chart showing how many participants fall into each earnings band:
- Earnings bands — typically auto-binned: $0–10K, $10K–25K, $25K–50K, $50K–100K, $100K+.
- Count of participants — how many people earned in each band.
A normal distribution (bell curve) is expected—some people earn very little (below quota), most earn in the middle (on quota), some earn a lot (above quota). If the distribution is bimodal (two peaks) or highly skewed, it is a signal that something is wrong with the calculations (e.g., two separate groups with very different quota structures, or a data quality issue).
Underlying Query
-- Earnings distribution: count of participants by earning band SELECT CASE WHEN r.INCENTIVE_AMOUNT 0 THEN '$0 - $10K' WHEN r.INCENTIVE_AMOUNT 10000 THEN '$10K - $25K' WHEN r.INCENTIVE_AMOUNT 25000 THEN '$25K - $50K' WHEN r.INCENTIVE_AMOUNT 50000 THEN '$50K - $100K' ELSE '$100K+' END AS EARNING_BAND, COUNT(*) AS PARTICIPANT_COUNT, ROUND(AVG(r.INCENTIVE_AMOUNT), 2) AS AVG_EARNING, ROUND(MAX(r.INCENTIVE_AMOUNT), 2) AS MAX_EARNING FROM CSC_RESULTS r WHERE r.PERIOD_ID = :period_id AND r.STATUS = 'APPROVED' GROUP BY EARNING_BAND ORDER BY EARNING_BAND;
Story 4: Plan Assignment Coverage
This is a critical pre-period validation report. It answers: "Do all active participants have an assignment to at least one compensation plan?"
What It Shows
Two categories:
- Assigned — participants who have an active plan assignment for the current or upcoming period.
- Unassigned — active participants with no plan assignment.
Any participant in the "Unassigned" category will receive zero incentive when the period is calculated. This is critical to surface before the calculation run, not after.
Underlying Query
-- Coverage gap: participants without plan assignments SELECT p.PARTICIPANT_ID, p.NAME, p.STATUS, CASE WHEN pp.PARTICIPANT_ID IS NOT NULL THEN 'ASSIGNED' ELSE 'UNASSIGNED' END AS ASSIGNMENT_STATUS, GROUP_CONCAT(DISTINCT cp.PLAN_NAME) AS PLANS FROM CSC_PARTICIPANT p LEFT JOIN CSC_PLAN_PARTICIPANT pp ON pp.PARTICIPANT_ID = p.ID AND pp.PERIOD_ID = :period_id AND pp.STATUS = 'ACTIVE' LEFT JOIN CSC_COMP_PLAN cp ON cp.ID = pp.PLAN_ID WHERE p.STATUS = 'ACTIVE' GROUP BY p.PARTICIPANT_ID, p.NAME, p.STATUS HAVING COUNT(pp.PARTICIPANT_ID) = 0 ORDER BY p.NAME;
Story 5: Participant Hierarchy View
This story visualizes the organizational structure—who reports to whom. It is used for validation of master data and to ensure the hierarchy is correct before a calculation run.
What It Shows
A tree or tabular view of managers and their direct reports, possibly multi-level (manager → team lead → rep). Each row shows:
- Manager name and ID
- Direct report name and ID
- Plan assignment (which plan the rep is on)
- Effective dates (when the assignment is active)
Underlying Query
-- Org hierarchy: manager-participant relationships SELECT mgr.ID AS MANAGER_ID, mgr.NAME AS MANAGER_NAME, p.ID AS PARTICIPANT_ID, p.NAME AS PARTICIPANT_NAME, cp.PLAN_NAME, pp.EFFECTIVE_START_DATE, pp.EFFECTIVE_END_DATE FROM CSC_PARTICIPANT p LEFT JOIN CSC_PARTICIPANT mgr ON mgr.ID = p.MANAGER_ID LEFT JOIN CSC_PLAN_PARTICIPANT pp ON pp.PARTICIPANT_ID = p.ID LEFT JOIN CSC_COMP_PLAN cp ON cp.ID = pp.PLAN_ID WHERE p.STATUS = 'ACTIVE' ORDER BY mgr.NAME, p.NAME;
Customising Pre-Built Stories
The pre-built stories cover most needs, but you can customise them. SAC provides a no-code story builder—you can:
- Add filters — new filter buttons for dimensions not in the original (e.g., add a "Cost Centre" filter if it is not already present).
- Change chart types — swap a bar chart for a line chart, a table for a map (if geography data is present).
- Add columns to a table — if the underlying Calculation View has additional fields, drag them into the table.
- Modify visualisation labels and formatting — change titles, number formats, colours.
When Pre-Built Content Is Not Enough
In some organizations, the five standard stories do not cover all reporting needs. Common custom reporting scenarios include:
- Cross-plan comparison — compare a rep's attainment across multiple plans (if they are on more than one plan).
- Multi-period trending — show how a team's attainment has changed over the last four quarters.
- Territory performance vs market data — combine IM data with external market benchmarks (requires SAP Datasphere).
- Exception reporting — highlight reps whose attainment dropped significantly month-over-month.
- Participant self-service — give reps a personal dashboard showing their own quota attainment and earnings (with row-level security).
For these scenarios, you build a custom story. If the pre-built Calculation Views have all the fields you need, you can build the story in SAC without coding. If you need new fields or different data logic, you create a custom Calculation View in HANA (Lesson 04 covers writing the SQL queries).
Key Takeaways
- SAP ships five pre-built Embedded Analytics stories that cover 80% of IM reporting needs.
- Quota Attainment is the most used—it is the first report sales leadership and operations teams access.
- Pipeline Run Audit is for operational monitoring; Earnings Distribution for results validation; Plan Coverage for pre-period checks; Hierarchy for master data validation.
- Always customise by copying, not by editing originals. SAP may overwrite originals during upgrades.
- Customisation is possible without coding—add filters, change chart types, add columns, modify labels.
- For custom reporting beyond the pre-built content, you either build new stories on existing Calculation Views (no code) or create custom Calculation Views in HANA (requires SQL).