Как выполнить агрегацию с начала года для данных, упорядоченных в родительских дочерних иерархиях, с помощью унарных операторов?

Я использую отношения родитель-потомок для учетных записей в базе данных OLAP icCube. Чтобы включить финансовую логику, я использую унарные операторы. Кроме того, я настроил несколько иерархий учетных записей, используя отношения «многие-2-многие», и все работает очень гладко, за исключением ....

когда я хочу применить логику времени к результату, например. показать значение с начала года на 30 апреля 2014 года по:

Aggregate(crossjoin ({[View].[View].[Periodiek]},PeriodsToDate([Tijd].[Kalender].[jaar],[Tijd].[Kalender].currentmember)))

Я получаю сообщение:

Aggregate() : унарный оператор агрегации не поддерживается (мера или вычисляемая мера/член: [Measures].[bedrag])

Видимо, это не способ сделать это.

Как можно получить кумулятивные цифры (периоды до даты) в этой настройке?


person Arthur    schedule 04.01.2015    source источник
comment
что такое полный сценарий mdx? [Measures].[bedrag] отсутствует в предоставленном фрагменте кода, но присутствует в сообщении об ошибке. Унарные операторы — это +, - или *, которых нет в предоставленном вами фрагменте, поэтому у меня такое ощущение, что ошибка может быть где-то еще.   -  person whytheq    schedule 04.01.2015
comment
Проблема, безусловно, заключается в мере [Measures].[bedrag], которая, как я подозреваю, является defaultmember измерения measures. Пожалуйста, опубликуйте код для этой меры.   -  person SouravA    schedule 04.01.2015


Ответы (2)


Текущая версия icCube — 4.8.2 — не поддерживает функцию агрегирования для показателей с типом агрегирования «унарный оператор». См. документ по функции агрегации здесь.

Функция Aggregate немного хитрая, если вы используете отношения «многие-2-многие», а также специальные типы агрегирования показателей. Например :

     Aggregate( { [Account1], [Account2] }, [Measures].[Special] )

Если [Special] является мерой с типом агрегирования «Сумма», а [Account1] и [Account2] имеют отношение «многие-2-многие», мы будем подсчитывать дважды одну и ту же «общую» сумму (т. е. одна и та же строка подсчитывается дважды).

Другие меры с типами агрегирования просто не поддерживаются, чтобы избежать непредвиденных результатов. Это относится к типам агрегации Open/Close/Distinct Count.

Решение в вашем случае использует функцию Sum:

Компактный набор позволяет компактно установить, если вы используете дни или часы, сокращая набор. Это усилитель производительности.

Если вы хотите правильно обрабатывать отношения m2m и специальные типы агрегации показателей, вы можете использовать категории в icCube, см. здесь некоторые документ. Быстро они позволяют динамически определять члены как набор кортежей.

Для правильной поддержки Aggregate мы должны добавить новый метод, например. icAggregate, который работает с использованием категорий. Функция Aggregate немного странная, пока мы немного имитируем SSAS...

person ic3    schedule 05.01.2015

Чтобы доказать комментарий Сурава, попробуйте изменить меру на следующую:

Aggregate(
  {[View].[View].[Periodiek]}
  * PeriodsToDate([Tijd].[Kalender].[jaar],[Tijd].[Kalender].currentmember)
  , [Measures].[MEASURE_NOT_bedrag]    //<<replace with actual
  )

Вы все еще получаете ту же ошибку?

person whytheq    schedule 04.01.2015
comment
почемуq, тип агрегации «унарный оператор» не поддерживается в функции агрегирования в icCube. Смотрите мой ответ.. - person ic3; 05.01.2015
comment
@ic3 Спасибо. Функция Aggregate широко используется в наших кубах и коде. Мы используем стек MS и Pyramid — эта функция поддерживается во всем. - person whytheq; 05.01.2015
comment
@ic3 честный комментарий: не уверен! - person whytheq; 05.01.2015
comment
после того, как вы можете проверить меру с отдельным типом агрегации счетчика - person ic3; 05.01.2015
comment
@ic3 мы не используем иерархии родитель-потомок, поэтому я не могу проверить - person whytheq; 05.01.2015
comment
Это та же проблема для любой иерархии с отношениями «многие ко многим» или если вы используете меру, которая определена с отдельным типом агрегации счетчика (вместо классической «суммы»). - person ic3; 06.01.2015
comment
@ ic3 ok - тогда я могу подтвердить, что отдельные подсчеты с помощью агрегата отлично работают с Pyramid. - person whytheq; 07.01.2015