Как определить базовый запрос к базе данных SQL, сгенерированный запросом MDX, в отчете JasperServer? - PullRequest
0 голосов
/ 29 января 2020

Мне интересно, может ли кто-нибудь помочь мне: -

У меня есть запрос MDX: -

select Hierarchize(Crossjoin({[Measures].[Performances Count]}, {[Time.time_hierarchy].
[2019].Children, [Time.time_hierarchy].[2020].Children})) ON COLUMNS,
NON EMPTY FILTER(
[Venue.venue_hierarchy].levels(3).members,
[Venue.venue_hierarchy].levels(3).CurrentMember.Properties("analysis_venue") = 1
) ON ROWS
from [Performances]

, который прекрасно работает в JasperAnalysis Schema Workbench. Однако он не будет работать через отчет сервера Jaspersoft. Насколько я понимаю, причина в ограничении количества строк в запросах к базе данных. Из журналов: -

2020-01-29 11: 28: 42,295 ОШИБКА DiskStorageFactory, атрибут% 0043ache.data: 495 - Запись на диск com.jaspersoft.jasperserver.api.metadata.user. service.impl. ProfileAttributeCacheKey@8014d944 ошибка:

...

Причина: com.tonbeller.jpivot.olap.model.OlapModel $ ResultTooLargeException: mondrian.olap.ResourceLimitExceededException: Ошибка Мондриана: число читаемых членов превысило предел (50 000)

Однако я не могу понять, почему это происходит. Простой запрос к базовой таблице фактов postgresql, т.е.

select *
from fact_tagged_performances
natural join dim_venue v
natural join dim_tags tags
natural join dim_time t
where v.analysis_venue = 1

, показывает план объяснения: -

Ха sh Соединение (стоимость = 192.32..36168.12 строки = ширина 3578 = 192)
га sh условие: (fact_tagged_performances.time_id = t.time_id)
-> Ха sh соединение (стоимость = 156.66..36083.26 строк = 3578 ширина = 151)
Ха sh Конд: (fact_tagged_performances.tag_id = tags.tag_id)
-> Вложенный L oop (стоимость = 0.85..35878.26 строк = 3578 ширина = 125)
-> Сканирование индекса с использованием analysis_venue на dim_venue v (стоимость = 0.42..8.16 строк = 88 ширина = 109 индекс Cond: (analysis_venue = 1)
-> сканирование индекса с использованием idx_fact_tagged_performances_venue_id для fact_tagged_performances индекс Cond: (venue_id = v.venue_id)
-> Ха sh (стоимость = 91.47..91.47 строк = 5147 ширина = 30)
-> Seq Scan на тегах dim_tags (стоимость = 0.00..91.47 строк = 5147 ширина = 30)
-> Ха sh (стоимость = 21.96..21.96 строк = ширина 1096 = 45)
-> Seq Scan в dim_time t (стоимость = 0.00..21.96 строк = ширина 1096 = 45)

с отображением ограниченный ряд е Попробуйте сравнить с таблицей фактов соответствующие индексы.

Кто-нибудь знает, что происходит? Похоже, что Сервер должен иметь возможность использовать этот же план объяснения, но это не так.

...