Ssas 使用+;而不是聚合(联合)
我在看MSDN上的这篇文章: 它声明+和Union是等效的…在以下内容中并不完全相同,因为如果我选择使用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
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})
。