具有多对多关系和 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 恤的数量:
- 尺寸为M或L,
- 颜色为红色。
换句话说,我想排除所有绿色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 的产品。然后它进一步将该产品列表过滤为同样为红色的产品。然后它根据最终的产品列表过滤结果。
我有一个多维数据集,其中包含产品(例如 T 恤)及其属性(例如颜色、尺码等)之间的多对多关系。
多对多维度的设计如下所述: https://docs.microsoft.com/en-us/sql/analysis-services/lesson-5-3-defining-a-many-to-many-relationship
现在,我想编写包含一些 AND/OR 过滤的 MDX 查询。 基本上我需要获得满足这两个要求的所有 T 恤的数量:
- 尺寸为M或L,
- 颜色为红色。
换句话说,我想排除所有绿色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 的产品。然后它进一步将该产品列表过滤为同样为红色的产品。然后它根据最终的产品列表过滤结果。