Bisakah saya menggunakan fungsi database yang ditentukan pengguna dalam kueri di Pentaho Report Designer?

Saya melaporkan data dari dua tabel yang tidak memiliki cara yang masuk akal untuk digabungkan. Pada dasarnya ini adalah inventaris di satu tabel, penjualan di tabel lain, dan saya mencoba mendapatkan hari-hari inventaris dengan membagi keduanya. Karena saya tidak dapat memikirkan cara untuk menggabungkan tabel, saya mengabstraksi satu kueri ke dalam fungsi database dan memanggilnya dari yang lain.

Berikut definisi fungsinya:

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;

Dan inilah permintaan laporannya:

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'
;

Seperti yang ada di sini, ini akan berjalan di desainer laporan Pentaho tetapi ini adalah kode yang sulit. Ketika saya membuat parameter nilai untuk klausa Where, ia mengeluhkan kesalahan sintaksis pada $1. Dari melihat kueri yang diterima Postgres, Pentaho meneruskan kueri dengan parameternya menggunakan $1, $2, dll. Saya pikir mungkin ada konflik dengan nama variabel yang sama yang digunakan dalam fungsi kita, atau mungkin itu hanya masalah tipe data.

Apa yang menyebabkan kesalahan ini? Apakah mungkin menggunakan fungsi seperti ini dalam kueri laporan? Jika tidak, bagaimana saya bisa melakukan hal serupa menggunakan Perancang Laporan?


person Tim Saylor    schedule 09.02.2011    source sumber


Jawaban (1)


Itu mungkin. Saya menggunakan Postgres 8.4 dan RD 3.7

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

Laporkan permintaan desainer

select * from ret_p(${p_val});

di mana p_val adalah nama parameter seperti yang didefinisikan dalam RD

person Gavin    schedule 10.02.2011