SAP Analytics Cloud Scripting
Comprehensive skill for scripting in SAP Analytics Cloud (SAC) Analytics Designer and Optimized Story Experience.
Plugin Components
This plugin provides specialized tools for SAC development:
Agents (use via Task tool):
sac-script-debugger - Debug script errors, trace issues
sac-performance-optimizer - Analyze and fix performance bottlenecks
sac-planning-assistant - Guide planning operations and version management
sac-api-helper - Find correct APIs and provide code examples
Commands (use via /command):
/sac-script-template - Generate script templates (filter, planning, export, etc.)
/sac-debug - Interactive debugging guidance
/sac-optimize - Performance analysis and recommendations
/sac-planning - Planning operation templates
Hooks:
- Automatic validation on SAC script writes for common issues
What's New in Q4 2025 (2025.21)
Key scripting enhancements in the latest SAC release:
- Chart Variance APIs - Script control over chart variance display
- Compass for Seamless Planning - Enhanced planning integration
- Data Actions Enhancements - Automatic dimension mapping, input control binding
- Time Series Forecast API - Programmatic forecasting control
- Comments APIs - Widget and cell comment management
See references/whats-new-q4-2025.md for complete details.
Quick Start
Script Editor Access
- Analytics Designer: Edit mode → Select widget → Scripts tab
- Optimized Story Experience: Advanced Mode → Select widget → Add script
Basic Script Structure
// Event handler example (onSelect on Chart_1)
var selections = Chart_1.getSelections();
if (selections.length > 0) {
var selectedValue = selections[0]["Location"];
Table_1.getDataSource().setDimensionFilter("Location", selectedValue);
}
Core APIs
DataSource API
Access via Widget.getDataSource(). Key methods:
getMembers(dim, {accessMode: MemberAccessMode.BookedValues}) - Get dimension members efficiently
getResultSet() - Cached data access (preferred over getData())
setDimensionFilter(dim, value) - Apply filters
setRefreshPaused(true/false) - Batch multiple operations
Planning API
Access via Table.getPlanning(). Key operations:
getPublicVersion() / getPrivateVersion() - Version access
publish() - Submit private to public
copyFromPublicVersion() / copyToPublicVersion() - Data copy
setLock(true/false) - Data locking
Widget APIs
- Charts:
addMeasure(), addDimension(), getSelections()
- Tables:
addDimensionToRows(), setZeroSuppressionEnabled()
- Containers: Panel, TabStrip, PageBook for layout
Application Object
Global utilities:
Application.showBusyIndicator() / hideBusyIndicator()
Application.showMessage(type, text)
Application.getUserInfo() / getInfo()
Performance Best Practices
Minimize Backend Calls
// Use getResultSet() (cached) instead of getMembers() (backend)
var data = ds.getResultSet();
Batch Filter Operations
ds.setRefreshPaused(true);
ds.setDimensionFilter("Dim1", value1);
ds.setDimensionFilter("Dim2", value2);
ds.setRefreshPaused(false); // Single refresh
Keep onInitialization Empty
Defer heavy operations to lazy loading or first interaction.
Use BookedValues for Members
var members = ds.getMembers("Dim", {accessMode: MemberAccessMode.BookedValues});
Debugging
Console Logging
console.log("Debug:", myVariable);
console.log("Selections:", JSON.stringify(Chart_1.getSelections()));
Browser DevTools
- Press F12 → Console tab
- Filter by "Info" type
- Add
?APP_PERFORMANCE_LOGGING=true to URL for timing
Bundled Resources
Reference Files (55 files):
- Core APIs:
references/api-datasource.md, references/api-widgets.md, references/api-planning.md
- Advanced:
references/api-calendar-bookmarks.md, references/api-advanced-widgets.md
- Best Practices:
references/best-practices-developer.md, references/best-practices-planning-stories.md
- Language:
references/scripting-language-fundamentals.md
- Q4 2025:
references/whats-new-q4-2025.md, references/chart-variance-apis.md
Templates (56 patterns):
templates/common-patterns.js - 40 general scripting patterns
templates/planning-operations.js - 16 planning-specific patterns
Official Documentation
Version: 3.0.0 | Last Verified: 2025-12-27 | SAC Version: Q4 2025 (2025.21) | API Version: 2025.19
1---2name: sap-sac-scripting3description: Comprehensive SAC scripting skill for SAP Analytics Cloud Analytics Designer and Optimized Story Experience. This skill should be used when the user asks to "create SAC script", "debug Analytics Designer", "optimize SAC performance", "planning operations in SAC", "filter data in SAC", "use DataSource API", "chart scripting", "table manipulation", "SAC event handlers", "version management", "data locking", or works with SAC widgets, planning models, or analytics applications.4license: GPL-3.05---6
7# SAP Analytics Cloud Scripting
8
9Comprehensive skill for scripting in SAP Analytics Cloud (SAC) Analytics Designer and Optimized Story Experience.
10
11## Plugin Components
12
13This plugin provides specialized tools for SAC development:
14
15**Agents** (use via Task tool):
16- `sac-script-debugger` - Debug script errors, trace issues
17- `sac-performance-optimizer` - Analyze and fix performance bottlenecks
18- `sac-planning-assistant` - Guide planning operations and version management
19- `sac-api-helper` - Find correct APIs and provide code examples
20
21**Commands** (use via /command):
22- `/sac-script-template` - Generate script templates (filter, planning, export, etc.)
23- `/sac-debug` - Interactive debugging guidance
24- `/sac-optimize` - Performance analysis and recommendations
25- `/sac-planning` - Planning operation templates
26
27**Hooks**:
28- Automatic validation on SAC script writes for common issues
29
30## What's New in Q4 2025 (2025.21)
31
32Key scripting enhancements in the latest SAC release:
33- **Chart Variance APIs** - Script control over chart variance display
34- **Compass for Seamless Planning** - Enhanced planning integration
35- **Data Actions Enhancements** - Automatic dimension mapping, input control binding
36- **Time Series Forecast API** - Programmatic forecasting control
37- **Comments APIs** - Widget and cell comment management
38
39See `references/whats-new-q4-2025.md` for complete details.
40
41## Quick Start
42
43### Script Editor Access
44- **Analytics Designer**: Edit mode → Select widget → Scripts tab
45- **Optimized Story Experience**: Advanced Mode → Select widget → Add script
46
47### Basic Script Structure
48```javascript
49// Event handler example (onSelect on Chart_1)
50var selections = Chart_1.getSelections();
51if (selections.length > 0) {
52 var selectedValue = selections[0]["Location"];
53 Table_1.getDataSource().setDimensionFilter("Location", selectedValue);
54}
55```
56
57## Core APIs
58
59### DataSource API
60Access via `Widget.getDataSource()`. Key methods:
61- `getMembers(dim, {accessMode: MemberAccessMode.BookedValues})` - Get dimension members efficiently
62- `getResultSet()` - Cached data access (preferred over getData())
63- `setDimensionFilter(dim, value)` - Apply filters
64- `setRefreshPaused(true/false)` - Batch multiple operations
65
66### Planning API
67Access via `Table.getPlanning()`. Key operations:
68- `getPublicVersion()` / `getPrivateVersion()` - Version access
69- `publish()` - Submit private to public
70- `copyFromPublicVersion()` / `copyToPublicVersion()` - Data copy
71- `setLock(true/false)` - Data locking
72
73### Widget APIs
74- **Charts**: `addMeasure()`, `addDimension()`, `getSelections()`
75- **Tables**: `addDimensionToRows()`, `setZeroSuppressionEnabled()`
76- **Containers**: Panel, TabStrip, PageBook for layout
77
78### Application Object
79Global utilities:
80- `Application.showBusyIndicator()` / `hideBusyIndicator()`
81- `Application.showMessage(type, text)`
82- `Application.getUserInfo()` / `getInfo()`
83
84## Performance Best Practices
85
861. **Minimize Backend Calls**
87 ```javascript
88 // Use getResultSet() (cached) instead of getMembers() (backend)
89 var data = ds.getResultSet();
90 ```
91
922. **Batch Filter Operations**
93 ```javascript
94 ds.setRefreshPaused(true);
95 ds.setDimensionFilter("Dim1", value1);
96 ds.setDimensionFilter("Dim2", value2);
97 ds.setRefreshPaused(false); // Single refresh
98 ```
99
1003. **Keep onInitialization Empty**
101 Defer heavy operations to lazy loading or first interaction.
102
1034. **Use BookedValues for Members**
104 ```javascript
105 var members = ds.getMembers("Dim", {accessMode: MemberAccessMode.BookedValues});
106 ```
107
108## Debugging
109
110### Console Logging
111```javascript
112console.log("Debug:", myVariable);
113console.log("Selections:", JSON.stringify(Chart_1.getSelections()));
114```
115
116### Browser DevTools
1171. Press F12 → Console tab
1182. Filter by "Info" type
1193. Add `?APP_PERFORMANCE_LOGGING=true` to URL for timing
120
121## Bundled Resources
122
123**Reference Files** (55 files):
124- Core APIs: `references/api-datasource.md`, `references/api-widgets.md`, `references/api-planning.md`
125- Advanced: `references/api-calendar-bookmarks.md`, `references/api-advanced-widgets.md`
126- Best Practices: `references/best-practices-developer.md`, `references/best-practices-planning-stories.md`
127- Language: `references/scripting-language-fundamentals.md`
128- Q4 2025: `references/whats-new-q4-2025.md`, `references/chart-variance-apis.md`
129
130**Templates** (56 patterns):
131- `templates/common-patterns.js` - 40 general scripting patterns
132- `templates/planning-operations.js` - 16 planning-specific patterns
133
134## Official Documentation
135
136- **Analytics Designer API**: https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/release/en-US/
137- **Optimized Story Experience API**: https://help.sap.com/doc/1639cb9ccaa54b2592224df577abe822/release/en-US/
138- **SAC Documentation**: https://help.sap.com/docs/SAP_ANALYTICS_CLOUD
139- **What's New Q4 2025**: https://help.sap.com/docs/SAP_ANALYTICS_CLOUD/00f68c2e08b941f081002fd3691d86a7/c96a267c5da04fff90bb55313ee9f77c.html
140
141---
142
143**Version**: 3.0.0 | **Last Verified**: 2025-12-27 | **SAC Version**: Q4 2025 (2025.21) | **API Version**: 2025.19