Ssas 使用+;而不是聚合(联合)

Ssas 使用+;而不是聚合(联合),ssas,mdx,olap,Ssas,Mdx,Olap,我在看MSDN上的这篇文章: 它声明+和Union是等效的…在以下内容中并不完全相同,因为如果我选择使用Union,则需要应用Aggregate 它的可读性更强,但是选择+而不是聚合(Union)是否有任何性能提升 WITH MEMBER [Employee].[Employee].[blah] AS [Employee].[Employee].[Amy E. Alberts] + [Employee].[Employee].[Garrett R. Va

我在看MSDN上的这篇文章:

它声明+和Union是等效的…在以下内容中并不完全相同,因为如果我选择使用
Union
,则需要应用
Aggregate

它的可读性更强,但是选择
+
而不是
聚合(Union
)是否有任何性能提升

WITH 
  MEMBER [Employee].[Employee].[blah] AS 
      [Employee].[Employee].[Amy E. Alberts]
    + 
      [Employee].[Employee].[Garrett R. Vargas] 
  MEMBER [Employee].[Employee].[blahblah] AS 
    Aggregate
    (
      Union
      (
        {[Employee].[Employee].[Amy E. Alberts]}
       ,{[Employee].[Employee].[Garrett R. Vargas]}
      )
    ) 
SELECT 
  [Measures].[Reseller Sales Amount] ON 0
 ,{
    [Employee].[Employee].[Amy E. Alberts]
   ,[Employee].[Employee].[Garrett R. Vargas]
   ,[Employee].[Employee].[blah]
   ,[Employee].[Employee].[blahblah]
  } ON 1
FROM [Adventure Works]
WHERE 
  [Date].[Calendar].[Month].&[2006]&[8];

问题在于,
+
在MDX中有多种用途:作为数字加法、字符串连接和联合运算符。由于a成员定义需要一个表达式来传递值,因此您在两个成员之间使用运算符,并且当前度量值的值是数字的,因为使用数字加法

如果将构件括在大括号中:

  MEMBER [Employee].[Employee].[blah] AS 
      {[Employee].[Employee].[Amy E. Alberts]}
    + 
      {[Employee].[Employee].[Garrett R. Vargas] }
您会得到一个错误,该错误与
+
运算符的字符串或数字表达式相同

而且可能会有一个小的性能增益,但是如果当前度量值不是通过
sum
进行聚合,则结果可能会有所不同,在这种情况下,这相当于将两个成员值相加


我个人不喜欢将
+
*
等运算符重载用于不同的目的。
+
*
应限制为数字,无论是整数、浮点数还是小数。我也更喜欢在Java、JavaScript和.net中使用另一个运算符进行字符串连接,而不是
+
,以及Microsoft SQL和MDX。标准SQL使用
| |
,Perl使用
,因此有一些替代方法可以明显避免歧义,并且您清楚地知道在编写
'2'| | 1
'2'+1
2+'1'
2+1

@这取决于具体情况。如果您确定您只有可求和的度量,
+
是一种简单且可能稍快的定义度量的方法。然而,
聚合
是更一般的概念。如果您只有几个单个成员/元组元素,那么您可以始终编写
{a,B,C}
而不是
{a}+{B}+{C}
甚至
联合(Union({A},{B}),{C})