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

MDX with many-to-many relationship and OR/AND filtering

我有一个多维数据集,其中包含产品(例如 T 恤)及其属性(例如颜色、尺码等)之间的多对多关系。

多对多维度的设计如下所述: 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. 颜色为红色。

换句话说,我想排除所有绿色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]
    }
  )
)

假设您在多对多中间度量组中的度量被称为[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 的产品。然后它进一步将该产品列表过滤为同样为红色的产品。然后它根据最终的产品列表过滤结果。