|
|
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть проблема со сложным выбором из куба. Если в WHERE пишу условие с использованием OR, то есть вот так: Код: plaintext 1. то все зависает надолго, невозможно дождаться ответа. если каждое условие запускать отдельно , Код: plaintext Код: plaintext то каждый запрос работает меньше минуты. мне нужно получить общую сумму, которая подходит под то или иное условие. как мне уговорить запрос работать быстро? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 11:09 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
spb_kostya, UNION ALL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 12:45 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
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.07.2018, 15:30 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
6) Модифицируй фильтр вместо: filter([Dim3].members, [Dim3].currentmember.name <> 'C') желательно (функция except()): {[измерение].[атрибут].members - [измерение].[атрибут].[C]} или лучше {[измерение].[атрибут].members - [измерение].[атрибут].&[C]} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 15:33 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
7) на последней позиции не обязательно указывать [Dim3].members , достаточно будет All (или defaultmember если он-же стоит) - может быть важно если количество элементов за миллионы (тогда нет необходимости их перечесления) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 15:40 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
честно говоря, я уже чего только не делал. выражение упрощал, то есть даты выносил в общее условие, точнее именно с этого и начинал. потом уже начал эксперементировать filter([Dim3].members, [Dim3].currentmember.name <> 'C') изначально писал как ....members - .....[All] - ....[C] везде там в запросе есть [измерение].[атрибут].[элемент], просто я для наглядности их опустил [Dim3].members было [Dim3].[All] Оптимизировать измерения я никак не могу, так как не являюсь админом базы, а только для заказчика настраиваю аналитику по данным в общем попробовал сейчас с ключами, поставил везде амперсанд перед значением. отработало за минуту, но в результате явно не то, что должно быть. Крайне маленькие числа. и очень мало строк в результате. :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 16:33 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
spb_kostya, потому что во первых имя не обязательно равняется ключу (это могут быть разные поля исходной SQL таблицы) - например [dim3].[аттр1].[а] может быть [dim3].[аттр1].&[28]. во вторых - имена не обязательно уникальны, если обращаешься по имени - выбирается первых подходящий элемент, остальные пропускаются. так-же для сокращения data space можно попробовать вынести все известные критерии в суб-куб / подзапрос : from (...) но сначала лучше определить что именно тормозит - и на каком этапе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 16:56 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
vikkiv, а как определить причину торможения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 17:20 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
ещё есть вопрос, я обращаюсь к кубу по JDBC и в какой-то момент при добавлении ещё одной размерности я получаю ошибку java.lang.NullPointerException при этом изменение nonempty() на non empty помогает избежать этой ошибки... в чем может быть причина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 17:28 |
|
||
|
тормозит условие OR в WHERE
|
|||
|---|---|---|---|
|
#18+
spb_kostya..а как определить причину торможения?..разбить поэтапно на операции которые выполняет ядро SSAS при обработке запроса есть множество средств (MDX Studio и пр.) все из которых в принципе берут данные из Profiler считая разницы между различными events. можно даже какой-то план выполнения составить из разных фрагментов, у тебя много где members стоит, значит нужно All , хотя без него может быть быстрее через from(select{set/shape}on 0from..) смотреть агрегации,партиции,subcubes,crossjoin-ы, разбирать сам запрос, что там за расчётные меры и т.д. и т.п. по твоему драйверу и специфике его работы - не в курсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2018, 17:56 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=39675509&tid=1857831]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
153ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 484ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...