All skills
secondsky avatar

/sap-sac-scripting

@620a19a
by Eddiesecondsky/sap-skills456 stars
120

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", "Optimized Story Experience API", "OSE scripting", "OSE widget API", "OSE DataSource", "story scripting API", "OSE planning API", "OSE method", "optimized story", "SAC story scripting", "story script", "SAC scripting", "debug SAC runtime in Microsoft Edge via CDP", or works with SAC widgets, planning models, or analytics applications.

Use this Skill: https://skilld.dev/gh/secondsky/sap-skills/sap-sac-scripting

This session only. Nothing lands on disk.

referencesapi-datasource.md

≈2.4k tokens on demand. Your agent reads this file only when SKILL.md points to it.

DataSource API Reference

Complete reference for the DataSource API in SAP Analytics Cloud scripting.

Source: Analytics Designer API Reference (current release)


Table of Contents

  1. Getting DataSource Reference
  2. Information Methods
  3. Dimension Methods
  4. Measure Methods
  5. Filter Methods
  6. Variable Methods
  7. Data Access Methods
  8. Hierarchy Methods
  9. Refresh Control
  10. DataSource Types

Getting DataSource Reference

DataSources cannot be referenced directly. Obtain reference via widget:

// From Chart
var ds = Chart_1.getDataSource();

// From Table
var ds = Table_1.getDataSource();

// From GeoMap Layer
var ds = GeoMap_1.getLayer("LayerName").getDataSource();

Returns undefined if widget has no data binding.


Information Methods

getInfo()

Returns information about the data source.

var info = ds.getInfo();
// Returns: DataSourceInfo object
// - id: string
// - description: string
// - modelId: string
// - type: DataSourceType

getDataSourceInfo()

Returns detailed data source metadata.

var dsInfo = ds.getDataSourceInfo();

Dimension Methods

getDimensions()

Returns all dimensions of the data source.

var dimensions = ds.getDimensions();
// Returns: Array of DimensionInfo objects
// Each contains: { id: string, description: string }

Example:

var dims = Chart_1.getDataSource().getDimensions();
for (var i = 0; i < dims.length; i++) {
    console.log(dims[i].id + ": " + dims[i].description);
}

getMembers(dimensionId, options)

Returns members of a dimension.

Parameters:

Parameter Type Required Description
dimensionId string Yes Dimension identifier
options object No Filter options

Options:

  • accessMode: MemberAccessMode.BookedValues | MemberAccessMode.All
  • hierarchyId: string - Specific hierarchy
  • level: number - Hierarchy level
// All members
var members = ds.getMembers("Location");

// Booked values only
var bookedMembers = ds.getMembers("Location", {
    accessMode: MemberAccessMode.BookedValues
});

// Specific hierarchy level
var levelMembers = ds.getMembers("Date", {
    hierarchyId: "YQM",
    level: 2
});

Returns: Array of MemberInfo objects

{
    dimensionId: string,
    id: string,           // Full qualified ID
    description: string,
    displayId: string,    // Short ID
    properties: object    // Custom attributes
}

Performance Note: getMembers() always triggers backend request. Use getResultSet() when possible.

getMember(dimensionId, memberId)

Returns specific member info.

var member = ds.getMember("Location", "[Location].[Country].&[US]");

getMemberDisplayMode(dimensionId)

Returns display mode for dimension (Key, Description, Text, etc.).

var mode = ds.getMemberDisplayMode("Product");
// Returns: "Description" | "Key" | "KeyDescription" | etc.

Measure Methods

getMeasures()

Returns all measures of the data source.

var measures = ds.getMeasures();
// Returns: Array of MeasureInfo objects
// dimensionId is always "@MeasureDimension"

Example:

var measures = Chart_1.getDataSource().getMeasures();
measures.forEach(function(m) {
    console.log(m.id + ": " + m.description);
});

Filter Methods

setDimensionFilter(dimensionId, filterValue)

Sets filter on a dimension. Overwrites existing filter.

// Single value
ds.setDimensionFilter("Year", "2024");

// Qualified member ID
ds.setDimensionFilter("Date", "[Date].[YQM].&[2024]");

// Multiple values (array)
ds.setDimensionFilter("Region", ["EMEA", "APAC", "AMER"]);

Important: Does not affect Advanced Filters set in designer.

removeDimensionFilter(dimensionId)

Removes filter from dimension.

ds.removeDimensionFilter("Year");

getDimensionFilters(dimensionId)

Returns current filters on a dimension.

var filters = ds.getDimensionFilters("Year");
// Returns: Array of FilterInfo objects
// { value: string, type: "Single" | "Range" | "Multiple" }

Example:

var yearFilter = ds.getDimensionFilters("Year")[0];
console.log(yearFilter);
// { value: '[Date].[YQM].&[2024]', type: 'Single' }

copyDimensionFilterFrom(sourceDataSource, dimensionId?)

Copies filters from another data source.

// Copy all filters
Table_1.getDataSource().copyDimensionFilterFrom(Chart_1.getDataSource());

// Copy specific dimension filter
Table_1.getDataSource().copyDimensionFilterFrom(
    Chart_1.getDataSource(),
    "Location"
);

Performance Tip: More efficient than setting filters individually.

clearAllFilters()

Removes all dimension filters.

ds.clearAllFilters();

