SSAS MDX YTD Только последнее значение - PullRequest
0 голосов
/ 14 февраля 2019

Не могли бы вы помочь:

таблица фактов a) Факты

Мера: еженедельный приток - это поле в базовой таблице базы данных [Меры]. [Еженедельный приток]

Я рассчитываю приток с начала года, используя следующие значения

Aggregate (PeriodsToDate ([Конец периода]. [Конец периода]. [Год], [Конец периода]. [Конец периода] .CurrentMember), [Показатели].[_Weekly Inflow])

Я хочу отобразить новую вычисленную меру, которая покажет мне одно значение YTD Inlow только для самой последней записи, где отображается фактический приток.Это не должно повторяться как промежуточное значение только для одного значения.Пожалуйста, см. Прилагаемый пример: Снимок экрана Как я могу добиться этого, используя рассчитанную меру?Не могли бы вы привести пример?

Размер даты: См. Снимок экрана

См. Снимок экрана 3 после добавления MDX.Значения с розовым фоном не должны отображаться.Те, у кого зеленый фон, должны быть представлены: Снимок экрана 3

Снимок экрана 4: Дополнительная мера

Снимок экрана 5: Снимок экрана 5

Снимок экрана 6

Спасибо

1 Ответ

0 голосов
/ 14 февраля 2019

Таким образом, вам нужно запустить BottomCount (1 строка) для ваших [Меры]. [_ Еженедельный приток], чтобы получить последний кортеж с ненулевым значением _Weekly Inflow, это будет вычисляемая мера. Далее в YTDмера добавить случай, который проверяет текущее значение пользовательской иерархии [Конец периода]. [Конец периода] к единственному значению вышеуказанной меры.У меня нет образца куба под рукой, но структура запроса будет такой, как показано ниже.

 with member Measures.[NewColumn]
as 
(bottomcount(
nonempty(
existing
{([Date].[Date].[Date].members)}
,[Measures].[_Weekly Inflow]),
1
).item(0).Name

member 
Measures.[YTD]
as 
case when [Period End].[Period End].currentmember.name=Measures.[NewColumn] then 
Aggregate ( PeriodsToDate ( [Period End].[Period End].[Year], [Period End].[Period End].CurrentMember ), [Measures].[_Weekly Inflow] )
else 
null end

Редактировать

with member Measures.[NewColumn]
    as 
    (bottomcount(
    filter(
    existing
    {([Date].[Date].[Date].members)}
    ,[Measures].[_Weekly Inflow]>0),
    1
    ).item(0).Name

    member 
    Measures.[YTD]
    as 
    case when [Period End].[Period End].currentmember.name=Measures.[NewColumn] then 
    Aggregate ( PeriodsToDate ( [Period End].[Period End].[Year], [Period End].[Period End].CurrentMember ), [Measures].[_Weekly Inflow] )
when 
[Period End].[Period End].currentmember.name=[Period End].[Period End].defaultmember then Aggregate ( PeriodsToDate ( [Period End].[Period End].[Year], [Period End].[Period End].CurrentMember ), [Measures].[_Weekly Inflow] )
    else 
    null end

Редактировать

    member 
    Measures.[YTD]
    as 
    case when [Period End].[Period End].currentmember.name=Measures.[NewColumn] then 
    Aggregate ( PeriodsToDate ( [Period End].[Period End].[Year], [Period End].[Period End].CurrentMember ), [Measures].[_Weekly Inflow] )
when 
[Period End].[Period End].currentmember.name="Feburary 2018" then Aggregate ( PeriodsToDate ( [Period End].[Period End].[Year], [Period End].[Period End].CurrentMember ), [Measures].[_Weekly Inflow] )
    else 
    null end
...