Files
gh-secondsky-sap-skills-ski…/references/api-datasource.md
2025-11-30 08:55:33 +08:00

9.5 KiB

DataSource API Reference

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

Source: Analytics Designer API Reference 2025.14


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");

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