Variable Methods

getVariables()

Returns all variables of the data source.

var variables = ds.getVariables();
// Returns: Array of VariableInfo objects

getVariableValues(variableId)

Returns values of a variable.

var values = ds.getVariableValues("VAR_YEAR");
// Returns: Array of VariableValue objects

setVariableValue(variableId, value)

Sets value of a variable.

ds.setVariableValue("VAR_YEAR", "2024");

Data Access Methods

getData(selection)

Returns data values for a specific selection.

var selection = {
    "@MeasureDimension": "[Account].[parentId].&[Revenue]",
    "Location": "[Location].[Country].&[US]"
};

var data = ds.getData(selection);
// Returns: { formattedValue: string, rawValue: number }

Example:

var data = Chart_1.getDataSource().getData({
    "@MeasureDimension": "[Account].[parentId].&[Quantity_sold]",
    "Location": "[Location].[State].&[CA]"
});
console.log("Formatted:", data.formattedValue);
console.log("Raw:", data.rawValue);

getResultSet()

Returns current result set without backend trip.

var resultSet = ds.getResultSet();

Performance: Significantly faster than getMembers(). Use when possible.

getResultMember(dimensionId, selection)

Returns member details from result set.

var member = ds.getResultMember("Location", selection);
// Includes parent relationship info

getDataSelections()

Returns current data selections as key-value pairs.

var selections = ds.getDataSelections();
// Returns: Object mapping dimension IDs to member IDs

Hierarchy Methods

getHierarchies(dimensionId)

Returns hierarchies for a dimension.

var hierarchies = ds.getHierarchies("Date");
// Returns: Array of { id: string, description: string }

collapseNode(dimensionId, selection)

Collapses hierarchy node.

ds.collapseNode("Date", {
    "@MeasureDimension": "[Account].[Revenue]",
    "Date": "[Date].[YQM].&[2024]"
});

expandNode(dimensionId, selection)

Expands hierarchy node.

ds.expandNode("Date", selection);

Refresh Control

refreshData()

Refreshes data from backend.

ds.refreshData();

setRefreshPaused(paused)

Pauses or resumes automatic refresh.

// Pause before multiple operations
ds.setRefreshPaused(true);

// Apply multiple changes
ds.setDimensionFilter("Year", "2024");
ds.setDimensionFilter("Region", "EMEA");
ds.setDimensionFilter("Product", "Widget");

// Resume (single backend call)
ds.setRefreshPaused(false);

Best Practice: Always use for batch filter operations.

isRefreshPaused()

Returns current pause state.

if (ds.isRefreshPaused()) {
    console.log("Refresh is paused");
}

DataSource Types

DataSourceType Enumeration

DataSourceType.Model        // SAC model
DataSourceType.Query        // Live query
DataSourceType.Calculation  // Calculated source

MemberAccessMode Enumeration

MemberAccessMode.All          // All master data members
MemberAccessMode.BookedValues // Only members with data

Complete Example

// Complex filtering scenario
function applyComplexFilters(chartDs, tableDs, year, region, product) {
    // Pause both data sources
    chartDs.setRefreshPaused(true);
    tableDs.setRefreshPaused(true);

    try {
        // Apply filters to chart
        chartDs.setDimensionFilter("Year", year);
        chartDs.setDimensionFilter("Region", region);
        chartDs.setDimensionFilter("Product", product);

        // Copy filters to table
        tableDs.copyDimensionFilterFrom(chartDs);

    } catch (error) {
        console.log("Error applying filters:", error);
    }

    // Resume both (triggers single refresh each)
    chartDs.setRefreshPaused(false);
    tableDs.setRefreshPaused(false);
}

// Usage
var chartDs = Chart_1.getDataSource();
var tableDs = Table_1.getDataSource();
applyComplexFilters(chartDs, tableDs, "2024", "EMEA", "Widget-A");

Related Documentation

Official Reference: https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/release/en-US/index.html

Source: SKILL.md on GitHub

1 alert16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill is a comprehensive reference and template collection for SAP Analytics Cloud (SAC) scripting. It provides secure instructions for setting up an associated Model Context Protocol (MCP) server, including commit pinning and security flags during installation. It also incorporates multiple security best practices for developers, such as origin validation for iframe communication.

  • Socket16d

    1 alert: gptAnomaly

  • Snyk16d

    Risk: MEDIUM · 1 issue

  • Runlayer6mo

    32/61 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 620a19a. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 weeks ago.

Activeupdated 2 months ago
Other metadata
metadata
{
  "maintainer": "Eduard Jiglau",
  "maintainer_email": "hello@sap-ai-skills.com",
  "website": "https://sap-ai-skills.com",
  "version": "2.4.1",
  "last_verified": "2026-06-11",
  "sac_version": "Q2 2026 (2026.8)",
  "api_reference_version": "2025.20 (OSE Q2 2026)",
  "documentation_source": "https://help.sap.com/docs/SAP_ANALYTICS_CLOUD",
  "reference_files": 66,
  "template_patterns": 56,
  "agents": 4,
  "commands": 4,
  "status": "docs_audited_runtime_pending",
  "known_issues": [
    "Live SAC story/runtime checks require tenant evidence before claiming production validation."
  ]
}

README badge

README badge for secondsky/sap-skills/sap-sac-scripting