Могу ли я использовать пользовательскую функцию базы данных в запросе в Pentaho Report Designer? - PullRequest
1 голос
/ 09 февраля 2011

Я сообщаю о данных из двух таблиц, у которых нет разумного способа объединиться.В основном это инвентарь в одной таблице, продажи в другой, и я пытаюсь подвести дни инвентаризации, разделив их.Поскольку я не мог придумать, как объединить таблицы, я абстрагировал один запрос в функцию базы данных и вызвал ее из другого.

Вот определение функции:

CREATE OR REPLACE FUNCTION avgsales(date, text, text, integer) RETURNS numeric
    AS ' SELECT sum(quantity)/(65.0*$4/90.0) as thirty_day_avg
         FROM data_867 JOIN drug_info 
         ON drug_info.dist_ndc = trim(leading ''0'' from data_867.product_ndc)
         WHERE
         rpt_start_dt>= $1-$4 AND
         rpt_end_dt<= $1 AND
         drug_info.drug_name = $2 AND
         wholesaler_name = $3 '
    LANGUAGE SQL;

А вот запрос отчета:

SELECT
(sum("data_852"."za02")/5)/avgsales(date '2010-11-30', 'Semprex D 100ct', 'McKesson', 30) as doh
FROM
"data_852"
JOIN
"drug_info" ON "drug_info"."dist_ndc" = "data_852"."lin03"
JOIN
"wholesaler_info" ON trim("data_852"."isa06") = trim("wholesaler_info"."isa06")
WHERE
(za01 = 'QA'
OR za01 = 'QP'
OR za01 = 'QI')
and "data_852"."xq02">= DATE '2010-11-30'-5
and "data_852"."xq03"<='2010-11-30'
and drug_info.drug_name = 'Semprex D 100ct'
and wholesaler_info.wholesaler_name = 'McKesson'
;

Как и здесь, он будет выполняться в конструкторе отчетов Pentaho, ноэто жестко закодировано.Когда я параметризирую значения для предложения where, он жалуется на синтаксическую ошибку в $ 1.Из анализа запросов, которые получает Postgres, Pentaho передает запрос с его параметрами, используя $ 1, $ 2 и т. Д. Я думаю, что может возникнуть конфликт с теми же именами переменных, которые используются в нашей функции, или, возможно, это просто проблема типа данных.

Что может быть причиной этой ошибки?Можно ли использовать такую ​​функцию в запросе отчета?Если нет, то как я могу сделать что-то подобное с помощью дизайнера отчетов?

1 Ответ

1 голос
/ 10 февраля 2011

Это возможно. Я использую Postgres 8.4 и RD 3.7

create function ret_p(text) 
returns text 
as 
$$ 
select $1;
$$ language sql immutable;

Запрос конструктора отчетов

select * from ret_p(${p_val});

где p_val - имя параметра, как определено в RD

...