Добрый день!
Попытка применить установку фильтров в запрос согласно рекомендациям https://help.luxmsbi.com/-508
Есть запрос в кубе, например такой
select
sum(SUMM_PRED) over (partition by NDOC_YEAR order by SDOC_MONTH2) as SUMM_PLAN,
sum(SUMM_FACT) over (partition by NDOC_YEAR order by SDOC_MONTH2) as SUMM_FACT,
SDOC_MONTH2, NDOC_YEAR
from (
select t2.SUMM_PRED+t1.SUMM_PRED as SUMM_PRED, t2.SUMM_FACT+t1.SUMM_FACT as SUMM_FACT,
t2.SDOC_MONTH2, t2.NDOC_YEAR
from
(
select sum(SECONOMY_PRED) as SUMM_PRED,
sum(SECONOMY_FACT) as SUMM_FACT,
to_char(
case
WHEN DDOC_DATE_CON IS NULL then DDOC_DATE
WHEN DDOC_DATE_CON < to_date(‘01.01.2022’,‘DD.MM.YYYY’) then DDOC_DATE
else DDOC_DATE_CON
end, ‘YYYY.MM’)
as SDOC_MONTH2, NDOC_YEAR
from PARUS.UDO_MV_GOVBUYPGR_EXEC
where ${filters()}
group by
to_char(
case
WHEN DDOC_DATE_CON IS NULL then DDOC_DATE
WHEN DDOC_DATE_CON < to_date(‘01.01.2022’,‘DD.MM.YYYY’) then DDOC_DATE
else DDOC_DATE_CON
end, ‘YYYY.MM’),
NDOC_YEAR
) t1,
(
select 0 as SUMM_PRED, 0 as SUMM_FACT, to_char(sysdate,‘YYYY’)||‘.’||LPAD(to_char(LEVEL),2,‘0’) as SDOC_MONTH2,
to_number(to_char( sysdate, ‘YYYY’)) as NDOC_YEAR
from dual
where LEVEL between 1 and 12
connect by LEVEL <= 12
) t2
where t2.SDOC_MONTH2 = t1.SDOC_MONTH2(+)
)
Тип дэша - spline, размерности:
"xAxis": "SDOC_MONTH2",
"yAxis": "measures",
"filters": {
"NDOC_YEAR": true,
"SDOC_MONTH": true,
"SDOC_QUART": true,
"SDEPARTMENT_1": true,
"SDEPARTMENT_2": true
},
"measures": [
"sum(SUMM_PLAN)/1000000:s",
"sum(SUMM_FACT)/1000000:sf"
],
"dimensions": [
"SDOC_MONTH2"
]
В конфигурации куба:
{
"skip_where": 1,
"is_template": 1
}
В БД сначала отправлются несколько(вроде бы) запросов вида
SELECT * FROM (SELECT koob__inner__select__.*, ROWNUM AS "koob__row__num__" FROM (SELECT koob__range__ as "measure_idx", sum(SUMM_PLAN) / 1000000 as "s", sum(SUMM_FACT) / 1000000 as "sf"
...
) PARUS_UDO_MV_GOVBUYPGR_EXEC_SM,(
select LEVEL-1 AS koob__range__ from dual
where LEVEL between 0+1 and 2
connect by LEVEL <= 2
)
GROUP BY koob__range__
ORDER BY "measure_idx") koob__inner__select__) koob__top__level__select__
WHERE "koob__row__num__" <= 128;
при этом в условие where поставляется значение “(1=1)”. В результате этих всех манипуляций в последний результирующий запрос в условия отбора подставляется следующее(при этом в управляющем дэше ничего не выбрано для отбора/фильтрации):
where (1=1) AND (SDOC_MONTH2 IN (‘2022.01’, ‘2022.02’, ‘2022.03’, ‘2022.04’, ‘2022.05’, ‘2022.06’, ‘2022.07’, ‘2022.08’, ‘2022.09’, ‘2022.10’, ‘2022.11’, ‘2022.12’))
Естественно, запрос выполняется с ошибкой, т.к. в этом месте поля SDOC_MONTH2 ещё не существует. Зачем оно тут подставляется, т.к. никакой смысловой нагрузки данная конструкция не представляет? в управлющем дэше оно как фильтр отсутствует.
Если в управлющем дэше выбрать что-то, это корректно подставляется в запрос, но лишняя конструкция “AND (SDOC_MONTH2 IN ('2” остается в любом случае. В итоге подход такой у меня не работает.
Зпмечал, что и снаружи может в обертывающем внешнем запросе прицепить, если не исппользовать вариант {filters()}