MDX - NON EMPTY работает быстрее?

Я исходил из того, что пункта NON EMPTY следует избегать, когда это возможно. Итак, я был в шоке, когда случайно обнаружил, что это на самом деле делает запрос намного быстрее!

Попробуйте это:

select 
[Measures].[Count Of Requests] on 0,
([Client].[Client Number].children , [Date].[Year].children) on 1
from [MyCube]

--19 секунд в горячем кеше

select 
[Measures].[Count Of Requests] on 0,
non empty ([Client].[Client Number].children , [Date].[Year].children) on 1
from [MyCube]

--5 секунд в холодном кеше (постоянно)

Разве NON EMPTY не рекурсивно? Это из-за размера локального кеша?


person SouravA    schedule 24.11.2014    source источник
comment
Привет, Сурав - я добавил свой ответ, который не является определенным ответом. +1 за вопрос, так как мне интересно узнать причину такого поведения.   -  person whytheq    schedule 25.11.2014
comment
Вы используете выражение оси NON EMPTY или функцию NonEmpty()? Из вашего вопроса я не уверен, какой из них вы используете.   -  person FrankPl    schedule 25.11.2014
comment
@FrankPl - я не говорю о функции. NON EMPTY выражение, которое я использовал.   -  person SouravA    schedule 25.11.2014


Ответы (1)


У меня сложилось впечатление, что NON EMPTY применяется в самом конце процесса скрипта. См. предыдущий вопрос/ответ здесь: Логический порядок обработки запроса MDX

Таким образом, фактически все возвращается, а затем перед рендерингом результатов в сетку или клиентское приложение инструкция NON EMPTY означает, что пустые кортежи в строках или столбцах отбрасываются.

Если ваш первый скрипт возвращает много данных, требуется ли дополнительное время для завершения процесса рендеринга?

Еще одна интересная статья о. NON EMPTY находится здесь: http://www.bidn.com/blogs/DustinRyan/bidn-blog/2996/non-empty-vs-nonempty-to-the-death

person whytheq    schedule 25.11.2014
comment
Да, это огромный (в основном нулевой) набор результатов, возвращаемый без предложения. Я предполагаю, что внутри движка происходит некоторая оптимизация или параллельная обработка. - person SouravA; 25.11.2014
comment
Тогда мой ответ вполне мог быть причиной - для отображения результатов в таблице требуется время. - person whytheq; 25.11.2014
comment
Имеет смысл. Но как это подтвердить? - person SouravA; 25.11.2014
comment
Просто обновление... это 276029 и 20108 строк, возвращенных в приведенных выше случаях. - person SouravA; 26.11.2014