我正在报告来自两个没有理智的联合方式的表的数据。基本上就是这样 一个表中的库存,另一个表中的销售,我正试图获得库存的日子 将两者分开。由于我想不出加入表的方法,我将一个查询抽象为一个 数据库功能并从另一个调用它。
这是函数定义:
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报表设计器中运行,但这是硬编码的。当我参数化时 它抱怨的$ 1语法错误的where子句的值。从查看那些查询 Postgres收到,Pentaho用它的参数传递查询,使用$ 1,$ 2等。我想在那里 可能与我们的函数中使用的相同变量名冲突,或者它可能只是一个数据类型问题。
可能导致此错误的原因是什么?是否可以在报表查询中使用这样的函数?如果没有,我如何使用报表设计器执行类似操作?
答案 0 :(得分:1)
有可能。 我正在使用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
中定义的参数名称