SSAS MDX в предыдущем году - проблема агрегирования стран - PullRequest
0 голосов
/ 06 марта 2020

мой предыдущий вопрос для SSAS MDX в предыдущем году - фильтр игнорирования был решен. Теперь у меня есть другая проблема. Теперь я получаю правильный результат предыдущего года для магазина, но агрегация на уровне страны неверна.

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

Магазин | Актуальный оборот | Оборот PrevYear

Гамбург | 100,00 | 120,00

Мюнхен | 140,00 | 130,00

Кельн | 90,00 | 110,00

Берлин | 150,00 | null

Я попытался выполнить этот запрос из MoazRub:

with 
member [Measures].[Turnover PrevYear] as 
IIF( IsEmpty([Measures].[Turnover Actual] ), 
    NULL,   
    SUM(      
       ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       ) 
    )
Select  
non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
on Columns,
non empty{[Store].[Store].[Store].members}
on Rows
from [Sales Cube]
where (
[Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
[Store Status].[Store Status Type].&[Comparable], 
[Store].[Country].[Country].&[GERMANY]
)

Я получил правильный результат на уровне магазина:

Store | Актуальный оборот | Оборот PrevYear

Гамбург | 100,00 | 120,00

Мюнхен | 140,00 | 130,00

Кельн | 90,00 | 110,00

Берлин | 150,00 | 120,00

На уровне страны я получаю неправильную сумму, потому что теперь в магазине включен другой магазин "Бремен", который "несопоставим" в январе 2020 года.

ВСЕГО должно быть (без Бремена, который является "Несопоставимым": 460,00

ИТОГО "является ситуацией": 580,00 (включая Бремен)

Запрос на уровне страны:

with 
member [Measures].[Turnover PrevYear] as 
IIF( IsEmpty([Measures].[Turnover Actual] ), 
    NULL,   
    SUM(      
       ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       ) 
    )
Select  
non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
on Columns,
non empty{[Store].[Country].[Country].&[GERMANY]}
on Rows
from [Sales Cube]
where (
[Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
[Store Status].[Store Status Type].&[Comparable]
)

Как я могу суммировать на уровне страны только сопоставимые магазины?

1 Ответ

0 голосов
/ 06 марта 2020

Насколько я понимаю, берлинский январь 2019 года - это особый случай. Вы просто хотите игнорировать фильтр «[Store Status]. [Store Status Type]. & [Comparable]» для него один раз. Для всего остального вы хотите, чтобы фильтр работал? Если это так, используйте запрос ниже. Но убедитесь, что вы подставили правильное значение

[Дата]. [Год - Квартал - Месяц - Дата] .CurrentMember = "Январь 2020" Вместо "Январь 2020" используйте заголовок [ Дата]. [Год - Квартал - Месяц - Дата]. [Месяц]. & [2020] & [1]

with 
member [Measures].[Turnover PrevYear] as 
IIF( IsEmpty([Measures].[Turnover Actual] ), 
    NULL,   
    case when [Store].[Store].currentmember= "Berlin" and [Date].[Year - Quarter - Month - Date].CurrentMember="January 2020"
    then 
    SUM(      
       ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       ) 
     else 
     SUM(      
       ( ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
       ,   [Measures].[Turnover Actual]
       )
       end 
    )
Select  
non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
on Columns,
non empty{[Store].[Store].[Store].members}
on Rows
from [Sales Cube]
where (
[Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
[Store Status].[Store Status Type].&[Comparable], 
[Store].[Country].[Country].&[GERMANY]
)

на основе предоставленного Excel, насколько я понимаю, он суммирует все магазины, даже те, которые не находятся в Германии. Исходя из этого понимания, вам нужно использовать ключевое слово «Существующий», чтобы вызвать оценку этого выражения в контексте. Попробуйте запрос ниже

 with 
    member [Measures].[Turnover PrevYear] as 
    IIF( IsEmpty([Measures].[Turnover Actual] ), 
        NULL,   
        SUM( existing     
           ([Store Status].[Store Status Type].defaultmember, ParallelPeriod( [Date].[Year - Quarter - Month - Date].[Year],1,[Date].[Year - Quarter - Month - Date].CurrentMember))
           ,   [Measures].[Turnover Actual]
           ) 
        )
    Select  
    non empty{[Measures].[Turnover Actual],[Measures].[Turnover PrevYear]} 
    on Columns,
    non empty{[Store].[Country].[Country].&[GERMANY]}
    on Rows
    from [Sales Cube]
    where (
    [Date].[Year - Quarter - Month - Date].[Month].&[2020]&[1], 
    [Store Status].[Store Status Type].&[Comparable]
    )
...