Создать меру расчета на основе одного измерения и двух отношений в 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)

На основе ответа мастера @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, поэтому мы можем использовать измерение для анализа значений 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 вашего куба. Кроме того, [Иерархия] — это имя вашего атрибута или стандартной иерархии, поэтому, согласно снимку экрана конфигурации вашего измерения, это должно быть [Имя измерения] + либо [Иерархия].[Код торгового посредника].members, либо [Код торгового посредника]. членов или [Hierarchy].members в зависимости от того, что вы хотите.

person Saeid Yousefi    schedule 18.12.2019
comment
Спасибо, мистер Саид Юсефи. Ты замечательный. Ты как @JohnSkeet в BI. У меня небольшая проблема, и я хотел бы попросить вас посмотреть Редактировать 1, пожалуйста. - person Arian; 19.12.2019

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

  1. В DSV — создайте две таблицы (как именованные запросы SQL) со столбцами Sender - Amount и Receiver - Amount. Таким образом, вы эффективно разделяете данные продавцов и получателей.
  2. В кубе — создайте две группы мер с суммированием суммы в столбце суммы и привязкой к 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