请考虑以下事实表:
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
作为收款人金额:
我知道有一个小问题,但我无法解决!
答案 0 :(得分:2)
完成任务的示例方法:
string wheretosave =""
DB exBox = create "Get Path"
DBE stringInn = field(exBox, "ADD Path where to save:", "", 80)
void doGet(DB exBox) {
wheretosave = get stringInn
print wheretosave "\n"
system("cmd.exe /C cd /d wheretosave & dir & PAUSE")
} // doGet
apply(exBox, "Get", doGet)
show exBox
和Sender - Amount
列创建两个表(作为SQL命名查询)。因此,您可以有效地分割卖方和接收者数据。 Receiver - Amount
答案 1 :(得分:1)
有时在数据仓库中,维度以多种方式连接到事实表,可以使用Dim和Fact之间的直接或间接链接来创建这些方式,因此我们可以使用维度来分析不同角色中的Fact值;这些维度称为角色扮演维度。 设计多维数据集时,对于维度的每个角色,都会将新的维度实例添加到多维数据集。 在这些情况下,每个维度都将分析多维数据集,尽管您可以在报表中使用多个维度,但是在成员级别可以区分这些维度。如此说来,有时我们觉得有必要在这种情况下选择一个成员来代表维度的所有角色,这是当Link Member函数跳转以帮助我们时。
此函数有两个参数:
此函数返回与指定层次结构中的指定成员等效的成员。
因此,您的代码应类似于以下内容:
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]。成员或[Hierarchy] .members取决于您想要的内容。