Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 тормозит условие OR в WHERE  [new]
spb_kostya
Member

Откуда: СПб
Сообщений: 199
Добрый день!

Есть проблема со сложным выбором из куба.

Если в WHERE пишу условие с использованием OR, то есть вот так:

WHERE { ( [Dates].[Year].[2018],[Dates].[Month Num].[1]:[Dates].[Month Num].[6], [Dim1].[A], [Dim2].[A] , filter([Dim3].members, [Dim3].currentmember.name <> 'C') ) ,
( [Dates].[Year].[2018],[Dates].[Month Num].[1]:[Dates].[Month Num].[6],[Dim1].[A], [Dim2].[B], [Dim3].members ) }

то все зависает надолго, невозможно дождаться ответа.

если каждое условие запускать отдельно ,
WHERE   ( [Dates].[Year].[2018],[Dates].[Month Num].[1]:[Dates].[Month Num].[6], [Dim1].[A], [Dim2].[A] ,  filter([Dim3].members, [Dim3].currentmember.name <> 'C')  )
и потом
WHERE  ( [Dates].[Year].[2018],[Dates].[Month Num].[1]:[Dates].[Month Num].[6],[Dim1].[A], [Dim2].[B],  [Dim3].members ) 

то каждый запрос работает меньше минуты.

мне нужно получить общую сумму, которая подходит под то или иное условие.
как мне уговорить запрос работать быстро?
18 июл 18, 11:09    [21580298]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
vborets
Member

Откуда:
Сообщений: 134
spb_kostya,

UNION ALL
18 июл 18, 12:45    [21580741]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
vikkiv
Member

Откуда: London
Сообщений: 1654
spb_kostya,

1) Arbitrary Shape в MDX настоятельно и по возможности рекомендуется избегать по причинам деградации производительности

2) Попробуй перейти к ключам вместо имён : [Dates].[Year].[2018] -> [Dates].[Year].&[2018] и [Dates].[Month Num].[1] -> [Dates].[Month Num].&[1]

3) Оптимизируй измерения (типы данных ключей, связи, и пр.)

4) упрости выражения, вынеси общее отдельно, напр. у тебя ([Dates].[Year].&[2018],[Dates].[Month Num].&[1]:[Dates].[Month Num].&[6],[Dim1].&[A]) является общим для обоих tupl - ов, следовательно вместо записи
where{(Х,У,А,Б),(Х,У,В,Г)} попробуй запись where((X,У),{(А,Б),(В,Г)}) или даже from(select(X,У)on 0 from Z)where{(А,Б),(В,Г)}

5) укажи полное наименование атрибута в форме [измерение].[атрибут].[элемент]. (точнее [измерение].[атрибут].&[ключь]). вместо [Dim2] .. [Dim3] и пр.
18 июл 18, 15:30    [21581681]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
vikkiv
Member

Откуда: London
Сообщений: 1654
6) Модифицируй фильтр вместо:
filter([Dim3].members, [Dim3].currentmember.name <> 'C')
желательно (функция except()):
{[измерение].[атрибут].members - [измерение].[атрибут].[C]}
или лучше
{[измерение].[атрибут].members - [измерение].[атрибут].&[C]}
18 июл 18, 15:33    [21581692]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
vikkiv
Member

Откуда: London
Сообщений: 1654
7) на последней позиции не обязательно указывать [Dim3].members , достаточно будет All (или defaultmember если он-же стоит) - может быть важно если количество элементов за миллионы (тогда нет необходимости их перечесления)
18 июл 18, 15:40    [21581718]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
spb_kostya
Member

Откуда: СПб
Сообщений: 199
честно говоря, я уже чего только не делал.

выражение упрощал, то есть даты выносил в общее условие, точнее именно с этого и начинал. потом уже начал эксперементировать

filter([Dim3].members, [Dim3].currentmember.name <> 'C')
изначально писал как ....members - .....[All] - ....[C]

везде там в запросе есть [измерение].[атрибут].[элемент], просто я для наглядности их опустил

[Dim3].members было [Dim3].[All]

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

в общем попробовал сейчас с ключами, поставил везде амперсанд перед значением.
отработало за минуту, но в результате явно не то, что должно быть. Крайне маленькие числа. и очень мало строк в результате. :-(
18 июл 18, 16:33    [21581891]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
vikkiv
Member

Откуда: London
Сообщений: 1654
spb_kostya,


потому что во первых имя не обязательно равняется ключу (это могут быть разные поля исходной SQL таблицы) - например [dim3].[аттр1].[а] может быть [dim3].[аттр1].&[28].

во вторых - имена не обязательно уникальны, если обращаешься по имени - выбирается первых подходящий элемент, остальные пропускаются.

так-же для сокращения data space можно попробовать вынести все известные критерии в суб-куб / подзапрос : from (...)

но сначала лучше определить что именно тормозит - и на каком этапе.
18 июл 18, 16:56    [21581966]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
spb_kostya
Member

Откуда: СПб
Сообщений: 199
vikkiv,

а как определить причину торможения?
18 июл 18, 17:20    [21582031]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
spb_kostya
Member

Откуда: СПб
Сообщений: 199
ещё есть вопрос, я обращаюсь к кубу по JDBC и в какой-то момент при добавлении ещё одной размерности я получаю ошибку java.lang.NullPointerException

при этом изменение nonempty() на non empty помогает избежать этой ошибки...

в чем может быть причина.
18 июл 18, 17:28    [21582056]     Ответить | Цитировать Сообщить модератору
 Re: тормозит условие OR в WHERE  [new]
vikkiv
Member

Откуда: London
Сообщений: 1654
spb_kostya
..а как определить причину торможения?..
разбить поэтапно на операции которые выполняет ядро SSAS при обработке запроса
есть множество средств (MDX Studio и пр.) все из которых в принципе берут данные из Profiler считая разницы между различными events.
можно даже какой-то план выполнения составить из разных фрагментов, у тебя много где members стоит, значит нужно All , хотя без него может быть быстрее через from(select{set/shape}on 0from..)
смотреть агрегации,партиции,subcubes,crossjoin-ы, разбирать сам запрос, что там за расчётные меры и т.д. и т.п.

по твоему драйверу и специфике его работы - не в курсе.
18 июл 18, 17:56    [21582135]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить