Reporting services 不同维度之间的Mdx并集
在一个模型中有两个不同的维度。维度A有ColorId、FirstColor和SecondColor。维度B具有ColorId和Firstcolor。我试图从两个维度得到一个完全不同的colorid列表。请记住,此mdx需要在SSR中使用 维度AReporting services 不同维度之间的Mdx并集,reporting-services,ssas,union,mdx,ssas-tabular,Reporting Services,Ssas,Union,Mdx,Ssas Tabular,在一个模型中有两个不同的维度。维度A有ColorId、FirstColor和SecondColor。维度B具有ColorId和Firstcolor。我试图从两个维度得到一个完全不同的colorid列表。请记住,此mdx需要在SSR中使用 维度A ColorId FirstColor SecondColor T0z17 Blue Green T0lqa Red Yellow 维度B ColorId First
ColorId FirstColor SecondColor
T0z17 Blue Green
T0lqa Red Yellow
维度B
ColorId FirstColor
T201k Black
Tph1v Orange
预期输出(仅1列)
尝试此联合查询:
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]
对于SSA来说,这是一项非常不寻常的任务。OLAP背后的思想是只提供具有不同值的维度。这是可能的,但最简单的方法是使用SQL查询从DWH获取结果。要清楚,您希望维度A和维度B中显示相同的颜色?@greggalloway不,它不一定必须具有相同的颜色。只有列名和数据类型。颜色ID的格式与well@DanyloKorostil在ssrs中有没有这样做的方法?我不想仅仅为此添加一个单独的维度。我不能使用sql查询,因为对于我们的需求,我们只能使用表格模型。我不是ssrs专家,但很可能您必须创建两个数据集(a、B维度值),并将Lookup()函数作为连接替代方案重用。然后得到不同的值。很好,但它会产生重复的值,而不是不同的值。我重用了Greg的代码并添加了一个不同的概念。@Danylo-the
+
操作符在执行union@whytheq有趣的我不知道。不幸的是,它无法跨维度进行重复数据消除。幸运的是,Mutai澄清了重复数据消除是不必要的。@为什么EQ{[Dimension A].[Color Id].[Black]*[Dimension B].[Color Id].[All]}+{[Dimension A].[Color Id].[Color Id].[Black].[All]*[Dimension B].[Color Id].[Black]}将返回两个黑色成员。如果Dim A和Dim B对颜色使用了不同的键值,则A中的键值为红色,而B中的键值为102(完全可能)那么,LinkMember
就不起作用了是的,你说得对。在这种情况下,可以使用名称重用strtomber()函数。我们不知道,我只是想强调一下不同的逻辑。(升级)我真的很喜欢用于重复数据消除的非空(..,[Measures].[SameColor])
技巧。
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]