具有多个成员属性的 ssas 计算成员

ssas calculated member with several member properties

我想知道是否有更好的方法来编写这样的计算成员:

(
  [Measures].[Number of accounts]
 ,[Account Status].[Account Status].&[Anonymous]
 ,[Account Status].[Account Status].&[Closed]
 ,[Account Status].[Account Status].&[Closed due to Fraud]
 ,[Account Status].[Account Status].&[To be closed]
 ,[Account Status].[Account Status].&[<unknown>]
)

您的意思是创建计算度量或计算维度成员吗?

你能使用 EXCEPT 或否定语法吗?

类似于

(Measures.Number 个帐户,除了{状态 A,状态 B}

或用减号替换单词 EXCept。

这是 tuple - 也是一种非常有效的定位立方体一部分的方法:

(
  [Measures].[Number of accounts]
 ,[Account Status].[Account Status].&[Anonymous]
 ,[Account Status].[Account Status].&[Closed]
 ,[Account Status].[Account Status].&[Closed due to Fraud]
 ,[Account Status].[Account Status].&[To be closed]
 ,[Account Status].[Account Status].&[<unknown>]
)

...但它需要是立方体中的一个特定点 - 但是您已经包含了来自同一层次结构的几个成员 [Account Status].[Account Status] 所以这不是您立方体中的一个点,因此它将错误。

下面是一个有效元组的例子:

WITH 
  MEMBER [exampleTuple] AS 
    (
      [Measures].[Internet Sales Amount]
     ,[Date].[Calendar Year].&[2007]
    ) 
SELECT 
  [exampleTuple] ON 0
 ,{
    [Product].[Category].[Bikes]
   ,[Product].[Category].[Clothing]
  } ON 1
FROM [Adventure Works];

所以这会返回 2007 年的互联网销售额:

如果我按照您的操作将年份层次结构中的另一个成员添加到元组中,那么它会因为不确定我指的是多维数据集的哪一部分而感到困惑 - 2006 年或 2007 年!

WITH 
  MEMBER [exampleTuple] AS 
    (
      [Measures].[Internet Sales Amount]
     ,[Date].[Calendar Year].&[2007]
     ,[Date].[Calendar Year].&[2006]
    ) 
SELECT 
  [exampleTuple] ON 0
 ,{
    [Product].[Category].[Bikes]
   ,[Product].[Category].[Clothing]
  } ON 1
FROM [Adventure Works];

给出:

双击#Error 一词告诉我们异常:

完全符合我们的预期。

解决此异常的一种方法是将来自同一层次结构的成员预先聚合到一个成员中,以便处理器确切地知道要转到多维数据集的哪个部分 space:

WITH 
  MEMBER [Date].[Calendar Year].[All].[2006+2007] AS 
    Aggregate({[Date].[Calendar Year].&[2007],[Date].[Calendar Year].&[2006]}) 
  MEMBER [exampleTuple] AS 
    (
      [Measures].[Internet Sales Amount]
     ,[Date].[Calendar Year].[All].[2006+2007]
    ) 
SELECT 
  [exampleTuple] ON 0
 ,{
    [Product].[Category].[Bikes]
   ,[Product].[Category].[Clothing]
  } ON 1
FROM [Adventure Works];

现在我们得到了我们想要的:

然后我们可以使用这个初始聚合来做任何我们想做的事情——你提到排除一些成员——这是可能的:

WITH 
  MEMBER [Date].[Calendar Year].[All].[2006+2007] AS 
    Aggregate
    (
      Except
      (
        [Date].[Calendar Year].[Calendar Year].MEMBERS
       ,{
          [Date].[Calendar Year].&[2007]
         ,[Date].[Calendar Year].&[2006]
        }
      )
    ) 
  MEMBER [exampleTuple] AS 
    (
      [Measures].[Internet Sales Amount]
     ,[Date].[Calendar Year].[All].[2006+2007]
    ) 
SELECT 
  [exampleTuple] ON 0
 ,{
    [Product].[Category].[Bikes]
   ,[Product].[Category].[Clothing]
  } ON 1
FROM [Adventure Works];