For loop MDX查询过滤函数,用于多个维度;或;条件

For loop MDX查询过滤函数,用于多个维度;或;条件,for-loop,filter,mdx,dimensions,For Loop,Filter,Mdx,Dimensions,我有一个mdx查询,如下所示,其中包含产品类别名称和产品名称维度的过滤条件。我需要产品类别和产品名称的匹配记录。 SELECT {[Measures].[Inventory On Order Quantity]} ON COLUMNS , Filter ( [Product].[Product Category Name].[Product Category Name].MEMBERS , [Product].[Product Cat

我有一个mdx查询,如下所示,其中包含产品类别名称和产品名称维度的过滤条件。我需要产品类别和产品名称的匹配记录。

SELECT 
  {[Measures].[Inventory On Order Quantity]} ON COLUMNS
 ,
    Filter
    (
      [Product].[Product Category Name].[Product Category Name].MEMBERS
     ,
        [Product].[Product Category Name].Member_value = 'Audio'
      OR 
        [Product].[Product Category Name].Member_value = 'Cameras and camcorders'
    )
  * 
    Filter
    (
      [Product].[Product Name].[Product Name].MEMBERS
     ,
            [Product].[Product Name].Member_value
          = 'A. Datum Advanced Digital Camera M300 Azure'
        OR 
            [Product].[Product Name].Member_value
          = 'A. Datum Advanced Digital Camera M300 Black'
      OR 
          [Product].[Product Name].Member_value
        = 'A. Datum Advanced Digital Camera M300 Grey'
    ) ON ROWS
FROM [Operation];
由于介于“产品类别名称”和“产品名称”之间的“*”,它在“产品类别名称”和“产品名称”之间应用“和”条件。

SELECT 
  {[Measures].[Inventory On Order Quantity]} ON COLUMNS
 ,
    Filter
    (
      [Product].[Product Category Name].[Product Category Name].MEMBERS
     ,
        [Product].[Product Category Name].Member_value = 'Audio'
      OR 
        [Product].[Product Category Name].Member_value = 'Cameras and camcorders'
    )
  * 
    Filter
    (
      [Product].[Product Name].[Product Name].MEMBERS
     ,
            [Product].[Product Name].Member_value
          = 'A. Datum Advanced Digital Camera M300 Azure'
        OR 
            [Product].[Product Name].Member_value
          = 'A. Datum Advanced Digital Camera M300 Black'
      OR 
          [Product].[Product Name].Member_value
        = 'A. Datum Advanced Digital Camera M300 Grey'
    ) ON ROWS
FROM [Operation];
谁能帮我使它“或”的条件,我看到了下面的链接,但无法使它工作


我不知道您的成员的确切姓名,因此您需要使用这些名称,但我怀疑您可以对
元组的
集合使用
Exists
函数,该集合的维度与交叉连接的层次结构相同:

SELECT 
  {[Measures].[Inventory On Order Quantity]} ON COLUMNS
 ,Exists
  (
    {
        [Product].[Product Category Name].[Product Category Name].MEMBERS
      * 
        [Product].[Product Name].[Product Name].MEMBERS
    }
   ,{
      (
        [Product].[Product Category Name].[Product Category Name].[Audio]
       ,[Product].[Product Name].[Product Name].[(All)]
      )
     ,(
        [Product].[Product Category Name].[Product Category Name].[Cameras and camcorders]
       ,[Product].[Product Name].[Product Name].[(All)]
      )
     ,(
        [Product].[Product Category Name].[Product Category Name].[(All)]
       ,[Product].[Product Name].[Product Name].[A. Datum Advanced Digital Camera M300 Azure]
      )
     ,(
        [Product].[Product Category Name].[Product Category Name].[(All)]
       ,[Product].[Product Name].[Product Name].[A. Datum Advanced Digital Camera M300 Black]
      )
     ,(
        [Product].[Product Category Name].[Product Category Name].[(All)]
       ,[Product].[Product Name].[Product Name].[A. Datum Advanced Digital Camera M300 Grey]
      )
    }
  ) ON 1
FROM [Operation]; 
以下是一个AdvWks脚本,可以让所有客户了解他们各自的性别和婚姻状况:

SELECT 
  {} ON 0
 ,
    [Customer].[Customer].[Customer]*
    [Customer].[Gender].[Gender]*
    [Customer].[Marital Status].[Marital Status] ON 1
FROM [Adventure Works];
然后,为了找到男性或已婚女性,我们会这样做:

SELECT 
  {} ON 0
 ,Exists
  (
      [Customer].[Customer].[Customer]*
      [Customer].[Gender].[Gender]*
      [Customer].[Marital Status].[Marital Status]
   ,{
      (
        [Customer].[Customer].[(All)]
       ,[Customer].[Gender].&[M]
       ,[Customer].[Marital Status].[(All)]
      )
     ,(
        [Customer].[Customer].[(All)]
       ,[Customer].[Gender].[(All)]
       ,[Customer].[Marital Status].&[M]
      )
    }
  ) ON 1
FROM [Adventure Works];

好的-我想我明白了-例如,您可能想要Cat名称为“Cameras and camcorders”的数据,然后产品名称可以是任何内容。或者产品名称是“A.Datum Advanced Digital Camera M300 Azure”,Cat名称是什么?因为它们是相同的维度,所以交叉连接
*
强制执行自动存在行为-这是意料之中的。不过会有办法的——我现在正在演戏。