基于 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

SenderReceiver有两个关系


编辑 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 的接收金额:

我知道有一个小问题,但我无法解决!

您的任务的示例方法:

  1. 在 DSV 中 - 创建两个包含 Sender - AmountReceiver - Amount 列的表(作为 SQL 命名查询)。因此,您可以有效地拆分卖家和收货人数据。
  2. 在 Cube 上 - 创建两个度量值组,在 Amount 列上使用 Sum 聚合并链接到 DimReseller dim。
  3. 将 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 取决于你想要什么。