不同维度之间的mdx并集
Mdx union between different dimensions
我遇到的情况是我在一个模型中有两个不同的维度。维度 A 具有 ColorId、FirstColor 和 SecondColor。维度 B 具有 ColorId 和 Firstcolor。我正在尝试从两个不同的维度获取完整的 colorId 列表。请记住这个mdx需要在ssrs中使用。
维度 A
ColorId FirstColor SecondColor
T0z17 Blue Green
T0lqa Red Yellow
维度 B
ColorId FirstColor
T201k Black
Tph1v Orange
预期输出(仅 1 列)
ColorId
T0z17
T0lqa
T201k
Tph1v
试试这个联合查询:
WITH MEMBER [Measures].[Color] as
IIf(
[Dimension A].[Color Id].CurrentMember
Is [Dimension A].[Color Id].[All]
, [Dimension B].[Color Id].CurrentMember.Name
, [Dimension A].[Color Id].CurrentMember.Name
)
SELECT [Measures].[Color] on 0,
{
[Dimension A].[Color Id].[Color Id].Members
* [Dimension B].[Color Id].[All]
}
+
{
[Dimension A].[Color Id].[All]
* [Dimension B].[Color Id].[Color Id].Members
}
On 1
FROM [YourCube]
由于 Greg 的回答不是很清楚,我将按以下方式修复他的代码:
With
Member [Measures].[SameColor] as
IIF(
[Dimension A].[Color Id].CurrentMember.Name = [Dimension B].[Color Id].CurrentMember.Name,
1,
NULL
)
Member [Measures].[OnlyAColor] as
IIF(
IsEmpty(
LinkMember(
[Dimension A].[Color Id].CurrentMember,
[Dimension B].[Color Id]
)
),
1,
NULL
)
Member [Measures].[OnlyBColor] as
IIF(
IsEmpty(
LinkMember(
[Dimension B].[Color Id].CurrentMember,
[Dimension A].[Color Id]
)
),
1,
NULL
)
Member [Measures].[Color] as
IIF(
[Dimension A].[Color Id].CurrentMember is [Dimension A].[Color Id].[All],
[Dimension B].[Color Id].CurrentMember.Name
[Dimension A].[Color Id].CurrentMember.Name
)
Select [Measures].[Color] on 0,
NonEmpty(
[Dimension A].[Color Id].[Color Id].Members * [Dimension B].[Color Id].[Color Id].Members,
[Measures].[SameColor]
)
+
NonEmpty(
[Dimension A].[Color Id].[Color Id].Members * [Dimension B].[Color Id].[All],
[Measures].[OnlyAColor]
)
+
NonEmpty(
[Dimension A].[Color Id].[All] * [Dimension B].[Color Id].[Color Id].Members,
[Measures].[OnlyBColor]
) on 1
From [YourCube]
我遇到的情况是我在一个模型中有两个不同的维度。维度 A 具有 ColorId、FirstColor 和 SecondColor。维度 B 具有 ColorId 和 Firstcolor。我正在尝试从两个不同的维度获取完整的 colorId 列表。请记住这个mdx需要在ssrs中使用。
维度 A
ColorId FirstColor SecondColor
T0z17 Blue Green
T0lqa Red Yellow
维度 B
ColorId FirstColor
T201k Black
Tph1v Orange
预期输出(仅 1 列)
ColorId
T0z17
T0lqa
T201k
Tph1v
试试这个联合查询:
WITH MEMBER [Measures].[Color] as
IIf(
[Dimension A].[Color Id].CurrentMember
Is [Dimension A].[Color Id].[All]
, [Dimension B].[Color Id].CurrentMember.Name
, [Dimension A].[Color Id].CurrentMember.Name
)
SELECT [Measures].[Color] on 0,
{
[Dimension A].[Color Id].[Color Id].Members
* [Dimension B].[Color Id].[All]
}
+
{
[Dimension A].[Color Id].[All]
* [Dimension B].[Color Id].[Color Id].Members
}
On 1
FROM [YourCube]
由于 Greg 的回答不是很清楚,我将按以下方式修复他的代码:
With
Member [Measures].[SameColor] as
IIF(
[Dimension A].[Color Id].CurrentMember.Name = [Dimension B].[Color Id].CurrentMember.Name,
1,
NULL
)
Member [Measures].[OnlyAColor] as
IIF(
IsEmpty(
LinkMember(
[Dimension A].[Color Id].CurrentMember,
[Dimension B].[Color Id]
)
),
1,
NULL
)
Member [Measures].[OnlyBColor] as
IIF(
IsEmpty(
LinkMember(
[Dimension B].[Color Id].CurrentMember,
[Dimension A].[Color Id]
)
),
1,
NULL
)
Member [Measures].[Color] as
IIF(
[Dimension A].[Color Id].CurrentMember is [Dimension A].[Color Id].[All],
[Dimension B].[Color Id].CurrentMember.Name
[Dimension A].[Color Id].CurrentMember.Name
)
Select [Measures].[Color] on 0,
NonEmpty(
[Dimension A].[Color Id].[Color Id].Members * [Dimension B].[Color Id].[Color Id].Members,
[Measures].[SameColor]
)
+
NonEmpty(
[Dimension A].[Color Id].[Color Id].Members * [Dimension B].[Color Id].[All],
[Measures].[OnlyAColor]
)
+
NonEmpty(
[Dimension A].[Color Id].[All] * [Dimension B].[Color Id].[Color Id].Members,
[Measures].[OnlyBColor]
) on 1
From [YourCube]