Статус MDX Iif

Я пытаюсь получить расчетную меру при оценке Pentaho Analyser.

Замечание: нужна мера с условием. Мой код:

IIf ([Product].CurrentMember Is [Product].[Food], [Unit Sales], 0)

Итак, я получаю:

Напитки 0

Еда 14

Остальное 0

End it работает только пока параметр [Product] присутствует в строках или столбцах.

Но когда я вставляю другой слайсер и удаляю [Продукт] (например, [Партнер]), я получаю:

ИБМ 0

MS 0

Яблоко 0

Вместо:

IBM 7

MS 2

яблоко 5

Я знаю, что основная проблема заключается в свойстве CurrentMember, и оно всегда равно нулю, потому что в данном измерении есть CurrentMember. Пожалуйста, не отвечайте: «Отфильтруйте это по «Еде»», потому что я пытаюсь создать что-то более сложное, и это первый шаг.

Есть ли какой-нибудь трюк, чтобы заставить эту меру работать?

РЕДАКТИРОВАТЬ: У меня есть 3 измерения: продукт, партнер, страна. Мне нужно получить расчетную меру по формуле mdx: [Продажи в шт.], когда это [Продукт].[Еда] и [Продукт].[Напиток ] и это НЕ [Страна].[США] и [Страна].[Германия], а все остальное.

Спасибо, С наилучшими пожеланиями


person fenix    schedule 03.02.2014    source источник
comment
Технически это должно быть, когда (Продукт – это еда или напиток) и (Страна – не США ** или Германия)?   -  person FrankPl    schedule 10.02.2014
comment
Да.. Есть ли решение?   -  person fenix    schedule 10.02.2014
comment
Я обновил свой ответ соответствующим образом.   -  person FrankPl    schedule 10.02.2014


Ответы (1)


Я не специалист по Pentaho/Mondrian, но я предполагаю, что проблема в том, что во втором сценарии [Product].CurrentMember является членом всех продуктов, а не членом Food, и, таким образом, система ведет себя так, как вы сказали, и возвращает 0.

Насколько я понимаю ваш вопрос, что-то вроде

IIf(
    Count(
        Intersect(
            { [Product].CurrentMember },
            { [Product].[Food], [Product].[Drink], [Product].[All] }
        )
    ) = 1
    AND
    Count(
        Intersect(
            { [Country].CurrentMember },
            { [Country].[US], [Country].[DE], [Country].[All] }
        )
    ) = 0
    [Unit Sales],
    0
   )

должен доставить то, что вы хотите. Хитрость здесь в том, что пересечение между набором из одного элемента, содержащим CurrentMember, и другим набором может иметь либо один элемент — в случае, если CurrentMember содержится в наборе, — либо ноль элементов — в случае, если элемент не содержится в наборе. .

person FrankPl    schedule 04.02.2014
comment
На самом деле, я не знаю, как это работает «за дверью», как вы сказали, это «[Product].CurrentMember — это все элементы продуктов», но у меня это не работает. Не могли бы вы предоставить мне другое решение? Спасибо за помощь! - person fenix; 06.02.2014
comment
@StevanPopov Не могли бы вы уточнить, что имеется в виду под этим, у меня не работает? Вы получаете сообщение об ошибке при использовании приведенного выше выражения? Ошибки нет, но результат отличается от ожидаемого? Если да, то чего именно вы ожидаете и чем результат отличается от этого? - person FrankPl; 06.02.2014
comment
Извините, Фрэнк, я действительно не объяснил свой комментарий. Он возвращает те же результаты, что и моя рассматриваемая формула - нули. Моя цель — переопределить формулу SQL для значения в ETL, чтобы получить большую масштабируемость. Мой полный вопрос заключается в том, как преобразовать это: SELECT... ... CASE WHEN valueOfDim1 IN (....) AND valueOfDim2 NOT IN (...) THEN sum(myValue) ELSE 0 END... ... Если мне нужно задать другой вопрос, пожалуйста, скажите мне! - person fenix; 06.02.2014
comment
@FrankPI, пожалуйста, проверьте эту ссылку: stackoverflow.com/questions/21614680/< /а> - person fenix; 07.02.2014
comment
@StevanPopov У меня такое впечатление, что я до сих пор не совсем понимаю, каково ваше требование. Что я понял до сих пор: вы хотите определить меру CalcUnitSales следующим образом: если продукт используется в строках или столбцах, мера должна отображать только то же значение, что и мера Unit Sales для продукта Food, но ноль для всех других продуктов (и предположительно значение для продуктов питания, а также сумма по всем продуктам). Если продукт не используется ни в строках, ни в столбцах, ни в срезе, мера должна быть такой же, как Unit Sales. Пожалуйста, исправьте любую деталь, которая не соответствует моему пониманию. - person FrankPl; 07.02.2014
comment
Мерой должна быть ТАКАЯ ЖЕ погода, у меня есть [Product] в строках/столбцах или нет. В обоих случаях одинаковое значение. Спасибо! - person fenix; 07.02.2014
comment
@StevanPopov И это же значение должно быть значением продаж в единицах FOOD? - person FrankPl; 07.02.2014
comment
Да, но я не могу сделать это с помощью кортежа ([Показатели].[Единичные продажи],[Продукт].[Питание]), потому что мне нужны более сложные вещи с более чем фильтром. Извините, я действительно запутался, я отредактировал вопрос, пожалуйста, посмотрите. - person fenix; 09.02.2014
comment
@FrankPI Ты мне ОЧЕНЬ помог! Вы также многое узнали для меня о том, как работает формула mdx. Но ваш ответ дает мне неправильный результат, когда на топоре НЕТ измерения [Продукт]. В этом случае он возвращает мне сумму без условий. - person fenix; 10.02.2014
comment
Когда на осях нет продукта, то продукт CurrentMember равен [Product].[All]. Какой тогда должен быть результат? Как это взаимодействует со странами? - person FrankPl; 11.02.2014