Добрый день.
Для передачи фильтров в запрос выполнил условия согласно
https://help.luxmsbi.com/-925
https://help.luxmsbi.com/-508#post-2
Установлены версии
luxmsbi-web-8.10.12-20221124.el7.x86_64
luxmsbi-datagate-8.10.12-20221122.x86_64
luxmsbi-appserver-8.10.12-20221122.x86_64
luxmsbi-pg-8.10.8-20221121.el7.x86_64
Сам запрос выглядит так(БД Oracle):
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(+)
)
Т.е. в нем есть и where ${filters()} , и в конфигурации куба указано {“skip_where”: 1, “is_template”: 1}
По одному из полей(NDOC_YEAR) источника установлено значение по-умолчанию для управляющего дэша - {“defaultValue”: “2022”, “possible_aggregations”: }. Больше никакие фильтры не заданы.
В json-конфиге дэша-графика “measures”: [“sum(SUMM_PLAN)/1000000:s”,“sum(SUMM_FACT)/1000000:sf”] и “dimensions”: [“SDOC_MONTH2”]
В итоге в БД отправляется следующий запрос(журнал datagate), завершающийся ошибкой:
SELECT SDOC_MONTH2 as "SDOC_MONTH2", sum(SUMM_PLAN) / 1000000 as "s", sum(SUMM_FACT) / 1000000 as "sf"
FROM (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 (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')) AND (NDOC_YEAR = '2022')
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(+)
)
) PARUS_UDO_MV_GOVBUYPGR_EXEC_SM
GROUP BY SDOC_MONTH2
В результате ошибка ORA-00904: “SDOC_MONTH2”: недопустимый идентификатор.
Что логично, так как в условие отбора парсер зачем-то вставил довольно бессмысленное условие, видимо заранее определив предварительными выборками все значения этого поля на выходе:
(SDOC_MONTH2 IN (‘2022.01’, … , ‘2022.12’)). А этого поля нет в источнике данных PARUS.UDO_MV_GOVBUYPGR_EXEC, оно создается в результате этого запроса.
Как это исправить?