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?