Създаване на изчислителна мярка въз основа на едно измерение и 2 релации в SSAS

Моля, разгледайте тази таблица с факти:

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)

Как мога да създам изчислителна мярка за това?

Благодаря


My DimReseller is:

ResellerCode            ResellerName
---------------------------------------
1                        Reseller1
2                        Reseller2
3                        Reseller3
4                        Reseller4

и има две отношения с Sender и Receiver


Редактиране 1)

Въз основа на отговора на Master @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 за сумата на получателя:

въведете описание на изображението тук

Знам, че има малък проблем, но не мога да го поправя!


person Arian    schedule 17.12.2019    source източник


Отговори (2)


Понякога в хранилище на данни дадено измерение е свързано с таблица с факти по повече от един начин, тези начини могат да бъдат създадени с помощта на директни или непреки връзки между Dim и Fact, следователно можем да използваме измерение, за да анализираме стойностите на фактите в различни роли; тези измерения се наричат ​​ролеви измерения. Когато проектирате куб, за всяка роля на измерението ще бъде добавен нов екземпляр на измерение към куба. Като се имат предвид тези обстоятелства, всяко измерение ще анализира куба и въпреки че можете да използвате множество измерения в отчет, но на ниво членове тези измерения се разграничават. Имайки предвид това, понякога чувстваме необходимостта да изберем член, който да бъде представител на всички роли на дадено измерение предвид ситуацията, това е моментът, когато функцията Link Member се намесва, за да ни помогне.

Тази функция приема два аргумента:

  • Членски израз: 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, която работи върху ролеви измерения. И така, [Изпращач] и [Получател] са имената на вашите измерения, които са прикачени към вашия куб, можете да намерите имената на тези в раздела Dimension Usage на вашия куб. Също така, [Йерархия] е името на вашия атрибут или стандартна йерархия, така че според екранната снимка на вашата конфигурация на измерение трябва да бъде [Име на измерение] + или [Йерархия]..[Код на дистрибутор].членове или [Код на дистрибутор]. членове или [Йерархия].членове в зависимост от това какво искате.

person Saeid Yousefi    schedule 18.12.2019
comment
Благодаря, г-н Саеид Юсефи. Ти си страхотен. Вие сте като @JohnSkeet в BI. Имам малък проблем и искам да ви помоля да видите Редактиране 1, моля. - person Arian; 19.12.2019

Примерен подход към вашата задача:

  1. В DSV - създайте две таблици (като заявки с имена в SQL) с Sender - Amount и Receiver - Amount колони. Така вие ефективно разделяте данните за продавачи и получатели.
  2. На Cube - създайте две групи от мерки с агрегиране на суми в колона "Сума" и свързани с DimReseller dim.
  3. Създайте Calc мярка като [Measures].[Receiver Amount] - [Measures].[Sender Amount]
person Ferdipux    schedule 17.12.2019
comment
@Arian, ако искаш, нека продължим в стаята за чат chat.stackoverflow.com/rooms/204468/seller-receiver -измерване - person Ferdipux; 18.12.2019