【问题标题】:MDX query Filter Function for multiple dimensions with "OR" condition具有“或”条件的多个维度的 MDX 查询过滤函数
【发布时间】:2015-02-09 12:00:45
【问题描述】:

我有一个 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];

在“产品类别名称”和“产品名称”之间应用“与”条件,因为两者之间有“*”。

谁能帮我把它变成“OR”条件,我看到了下面的链接,但不能让它工作。

MDX - Filter multiple dimensions

【问题讨论】:

  • 好的 - 我想我明白了 - 例如,您想要 Cat Name 为“Cameras and camcorders”,然后 Prod Name 可以是 anything 的数据。或者产品名称是''A。 Datum Advanced Digital Camera M300 Azure'' 和 Cat Name 是 anything 吗?因为它们是相同的维度,所以交叉连接 * 正在强制执行自动存在行为 - 这是预期的。不过会有办法的——我现在正在玩。

标签: for-loop filter mdx dimensions


【解决方案1】:

我不知道您的成员的确切姓名,因此您需要使用这些名称,但我怀疑您可以使用 Exists 函数来对抗 tuplesset,其维度与 cross 相同- 加入层次结构:

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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多