Import Data Connection to OData Services
You can create a connection that allows you to import data from both on-premise and cloud data sources using generic OData services. It is possible to request a customized OData data source solution.
Prerequisites
You have completed ONE of the following setup options:
- Performed setup using the SAP Analytics Cloud Agent Simple Deployment Kit. For more information, see SAP Analytics Cloud Agent Simple Deployment Kit. You must also perform steps 6-12 of Configuring the Cloud Connector.
- Performed a manual setup of the following required components:
- The Cloud Connector is installed. For more information, see Installing the Cloud Connector.
- The Cloud Connector is configured. For more information, see Configuring the Cloud Connector.
The SAP Analytics Cloud agent doesn't need to be installed during the configuration process.
Context
- SAP Analytics Cloud supports OData Version 4.0. Logical Operators (such as Equal, Greater than or equal, and logical Or) are supported. The Not operator (logical negation), arithmetic operators, and arithmetic functions are not supported.
- While OData exposes one-to-many navigation, SAP Analytics Cloud cannot follow these relationships because doing so would distort the measures at the parent level. OData v4.0 supports Lambda operators “any” and “all”, which can reduce the collection of children to a single Boolean value. For this to work, both the server and SAP Analytics Cloud must support OData v4.0.
- Supported OData Authorization request formats:
Authorization Code Request
The data service must accept the token request as URL encoded.
The data service must accept an Authorization header with the client ID and client secret encoded as a base 64 string.
The data service must accept as a body parameter grant_type: authorization_code.
Scopes are optional, but if supported, the data service must accept them as a body parameter scope: <SCOPE1 SCOPE2 SCOPE3...>. The scopes are sent as a string.
Example:
curl -X POST \ <Token URL> \ -H 'Accept: */*' \ -H 'Authorization: Basic <BASE 64 Encoded String>' \ -d grant_type=authorization_grant -d code=<Authorization code> -d redirect_uri=<Redirect URI>
The response must be of content type JSON, and include in the response body the following parameters as top level JSON objects: access_token, refresh_token, and token_type. It may contain other parameters.
Example:
{ "access_token": "<ACCESS TOKEN>", "refresh_token": <REFRESH TOKEN>", "token_type": "Bearer", "expires_in": 0, "scope": "" }
Note that if the required parameters are returned in arrays or as nested parameters, they may not be processed correctly.
Incorrect Example:
{ "authorization" { "access_token": "<ACCESS TOKEN>", "refresh_token": <REFRESH TOKEN>", "token_type": "Bearer", "expires_in": 0, "scope": "" } }
Client Credentials
The data service must accept the token request as URL encoded.
The data service must accept an Authorization header with the client ID and client secret encoded as a base 64 string.
The data service must accept as a body parameter grant_type: client_credentials.
Scopes are optional, but if supported, the data service must accept them as a body parameter scope: <SCOPE1 SCOPE2 SCOPE3...>. The scopes are sent as a string.
Example:
curl -X POST \ <Token URL> \ -H 'Accept: */*' \ -H 'Authorization: Basic <BASE 64 Encoded String>' \ -d grant_type=client_credentials
The response must be of content type JSON, and include in the response body the following parameters as top level JSON objects: access_token, and token_type. It may contain other parameters.
Example:
{ "access_token": "<ACCESS TOKEN>", "token_type": "Bearer", "expires_in": 0, "scope": "" }
Note that if the required parameters are returned in arrays or as nested parameters, they may not be processed correctly.
Incorrect Example:
{ "authorization" { "access_token": "<ACCESS TOKEN>", "token_type": "Bearer", "expires_in": 0, "scope": "" } }
Basic
The data service must accept an Authorization header with the user name and password encoded as a base 64 string.
- Embedded Complex types are not supported.