如何在MDX中添加行标题?

时间:2017-05-06 11:53:24

标签: sql database mdx cube

我有一个MDX查询,我想用它来将一些Cube数据上传到SQL数据库。为此,我希望所有行都有一个标题,默认情况下在MDX中没有这样做。

有人可以修改以下MDX查询以在结果表中添加最左边两列的标题吗?

查询:

SELECT                                                                                  
NON EMPTY                                                                                
{                                                                                                                                         
  [Measures].[Internet Order Quantity],  
  [Measures].[Internet Sales Amount]                                                 
} ON COLUMNS,      
NON EMPTY                                                                                
{ (                                                                                      
  [Customer].[Education].[Education].ALLMEMBERS *
  [Customer].[Home Owner].[Home Owner].ALLMEMBERS
) } ON ROWS                                                                                                                                             
FROM [Adventure Works]

结果表:

Query result

由于

2 个答案:

答案 0 :(得分:1)

通过SQL Server linked server connected to SSAS读取查询对于将针对多维数据集的查询结果插入SQL Server的方案来说是一个合理的选择。通过链接服务器读取时,该确切查询将具有列标题。所以我不担心SSMS MDX查询窗口将查询结果呈现为Cellset而不是Rowset。

答案 1 :(得分:0)

格雷格的回答是正确的。 我们发现链接服务器到SSAS的问题(速度和阻塞)并使用以下CLR解决方案:

https://olapextensions.codeplex.com/

然后,您可以使用存储过程执行以下操作:

CREATE TABLE #results(
   Education     VARCHAR(250),
   Owner         VARCHAR(250),
   OrderQuantity FLOAT,
   SalesAmount   FLOAT
);

DECLARE @Server NVARCHAR(30) = 'localhost'
DECLARE @Database NVARCHAR(50) = 'AdventureWorksDW2012Multidimensional-EE';
DECLARE @MDX NVARCHAR(MAX) = 
'
SELECT                                                                                  
NON EMPTY                                                                                
{                                                                                                                                         
  [Measures].[Internet Order Quantity],  
  [Measures].[Internet Sales Amount]                                                 
} ON COLUMNS,      
NON EMPTY                                                                                
{ (                                                                                      
  [Customer].[Education].[Education].ALLMEMBERS *
  [Customer].[Home Owner].[Home Owner].ALLMEMBERS
) } ON ROWS                                                                                                                                             
FROM [Adventure Works]
'

INSERT INTO #results
EXEC ExecuteOLAP @Server, @Database, @MDX;

SELECT *
FROM   #results;