别名MDX查询SSAS

时间:2013-10-08 04:59:05

标签: ssas mdx

WITH MEMBER [Measures].[NetPromoterScore] AS (IIF(([Measures].[Net Promoter Score] = 1/0 OR 
[Measures].[Net Promoter Score] = -1/0 OR ISEMPTY([Measures].[Net Promoter Score]) 
OR [Measures].[Avg Revenue Per Unit] = 1/0 OR [Measures].[Avg Revenue Per Unit] = -1/0 OR 
ISEMPTY([Measures].[Avg Revenue Per Unit]) ), NULL, [Measures].[Net Promoter Score])) 

MEMBER [Measures].[AvgRevenuePerUnit] AS (IIF(([Measures].[Net Promoter Score] = 1/0 
OR [Measures].[Net Promoter Score] = -1/0 OR ISEMPTY([Measures].[Net Promoter Score]) 
OR [Measures].[Avg Revenue Per Unit] = 1/0 OR [Measures].[Avg Revenue Per Unit] = -1/0 
OR ISEMPTY([Measures].[Avg Revenue Per Unit]) ), NULL, [Measures].[Avg Revenue Per Unit]))

SELECT NON EMPTY
       { {[Measures].[NetPromoterScore],[Measures].[AvgRevenuePerUnit]} }
       ON COLUMNS ,
       NON EMPTY
       {{Hierarchize(DrilldownLevel({[Roles].[Enterprise Role].[ALL]}))}}
       DIMENSION  PROPERTIES MEMBER_CAPTION,  MEMBER_UNIQUE_NAME
       ON ROWS
  from Enterprise 
 WHERE (FILTER( [Employees].[EID].[EID],[Measures].[Avg Revenue Per Unit]> 700),
        {[Areas].[Area].&[3]},
        {[Markets].[Market].&[1]},{[Regions].[Region].&[2]},{[Locations].[Location].&[6],[Locations].[Location].&[6]},
        {[Dates].[Date].&[20130219]:[Dates].[Date].&[20130318]})

如您所见,我将[NetPromoterScore]和[Avg Revenue Per Unit]列名称与[AvgRevenuePerUnit]混淆为[Net Promoter Score]列名称。但在我的C#代码中,使用的名称是[Net Promoter Score]和[Avg Revenue Per Unit],我不能用新别名更改这些以前的名称,因为我必须在几十个文件中进行更改然后我必须测试整个应用。我可以在上面的查询中使用两次别名来获取相同的先前列名称,还是可以在没有别名的情况下从上面的查询中获得相同的结果?

1 个答案:

答案 0 :(得分:1)

实际上,就MDX而言,您没有为成员添加别名,而是创建了新成员。

我看到两种可能性如何解决这个问题:

  1. 将这些计算移动到立方体计算脚本,i。即改名 多维数据集中的原始度量,并定义计算的度量 使用您需要的名称和您拥有的相同计算 在您的查询中。然后,您将进行原始重命名的度量 无形。这将是我眼中最好的解决方案 让每个多维数据集用户从改进中受益,而不会破坏 外部代码或查询。

  2. 取决于您在C#代码中引用度量的准确程度 (您没有发布样本),您可以使用标题属性 这些措施,我即重写成员定义如下:

    WITH MEMBER [Measures]。[NetPromoterScore] AS IIF(...),CAPTION ='Net Promoter Score'      会员[措施]。[AvgRevenuePerUnit] AS IIF(...),CAPTION ='平均每单位收入'