Connecting and Querying OLAP

In this article, we’ll describe how to connect an OLAP cube and how to query it.

Prerequisites

  • Installed SSAS with a processed OLAP cube. To create an OLAP cube, you can use this tutorial, and Microsoft SQL Server Data Tools can be downloaded here;
  • A user account with full permissions on Analysis Services database and cube;
  • IIS Web Server providing an application which points to the SSAS instance. For detailed information on implementation, please see Microsoft documentation;
  • Network acces from Data Virtuality to the web server.

Connection

Click ‘Add Data Source’, scroll down to Other and select OLAP XMLA. Enter the required information as shown below:

  • Alias - name of your data source. You can enter any name, but keep in mind that the name can contain only Latin letters, digits, and underscores.
  • DB-config: Catalog is the name of the Analysis Services Database and DataSource is the name of the Analysis Service instance (hostname )
  • Path - webserver path to the application (OLAP,  full path: http://<host>:8080/olap/msmdpump.dll for testing)

Alternatively, you can use the following statement:

EXEC SYSADMIN.createConnection(name => 'olap', jbossCLITemplateName => 'olap_xmla', connectionOrResourceAdapterProperties => 'host=<hostname>,port=8080,path=/olap/msmdpump.dll,db-config="Catalog=<databasename>;DataSource=<serverinstance>",user-name=<username>,password=<password>') ;; EXEC SYSADMIN.createDataSource(name => 'olap', translator => 'olap', modelProperties => 'importer.useFullSchemaName=false', translatorProperties => '') ;;

 

Example Query

Let’s consider this query on Microsoft SQL Server:

SELECT NON EMPTY { [Measures].[Order Quantity] } ON COLUMNS,NON EMPTY { ( [Dim Product].[English Product Name].[English Product Name].ALLMEMBERS ) }DIMENSIONS PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM (Cube_AdventureWorks DW2012) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS;

To process it, we can use the following syntax in Data VirtualIty (please note that the result must be parsed with ARRAYTABLE):

select w.* from table( exec "olap.invokeMdx"( "request" => ' SELECT NON EMPTY { [Measures].[Order Quantity] } ON COLUMNS, NON EMPTY { ([Dim Product].[English Product Name].[English Product Name].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Cube_Adventure Works DW2012] CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS') ) a, ARRAYTABLE( a.tuple COLUMNS "English Product Name" string, "Order Quantity" string ) w

Here’s how our example query and the result will look in Data Virtuality Studio:

1 Like