我有一个立方体,其中包含产品(比如T-Shirts)与其属性(例如颜色,大小等)之间的多对多关系。
多对多维度的设计与此处描述的一样: https://docs.microsoft.com/en-us/sql/analysis-services/lesson-5-3-defining-a-many-to-many-relationship
现在,我想编写包含一些AND / OR过滤的MDX查询。 基本上我需要得到满足两种要求的所有T恤的数量:
换句话说,我想删除所有绿色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]
}
)
)
答案 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的产品。然后它进一步将产品列表过滤到只有红色的产品。然后它按最终产品列表过滤结果。