MdxQuery
MdxQuery
Queries an OLAP server database using an MDX query.
While DbQuery can query relational database servers, you can't use it to query SQL Server's Analysis Services to access data stored in an OLAP hypercube. For this, MdxQuery is required:
MdxQuery( connectionString, mdx : atomic textual ; userId, password, sep : optional atomic textual )
This function queries an OLAP server such as Microsoft Analysis Services (or theoretically others such as Hyperion, etc), using an arbitrary MDX query, and returns a multi-D array.
An example usage would be:
Constant database := "Adventure Works DW"; Constant connStr := "Data Source=local;Provider=MSOLAP;Integrated Security=SSPI" Variable mdx := MdxQuery( connectionStr : connStr, mdx : "SELECT ([Customer].[English Occupation].[English Occupation], {[Measures].[Sales Amount],[Measures].[Freight]}) on axis(0), ([Due Date].[Calendar Year].[Calendar Year], [Due Date].[Calendar Quarter].[Calendar Quarter]) on axis(1), [Customer].[Marital Status] on axis(2) FROM [Adventure Works DW]" )
This query retrieves a 3-D result, since the MDX query specifies 3 axes.
The MdxFunction creates local indexes for each dimension, and uses the member captions as labels for the elements in each axis. The local indexes are named .Axis1, .Axis2, .Axis3. With a simple single-dimension MDX axis, the index simply contains the member captions as elements. However, some cube axes, such as Axis(0) and Axis(1) in the example MDX query are hierarchical. For these, MdxQuery concatenates the member captions, so you might get an element such as: "2003,1" for Axis(1) -- i.e., [Year] is 2003 and [Quarter] is 1, so the Analytica element is "2003,1". The sep parameter controls the separator (comma by default), so using sep:"|" you would get elements "2003|1" instead, for example.
MdxQuery can be used to read or write data to the hypercube, depending on the Mdx command used. The method in which writes are handled is a function of the OLAP server. Microsoft Analysis Services uses a write-back table, which changes the apparent cube contents if the cube is requeried, but does not change the back-end relational data tables. Some write-backs are temporary (live only as long as the session), while other change the cube permanently.
Additional Detailed Information:
- Connection Strings
- MdxQuery Errors and what they mean
Enable comment auto-refresher