2014-11-24 8 views
2

Я был в предположении, что по возможности следует избегать оговорки NON EMPTY. Итак, я был в шоке, когда случайно узнал, что он действительно сделал запрос намного быстрее!Функция MDX - 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 рекурсивная? Это из-за локального размера кеша?

+0

Hi sourav - Я добавил свой «ответ», который не является однозначным ответом. +1 для вопроса, поскольку мне интересно узнать причину такого поведения. – whytheq

+0

Используете ли вы выражение оси NON EMPTY или функцию 'NonEmpty()'? Из вашего вопроса я не уверен, какой из них вы используете. – FrankPl

+0

@FrankPl - Я не говорю о функции. Выражение 'NON EMPTY' - это то, что я использовал. – SouravA

ответ

0

У меня создалось впечатление, что NON EMPTY применяется в самом конце процесса скрипта. См предыдущий вопрос/ответ здесь: Logical order an MDX query is processed

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

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

Другая интересная статья re. NON EMPTY is here: http://www.bidn.com/blogs/DustinRyan/bidn-blog/2996/non-empty-vs-nonempty-to-the-death

+0

Да, я уже прошел через это. Действительно хорошая статья. – SouravA

+0

Да, это огромный (в основном нулевой) набор результатов, возвращенный без предложения. Думаю, внутри движка идет оптимизация или параллельная обработка. – SouravA

+0

Мой ответ вполне может быть причиной, поэтому - для вывода результатов в таблицу требуется время. – whytheq