# DataSource API Reference Complete reference for the DataSource API in SAP Analytics Cloud scripting. **Source**: [Analytics Designer API Reference 2025.14](https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/release/en-US/index.html) --- ## Table of Contents 1. [Getting DataSource Reference](#getting-datasource-reference) 2. [Information Methods](#information-methods) 3. [Dimension Methods](#dimension-methods) 4. [Measure Methods](#measure-methods) 5. [Filter Methods](#filter-methods) 6. [Variable Methods](#variable-methods) 7. [Data Access Methods](#data-access-methods) 8. [Hierarchy Methods](#hierarchy-methods) 9. [Refresh Control](#refresh-control) 10. [DataSource Types](#datasource-types) --- ## Getting DataSource Reference DataSources cannot be referenced directly. Obtain reference via widget: ```javascript // 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. ```javascript var info = ds.getInfo(); // Returns: DataSourceInfo object // - id: string // - description: string // - modelId: string // - type: DataSourceType ``` ### getDataSourceInfo() Returns detailed data source metadata. ```javascript var dsInfo = ds.getDataSourceInfo(); ``` --- ## Dimension Methods ### getDimensions() Returns all dimensions of the data source. ```javascript var dimensions = ds.getDimensions(); // Returns: Array of DimensionInfo objects // Each contains: { id: string, description: string } ``` **Example**: ```javascript 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 ```javascript // 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 ```javascript { 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. ```javascript var member = ds.getMember("Location", "[Location].[Country].&[US]"); ``` ### getMemberDisplayMode(dimensionId) Returns display mode for dimension (Key, Description, Text, etc.). ```javascript var mode = ds.getMemberDisplayMode("Product"); // Returns: "Description" | "Key" | "KeyDescription" | etc. ``` --- ## Measure Methods ### getMeasures() Returns all measures of the data source. ```javascript var measures = ds.getMeasures(); // Returns: Array of MeasureInfo objects // dimensionId is always "@MeasureDimension" ``` **Example**: ```javascript 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. ```javascript // 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. ```javascript ds.removeDimensionFilter("Year"); ``` ### getDimensionFilters(dimensionId) Returns current filters on a dimension. ```javascript var filters = ds.getDimensionFilters("Year"); // Returns: Array of FilterInfo objects // { value: string, type: "Single" | "Range" | "Multiple" } ``` **Example**: ```javascript var yearFilter = ds.getDimensionFilters("Year")[0]; console.log(yearFilter); // { value: '[Date].[YQM].&[2024]', type: 'Single' } ``` ### copyDimensionFilterFrom(sourceDataSource, dimensionId?) Copies filters from another data source. ```javascript // 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. ```javascript ds.clearAllFilters(); ``` --- ## Variable Methods ### getVariables() Returns all variables of the data source. ```javascript var variables = ds.getVariables(); // Returns: Array of VariableInfo objects ``` ### getVariableValues(variableId) Returns values of a variable. ```javascript var values = ds.getVariableValues("VAR_YEAR"); // Returns: Array of VariableValue objects ``` ### setVariableValue(variableId, value) Sets value of a variable. ```javascript ds.setVariableValue("VAR_YEAR", "2024"); ``` --- ## Data Access Methods ### getData(selection) Returns data values for a specific selection. ```javascript var selection = { "@MeasureDimension": "[Account].[parentId].&[Revenue]", "Location": "[Location].[Country].&[US]" }; var data = ds.getData(selection); // Returns: { formattedValue: string, rawValue: number } ``` **Example**: ```javascript 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. ```javascript var resultSet = ds.getResultSet(); ``` **Performance**: Significantly faster than `getMembers()`. Use when possible. ### getResultMember(dimensionId, selection) Returns member details from result set. ```javascript var member = ds.getResultMember("Location", selection); // Includes parent relationship info ``` ### getDataSelections() Returns current data selections as key-value pairs. ```javascript var selections = ds.getDataSelections(); // Returns: Object mapping dimension IDs to member IDs ``` --- ## Hierarchy Methods ### getHierarchies(dimensionId) Returns hierarchies for a dimension. ```javascript var hierarchies = ds.getHierarchies("Date"); // Returns: Array of { id: string, description: string } ``` ### collapseNode(dimensionId, selection) Collapses hierarchy node. ```javascript ds.collapseNode("Date", { "@MeasureDimension": "[Account].[Revenue]", "Date": "[Date].[YQM].&[2024]" }); ``` ### expandNode(dimensionId, selection) Expands hierarchy node. ```javascript ds.expandNode("Date", selection); ``` --- ## Refresh Control ### refreshData() Refreshes data from backend. ```javascript ds.refreshData(); ``` ### setRefreshPaused(paused) Pauses or resumes automatic refresh. ```javascript // 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. ```javascript if (ds.isRefreshPaused()) { console.log("Refresh is paused"); } ``` --- ## DataSource Types ### DataSourceType Enumeration ```javascript DataSourceType.Model // SAC model DataSourceType.Query // Live query DataSourceType.Calculation // Calculated source ``` ### MemberAccessMode Enumeration ```javascript MemberAccessMode.All // All master data members MemberAccessMode.BookedValues // Only members with data ``` --- ## Complete Example ```javascript // 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 - [Widgets API](api-widgets.md) - [Planning API](api-planning.md) - [Application API](api-application.md) **Official Reference**: [https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/release/en-US/index.html](https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/release/en-US/index.html)