0

请考虑这个事实表:

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了收款人金额:

在此处输入图像描述

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

4

2 回答 2

2

您的任务的示例方法:

  1. Sender - Amount在 DSV 中 - 创建两个带有和Receiver - Amount列的表(作为 SQL 命名查询) 。因此,您可以有效地拆分卖家和接收者数据。
  2. On Cube - 在 Amount 列上创建两个具有 Sum 聚合的度量值组,并链接到 DimReseller dim。
  3. 将 Calc 度量创建为[Measures].[Receiver Amount] - [Measures].[Sender Amount]
于 2019-12-17T15:27:56.583 回答
1

有时在数据仓库中,维度与事实表的连接方式不止一种,这些方式可以通过 Dim 和 Fact 之间的直接或间接链接来创建,因此我们可以使用维度来分析不同角色的 Fact 值;这些维度称为角色扮演维度。在设计多维数据集时,对于维度的每个角色,都会在多维数据集中添加一个新的维度实例。鉴于这些情况,每个维度都将分析多维数据集,尽管您可以在报告中使用多个维度,但在成员级别这些维度是不同的。话虽如此,有时我们觉得有必要在特定情况下选择一个成员来代表一个维度的所有角色,这就是链接成员功能介入帮助我们的时候。

这个函数有两个参数:

  • 成员表达式:返回成员的 MDX 表达式。
  • 层次结构表达式:返回层次结构的 MDX 表达式。

此函数返回与指定层次结构中的指定成员等效的成员。

因此,您的代码应如下所示:

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]

请注意在角色扮演维度上工作的 LinkMember 功能。因此,[Sender] 和 [Receiver] 是附加到立方体的维度的名称,您可以在Dimension Usage立方体的选项卡中找到它们的名称。另外,[Hierarchy] 是您的属性或标准层次结构的名称,因此根据您的维度配置的屏幕截图,它应该是 [Dimension Name] + [Hierarchy].[Reseller Code].members 或 [Reseller Code]。 members 或 [Hierarchy].members 取决于你想要什么。

于 2019-12-18T21:41:07.677 回答