基于 SSAS 中的一维和 2 关系创建计算度量
Create Calculate Measure Based On One Dimension And 2 Relations In SSAS
请考虑这个事实 Table:
Sender Receiver Amount
----------------------------------------
Reseller1 Resseler2 100
Reseller1 Resseler3 200
Reseller3 Resseler1 150
Reseller3 Resseler2 50
Reseller1 Resseler4 100
Reseller4 Resseler2 350
Reseller4 Resseler1 500
Reseller4 Resseler3 250
我想根据这个公式创建一个计算度量:Sum(Receiver)-Sum(Sender)
并创建这样的结果:
Reseller Amount
---------------------------
Reseller1 250 <---- (500 + 150) - (100 + 200 + 100)
Reseller2 500 <---- (100 + 50 + 350) - (0)
Reseller3 250 <---- (200 + 250) - (150 + 50)
Reseller4 -1000 <---- (100) - (350 + 500 + 250)
如何为此创建计算度量?
谢谢
我的DimReseller
是:
ResellerCode ResellerName
---------------------------------------
1 Reseller1
2 Reseller2
3 Reseller3
4 Reseller4
与Sender
和Receiver
有两个关系
编辑 1)
根据大师@Saeid Yousefi 的回答:
我的结构是:
我写了这个MDX
查询:
WITH
MEMBER SenderAmount AS
[Measures].[Amount], FORMAT_STRING = "Standard"
MEMBER ReceiverAmount AS
(LinkMember
([Sender].[Hierarchy].CurrentMember, [Receiver].[Hierarchy])
,[Measures].[Amount]), FORMAT_STRING = "Standard"
MEMBER DiffAmount AS
ReceiverAmount - SenderAmount, FORMAT_STRING = "Standard"
SELECT {SenderAmount, ReceiverAmount, DiffAmount} ON 0,
[Sender].[Hierarchy].MEMBERS ON 1
FROM [Reseller Sales]
但我收到了 null
的接收金额:
我知道有一个小问题,但我无法解决!
您的任务的示例方法:
- 在 DSV 中 - 创建两个包含
Sender - Amount
和 Receiver - Amount
列的表(作为 SQL 命名查询)。因此,您可以有效地拆分卖家和收货人数据。
- 在 Cube 上 - 创建两个度量值组,在 Amount 列上使用 Sum 聚合并链接到 DimReseller dim。
- 将 Calc 度量创建为
[Measures].[Receiver Amount] - [Measures].[Sender Amount]
有时在数据仓库中,维度以不止一种方式连接到事实 table,这些方式可以使用 Dim 和 Fact 之间的直接或间接链接创建,因此我们可以使用维度来分析不同角色的事实价值;这些维度称为角色扮演维度。
在设计立方体时,对于维度的每一个角色,都会在立方体中添加一个新的维度实例。
鉴于这些情况,每个维度都将分析多维数据集,尽管您可以在报告中使用多个维度,但在成员级别中,这些维度是有区别的。综上所述,有时我们觉得需要 select 一个成员来代表一个维度的所有角色,这就是 Link 成员函数跳进来帮助我们的时候。
这个函数有两个参数:
- 成员表达式:returns 成员的 MDX 表达式。
- 层次结构表达式:returns 层次结构的 MDX 表达式。
此函数returns成员相当于指定层次结构中的指定成员。
因此,您的代码应如下所示:
WITH
MEMBER SenderAmount AS
[Measures].[Amount], FORMAT_STRING = "Standard"
MEMBER ReceiverAmount AS
(LinkMember
([Sender].[Hierarchy].CurrentMember, [Receiver].[Hierarchy])
,[Measures].[Amount]
,[Sender].[Hierarchy].[All]), FORMAT_STRING = "Standard"
MEMBER DiffAmount AS
ReceiverAmount - SenderAmount, FORMAT_STRING = "Standard"
SELECT {SenderAmount, ReceiverAmount, DiffAmount} ON 0,
NON EMPTY [Sender].[Hierarchy].MEMBERS ON 1
FROM [Cube]
请关注Link成员函数,正在做角色扮演维度。因此,[Sender] 和 [Receiver] 是附加到多维数据集的维度的名称,您可以在多维数据集的 Dimension Usage
选项卡中找到它们的名称。此外,[Hierarchy] 是您的属性或标准层次结构的名称,因此根据您的维度配置的屏幕截图,它应该是 [Dimension Name] + [Hierarchy].[Reseller Code].members 或 [Reseller Code]。成员或 [Hierarchy].members 取决于你想要什么。
请考虑这个事实 Table:
Sender Receiver Amount
----------------------------------------
Reseller1 Resseler2 100
Reseller1 Resseler3 200
Reseller3 Resseler1 150
Reseller3 Resseler2 50
Reseller1 Resseler4 100
Reseller4 Resseler2 350
Reseller4 Resseler1 500
Reseller4 Resseler3 250
我想根据这个公式创建一个计算度量:Sum(Receiver)-Sum(Sender)
并创建这样的结果:
Reseller Amount
---------------------------
Reseller1 250 <---- (500 + 150) - (100 + 200 + 100)
Reseller2 500 <---- (100 + 50 + 350) - (0)
Reseller3 250 <---- (200 + 250) - (150 + 50)
Reseller4 -1000 <---- (100) - (350 + 500 + 250)
如何为此创建计算度量?
谢谢
我的DimReseller
是:
ResellerCode ResellerName
---------------------------------------
1 Reseller1
2 Reseller2
3 Reseller3
4 Reseller4
与Sender
和Receiver
有两个关系
编辑 1)
根据大师@Saeid Yousefi 的回答:
我的结构是:
我写了这个MDX
查询:
WITH
MEMBER SenderAmount AS
[Measures].[Amount], FORMAT_STRING = "Standard"
MEMBER ReceiverAmount AS
(LinkMember
([Sender].[Hierarchy].CurrentMember, [Receiver].[Hierarchy])
,[Measures].[Amount]), FORMAT_STRING = "Standard"
MEMBER DiffAmount AS
ReceiverAmount - SenderAmount, FORMAT_STRING = "Standard"
SELECT {SenderAmount, ReceiverAmount, DiffAmount} ON 0,
[Sender].[Hierarchy].MEMBERS ON 1
FROM [Reseller Sales]
但我收到了 null
的接收金额:
我知道有一个小问题,但我无法解决!
您的任务的示例方法:
- 在 DSV 中 - 创建两个包含
Sender - Amount
和Receiver - Amount
列的表(作为 SQL 命名查询)。因此,您可以有效地拆分卖家和收货人数据。 - 在 Cube 上 - 创建两个度量值组,在 Amount 列上使用 Sum 聚合并链接到 DimReseller dim。
- 将 Calc 度量创建为
[Measures].[Receiver Amount] - [Measures].[Sender Amount]
有时在数据仓库中,维度以不止一种方式连接到事实 table,这些方式可以使用 Dim 和 Fact 之间的直接或间接链接创建,因此我们可以使用维度来分析不同角色的事实价值;这些维度称为角色扮演维度。 在设计立方体时,对于维度的每一个角色,都会在立方体中添加一个新的维度实例。 鉴于这些情况,每个维度都将分析多维数据集,尽管您可以在报告中使用多个维度,但在成员级别中,这些维度是有区别的。综上所述,有时我们觉得需要 select 一个成员来代表一个维度的所有角色,这就是 Link 成员函数跳进来帮助我们的时候。
这个函数有两个参数:
- 成员表达式:returns 成员的 MDX 表达式。
- 层次结构表达式:returns 层次结构的 MDX 表达式。
此函数returns成员相当于指定层次结构中的指定成员。
因此,您的代码应如下所示:
WITH
MEMBER SenderAmount AS
[Measures].[Amount], FORMAT_STRING = "Standard"
MEMBER ReceiverAmount AS
(LinkMember
([Sender].[Hierarchy].CurrentMember, [Receiver].[Hierarchy])
,[Measures].[Amount]
,[Sender].[Hierarchy].[All]), FORMAT_STRING = "Standard"
MEMBER DiffAmount AS
ReceiverAmount - SenderAmount, FORMAT_STRING = "Standard"
SELECT {SenderAmount, ReceiverAmount, DiffAmount} ON 0,
NON EMPTY [Sender].[Hierarchy].MEMBERS ON 1
FROM [Cube]
请关注Link成员函数,正在做角色扮演维度。因此,[Sender] 和 [Receiver] 是附加到多维数据集的维度的名称,您可以在多维数据集的 Dimension Usage
选项卡中找到它们的名称。此外,[Hierarchy] 是您的属性或标准层次结构的名称,因此根据您的维度配置的屏幕截图,它应该是 [Dimension Name] + [Hierarchy].[Reseller Code].members 或 [Reseller Code]。成员或 [Hierarchy].members 取决于你想要什么。