具有多对多关系和OR / AND过滤的MDX

时间:2017-04-28 12:00:14

标签: sql-server ssas mdx

我有一个立方体,其中包含产品(比如T-Shirts)与其属性(例如颜色,大小等)之间的多对多关系。

多对多维度的设计与此处描述的一样: https://docs.microsoft.com/en-us/sql/analysis-services/lesson-5-3-defining-a-many-to-many-relationship

现在,我想编写包含一些AND / OR过滤的MDX查询。 基本上我需要得到满足两种要求的所有T恤的数量:

  1. 尺寸为M或L,
  2. 颜色为红色。
  3. 换句话说,我想删除所有绿色M尺寸,红色S尺寸等。

    在检查属性时应使用“AND”逻辑,在检查每个属性的值时使用“OR”逻辑。

    我创建了如下内容,但它似乎无法正常工作:

    SELECT {
      [Geography].[City]
    } ON ROWS,
    {
      [Measures].[Quantity]
    } ON COLUMNS
    FROM [My cube]
    WHERE (
      (
        [Attributes].[Attribute].&[Size] * 
        {
            [Attributes].[AttributeValues].&[M]
            , [Attributes].[AttributeValues].&[L]
        }
      ),
      (
        [Attributes].[Attribute].&[Color] * 
        {
            [Attributes].[AttributeValues].&[Red]
        }
      )
    )
    

1 个答案:

答案 0 :(得分:1)

假设您的多对多中间度量值组中的度量被称为[Measures].[Product Attribute Count],请查看以下内容是否有效:

SELECT {
  [Geography].[City]
} ON ROWS,
{
  [Measures].[Quantity]
} ON COLUMNS
FROM (
 SELECT
 NonEmpty(
  NonEmpty(
   [Product].[Product].[Product].Members,
   {([Measures].[Product Attribute Count],[Attributes].[Attribute].&[Size])}
   * {
         [Attributes].[AttributeValues].&[M]
         , [Attributes].[AttributeValues].&[L]
     }
   ),
   ([Measures].[Product Attribute Count], [Attributes].[Attribute].&[Color][Attributes].[AttributeValues].&[Red])
  ) on 0
  FROM [My cube]
)

基本上它找到了M或L的产品。然后它进一步将产品列表过滤到只有红色的产品。然后它按最终产品列表过滤结果。