Многомерные выражения: сделать значение измерения равным 0 на основе флага

Был бы очень признателен за любую помощь в этом.

У меня есть мера под названием «Продажи», заполненная значениями, однако я пытаюсь установить значение «Продажи» на 0, когда «Флаг продаж» установлен на 0.

Важное примечание. Флаг продаж основан на дате (самый низкий уровень детализации).

введите здесь описание изображения

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

Как объяснялось выше, я хотел бы сделать значение «Продажи» равным 0 всякий раз, когда у нас есть 0 в «Флаге продаж» (который основан на дате), но когда я запускаю сценарий MDX, я бы не хотел в ROWS чтобы НЕ отображать дату, а только неделю (более высокий уровень до даты), как показано ниже:

введите здесь описание изображения

Я действительно потратил часы на это и, кажется, не могу понять, как мы можем создать эту необходимую пользовательскую меру продаж на основе флага продаж на уровне даты, но иметь результат MDX, отображающий ROWS на уровне недели.

Лаз


person GonnerDev    schedule 29.05.2018    source источник


Ответы (2)


Перед выбором необходимо определить элемент в многомерном выражении. Что-то подобное:

WITH MEMBER [Measures].[Fixed Sales] as IIF([Sales Flag].currentMember=1,[Sales], 0)

SELECT [Measures].[Fixed Sales] on 0, [Sales Flag] on 1 from [Cube]

Я пишу здесь код без SSAS, так что это может быть не на 100% правильный синтаксис, но вы можете получить общее представление;)

Вы можете добавить iif в часть SELECT, но я считаю, что создание члена будет более чистым решением.

SELECT IIF([Sales Flag].currentMember=1,[Sales], 0) on 0, [Sales Flag] on 1 from [Cube]

Если у вас есть контроль над кубом в службах SSAS, вы можете создать там вычисляемый элемент, и вам будет проще получить к нему доступ.

person Veselin Davidov    schedule 30.05.2018
comment
Спасибо за ответ! Я обязательно рассмотрю ваш ответ и вернусь к вам с обновлением :) - person GonnerDev; 30.05.2018
comment
В настоящее время у меня нет SSAS на этом ПК для проверки запроса, но вы поняли;) Если вам часто нужна эта метрика, я бы перенес логику в CUBE и оставил запросы mdx простыми. - person Veselin Davidov; 30.05.2018
comment
Извините, Веселин, но я не думаю, что это сработает, потому что флаг продаж на уровне недели будет агрегирован как СУММА, и мы никогда не увидим 0 (или 1), если только все участники (один участник) не имеют этот флаг как 0 (как 1). - person Alex Peshik; 30.05.2018
comment
Если вы сделаете это в кубе, то это сработает. Если вы агрегируете на уровне недели для многомерных выражений, а вычисляемый элемент относится к дню (или даже к ключу измерения), тогда значение будет правильным. - person Veselin Davidov; 30.05.2018
comment
Что вы подразумеваете под агрегатом на дневном уровне? Я вижу здесь только вариант SCOPE. Потому что, если флаг продаж не на оси, эта часть не будет работать: [Sales Flag].currentMember. - person Alex Peshik; 30.05.2018

Рад слышать, работает ли ответ Веселина на вас, но если нет...

Возможны также несколько подходов.

  1. Используйте Measure expression для показателя продаж:

Выражение меры

  1. Используйте команду SCOPE для уровня «День» (если это ключевой уровень измерения «Дата»). Если это не ключевой уровень, вы должны агрегировать на КАЖДОМ уровне (неделя, год и т. д.), чтобы эмулировать показатель AggregateFunction of Sales, но с обновленным поведением для одного флага:

    SCOPE([Дата].[Ваша иерархия дат].[День].members,[Показатели].[Продажи]); THIS=IIF([Флаг продаж].CurrentMember = 1,[Показатели].[Продажи],0); КОНЕЦ ОБЛАСТИ;

  2. Обновите логику в DSV, чтобы умножить столбец Sales на SalesFlag. Это самый простой способ с точки зрения T-SQL.

person Alex Peshik    schedule 30.05.2018