MDX命令中{OR}操作的问题

时间:2015-10-24 20:26:45

标签: mdx

我尝试针对具有WHERE Group A OR Group B语法的多维数据集运行基本查询。我已根据WHERE命令需要列表的在线文章尝试了下面的代码,但它无法识别列表:

SELECT FROM [Ticket] 
WHERE ([Analyst].[Group Name].&[IS Epic Service Desk],[Analyst].[Group Name].&[IS Service Desk])

在当前状态下,它发出的错误是我试图在同一个Crossjoin中多次使用相同的层次结构。我尝试添加{}来隔离语句,但收到超出范围的错误。

最终目标是在同一列表中返回IS Epic Service Desk和IS Service Desk的匹配项的查询。

1 个答案:

答案 0 :(得分:0)

()子句中的WHERE表示要分析服务,您要指定tuple - 这是多维数据集空间中的单个点。因此,无法使用同一层次结构中的两个成员定义您在多维数据集中作为单个点获取的错误消息。

所以我们知道这没关系:

SELECT
... 
FROM [Ticket] 
WHERE ([Analyst].[Group Name].&[IS Epic Service Desk]);

就是这样:

SELECT
... 
FROM [Ticket] 
WHERE ([Analyst].[Group Name].&[IS Service Desk]);

您提到使用{}这是正确的。我有点不确定你把这些括号放在哪里,但下面应该实现OR逻辑:

SELECT
... 
FROM [Ticket] 
WHERE (
  {
    [Analyst].[Group Name].&[IS Service Desk]
   ,[Analyst].[Group Name].&[IS Epic Service Desk]
  }
 );

通常在布尔逻辑中OR表示是X,或者是Y,或者是X和Y.我不确定OR的这个定义是否与你的最后一句一致问题

  

最终目标是返回IS Epic Service Desk匹配的查询   和IS服务台在同一个列表中。

以上几乎听起来更像AND逻辑,因此您只需要Epic Service Desk和Service Desk时的数据。如果是这种情况,那么级联NonEmpty表达式就足够了:

SELECT
... 
FROM [Ticket] 
WHERE (
  {
    NonEmpty(
      NonEmpty(
         [Customer].[Customer].[Customer].MEMBERS
        ,[Analyst].[Group Name].&[IS Service Desk]
      )
   ,[Analyst].[Group Name].&[IS Epic Service Desk]
   )
 );