Расчет на основе не основного атрибута измерения - PullRequest
0 голосов
/ 23 октября 2019

Расчет основан не на первичном атрибуте измерения

У меня есть измерение с двумя атрибутами и таблица фактов. Измерение связано с таблицей фактов основным атрибутом. Атрибуты имеют одинаковую природу, т.е. список возможных значений одинаков. Фактически, это связанные коды.

Теперь я могу получить из куба следующий результат, разделенный на оба атрибута:

Dim.Item    Dim.LinkedItem  Facts.Amount

Item1       Item3           10

Item2       Item3           20

Item3       Item2           50

Или вот так, если я использую второй атрибут:

Dim.LinkedItem  Facts.Amount

Item2           50

Item3           30

Мне нужен расчет, который позволит мне получить следующий результат:

Dim.Item    Dim.LinkedItem  LinkedAmount

Item1       Item3           0

Item2       Item3           50

Item3       Item2           30

Другими словами, для каждого значения основного атрибута я должен получить сумму из таблицы фактов,где это значение выступает в качестве второго атрибута.

Пожалуйста, помогите написать формулу MDX для этого расчета.

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

MoazRub,

Большое спасибо за ваш ответ! Но я все еще не получил правильный результат. Чтобы прояснить мой случай, я буду использовать запросы с реальными примерами.

(1) Этот запрос возвращает NULL, и это правильно:

select Time.Year.[Calendar 2018] on 0,
[Item].[Item Code].F268955709 on 1
from [SEL DEMO] where (Measures.[SellIn - Qty])

(2) Это возвращает правильное значение для связанного элемента:

select Time.Year.[Calendar 2018] on 0,
[Item].[Linked Item].F268955709 on 1
from [SEL DEMO] where (Measures.[SellIn - Qty])

(3) Я пытаюсь использовать ваш совет, но получаю значение для всех элементов:

with member Measures.[SellIn LI] as 
StrToValue('( Measures.[SellIn - Qty], [Item].[Item Code].DefaultMember, [' + [Item].[Linked Item].CurrentMember.Name + '])')
select crossjoin ([Item].[Item Code].F268955709,
                  Measures.[SellIn LI]) on 0
                  from [SEL DEMO] where (Time.Year.[Calendar 2018])

Я пытался использовать строку StrToValue ('(Измеряет. [SellIn - Кол-во], [Item]. [Item Item] .DefaultMember, ['+ [Item]. [Linked Item] .CurrentMember.Name +']) ') как выражение для вычисления в кубе SSAS и получения значениядля всех элементов тоже.

Я заменил код на тот же, но без StrToValue и получил то же значение ...

with member Measures.[SellIn LI] as 
'([Item].[Item Code].DefaultMember, [Item].[Linked Item].CurrentMember, Measures.[SellIn - Qty])'
select crossjoin ([Item].[Item Code].F268955709,
                  Measures.[SellIn LI]) on 0
                  from [SEL DEMO] where (Time.Year.[Calendar 2018])

Может быть, есть другие идеи? Я очень ценю вашу помощь.

0 голосов
/ 23 октября 2019

Вам необходимо использовать «strtoval», «currentmember» и «defaultmember». Ваше определение Меры будет следующим:

with member 
measures.t 
as 
strtoval('(Dim.Item.defaultmember,[Product].[Category].['+Dim.LinkedItem.currentmember.name+'],Facts.Amount)')
...