2011-02-09 2 views
1

2つのテーブルのデータを一緒に結合することはまったくないと報告しています。基本的には の在庫を1つのテーブルに、もう1つを販売しています。私は で在庫を手に入れようとしています。私はテーブルを結合する方法を考えることができなかったので、私は1つのクエリを データベース関数に抽象化し、それを他のクエリから呼び出しました。ここでPentaho Report Designerのクエリでユーザー定義のデータベース関数を使用できますか?

は、関数の定義である:

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

可能です。 私はPostgresの8.4とRD 3.7

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

レポートデザイナーのクエリを使用しています

RD

で定義されているp_valは、パラメータ名をある
select * from ret_p(${p_val}); 

関連する問題