WITH
MEMBER [Measures].[Product Name]
AS [Product].[Product].CurrentMember.Name
MEMBER [Measures].[Product Unique Name]
AS [Product].[Product].CurrentMember.UniqueName
SELECT
{ [Measures].[Product Name], [Measures].[Product Unique Name] } ON 0
, {[Product].[Product].[Product].Members } ON 1
FROM [Adventure Works];
However, I cannot make the parameter as optional because of the limit, hence I need a member that represents NULL. For that, I need to introduce query-scoped calculated member and add it to the resultset;
WITH
MEMBER [Measures].[Product Name]
AS [Product].[Product].CurrentMember.Name
MEMBER [Measures].[Product Unique Name]
AS [Product].[Product].CurrentMember.UniqueName
MEMBER [Product].[Product].[All Products].[(NULL)]
AS Aggregate([Product].[Product].&[(NULL)])
SELECT
{ [Measures].[Product Name], [Measures].[Product Unique Name] } ON 0
, {[Product].[Product].[Product].AllMembers } ON 1
FROM [Adventure Works];
Now just like parameters loaded from SQL Server databases, I have a (NULL) item in the parameter for handling the situation. If you get an issue with sorting the result that MDX produces, alternative way for that is, executing the MDX using a TSQL Stored Procedure connecting to Analysis Services via a Linked Server object.
CREATE PROC dbo.GetProductsFromSSAS
AS
BEGIN
DECLARE @Query nvarchar(max)
SET @Query = N'
SELECT
"[Measures].[Product Name]"
, "[Measures].[Product Unique Name]"
FROM
OpenQuery(OLAPDatabase, ''
WITH
MEMBER [Measures].[Product Name]
AS [Product].[Product].CurrentMember.Name
MEMBER [Measures].[Product Unique Name]
AS [Product].[Product].CurrentMember.UniqueName
MEMBER [Product].[Product].[All Products].[(NULL)]
AS Aggregate([Product].[Product].&[(NULL)])
SELECT
{ [Measures].[Product Name], [Measures].[Product Unique Name] } ON 0
, {[Product].[Product].[Product].AllMembers } ON 1
FROM [Adventure Works];
'')
ORDER BY 1;'
EXEC SP_EXECUTESQL @Query;
END
GO













