Я знаю, что mondrian преобразует запросы MDX в реляционные запросы и возвращает результат. Но есть ли какие-либо подробности об этом процессе?Что происходит во время запроса с использованием mondrian?
Я использую образец куба HR. Вот MDX:
WITH
SET [~ROWS] AS
TopCount({[Time].[Time].[Month].Members}, 3, [Measures].[Org Salary])
SELECT
NON EMPTY {[Measures].[Org Salary]} ON COLUMNS,
NON EMPTY [~ROWS] ON ROWS
FROM [HR]
И это SQL, сгенерированный MDX. Я считаю, это в журнале:
select
"time_by_day"."the_year" as "c0",
"time_by_day"."quarter" as "c1",
"time_by_day"."the_month" as "c2",
"time_by_day"."month_of_year" as "c3",
sum("salary"."salary_paid") as "c4"
from
"salary" as "salary",
"time_by_day" as "time_by_day"
where
"time_by_day"."the_year" = 1997
and
"salary"."pay_date" = "time_by_day"."the_date"
group by
"time_by_day"."the_year",
"time_by_day"."quarter",
"time_by_day"."the_month",
"time_by_day"."month_of_year"
order by
CASE WHEN sum("salary"."salary_paid") IS NULL THEN 1 ELSE 0 END, sum("salary"."salary_paid") DESC,
CASE WHEN "time_by_day"."the_year" IS NULL THEN 1 ELSE 0 END, "time_by_day"."the_year" ASC,
CASE WHEN "time_by_day"."quarter" IS NULL THEN 1 ELSE 0 END, "time_by_day"."quarter" ASC,
CASE WHEN "time_by_day"."the_month" IS NULL THEN 1 ELSE 0 END, "time_by_day"."the_month" ASC,
CASE WHEN "time_by_day"."month_of_year" IS NULL THEN 1 ELSE 0 END, "time_by_day"."month_of_year" ASC
меняю верхний 3 до топ-10, и я получил тот же SQL. И SQL не имеет ничего подобного «limit».
Так что мне интересно, что происходит во время запроса? Я искал и не получил никакой полезной информации. Может ли кто-нибудь помочь?
спасибо.
Longxing
Вы имеете в виду, что MDX может иметь другое исполнение в Mondrian на основе MDX, схемы и настройки. Например, Mondrian может получить все данные из базы данных и кэшировать его и применить topCount в Mondrian или просто вычислить в базе данных. Я прав? –
@ LongxingWei Да, вот что я имел в виду. – bolav
Я нахожу configure в mondrian.properties. mondrian.rolap.aggregates.optimizePredicates = верно. Что помогает. благодаря –