Ssas SQL到MDX Where IN子句

Ssas SQL到MDX Where IN子句,ssas,mdx,Ssas,Mdx,我遇到一种情况,需要制定MDX查询。相应的SQL查询如下所示: SELECT no_of_downloads FROM table_1 WHERE project_code IN ('abc', 'def', 'ghi' , .....) 我制定了以下MDX查询,但一次只能对一个项目代码使用它 SELECT [Measures].[#Activity] ON COLUMNS ,Filter ( [Organisation Dimension].[Txt Projec

我遇到一种情况,需要制定MDX查询。相应的
SQL
查询如下所示:

SELECT no_of_downloads 
FROM   table_1
WHERE  project_code IN ('abc', 'def', 'ghi' , .....)
我制定了以下MDX查询,但一次只能对一个项目代码使用它

SELECT 
  [Measures].[#Activity] ON COLUMNS
 ,Filter
  (
    [Organisation Dimension].[Txt Project Code].MEMBERS
   ,
    [Organisation Dimension].[Txt Project Code].CurrentMember.Name = 'KM_BNG'
  ) ON ROWS
FROM [Activity Cube]
WHERE 
  (
    [Activity Dimension].[Txt Activity Name].&[Download]
   ,[System Dimension].[Txt System Name].&[KShop] //ENTER CODE HERE//
   ,[Time Dimension].[Fiscal Hierarchy].[Fiscal Half Year Name].&[2014-04-01T00:00:00]
  );

如何在列表中添加更多项目代码

您不需要过滤器,只需在大括号中枚举
ON ROWS
子句中的成员即可:

SELECT [Measures].[#Activity]
       ON COLUMNS ,
       {
       [Organisation Dimension].[Txt Project Code].[KM_BNG],
       [Organisation Dimension].[Txt Project Code].[other name],
       [Organisation Dimension].[Txt Project Code].[third name]
       }
       ON ROWS
...

或者,如果您真的很想使用
WHERE
子句,那么只需将FrankPI创建的
SET
移动到
WHERE
子句中即可

WHERE
子句在概念上是一个轴,
MDX
的规则是,同一层次结构不能放在多个轴上,您需要将其从
行中移动,如下所示:

SELECT 
  [Measures].[#Activity] ON 0
FROM [Activity Cube]
WHERE 
  (
    [Activity Dimension].[Txt Activity Name].&[Download]
   ,[System Dimension].[Txt System Name].&[KShop]
   ,{
       [Organisation Dimension].[Txt Project Code].[KM_BNG],
       [Organisation Dimension].[Txt Project Code].[other name],
       [Organisation Dimension].[Txt Project Code].[third name]
    }
   ,[Time Dimension].[Fiscal Hierarchy].[Fiscal Half Year Name].&[2014-04-01T00:00:00]
  );
在极端情况下,如果您有50个要包含的层次结构成员
[Organization Dimension].[Txt Project code]
,那么在多维数据集脚本中对其进行管理可能会更好。您可以创建一组[myTxtProjectCodes],然后
MDX
会简单得多:

SELECT 
  [Measures].[#Activity] ON 0
FROM [Activity Cube]
WHERE 
  (
    [Activity Dimension].[Txt Activity Name].&[Download]
   ,[System Dimension].[Txt System Name].&[KShop]
   ,{
       [myTxtProjectCodes]
    }
   ,[Time Dimension].[Fiscal Hierarchy].[Fiscal Half Year Name].&[2014-04-01T00:00:00]
  );

但是如果超过50个呢?有没有办法像在sql的in子句中那样将它们写在一个列表中?@user3678795我不明白你的问题。我在回答中加入的是一个成员列表。感谢你的回答。我的qstn基本上是,在sql查询中,在WHERE projectCode in()的括号内,我们可以复制粘贴任意数量的项目代码,只要它们在单引号内并用逗号分隔。在极端情况下,我需要50个项目代码的数据,我得到了项目清单。来自另一个查询的代码,逗号/冒号使用FIND AND REPLACE将其分隔,然后粘贴。我想知道在MDX中是否有类似的方法。否则,对于50个项目代码,我会将代码粘贴到每个切片器的末尾,如[Organization Dimension]。[Txt project code]。xyzyou可以在多维数据集中创建一个集合。我将编辑我的答案。