ฉันสามารถใช้ฟังก์ชันฐานข้อมูลที่ผู้ใช้กำหนดในการสืบค้นใน 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 ฯลฯ ฉันคิดว่าอาจมีข้อขัดแย้งกับชื่อตัวแปรเดียวกันที่ใช้ในฟังก์ชันของเรา หรืออาจเป็นเพียงปัญหาประเภทข้อมูล

อะไรอาจทำให้เกิดข้อผิดพลาดนี้ เป็นไปได้ไหมที่จะใช้ฟังก์ชันเช่นนี้ในการสืบค้นรายงาน? ถ้าไม่ ฉันจะทำสิ่งที่คล้ายกันโดยใช้ Report Designer ได้อย่างไร


person Tim Saylor    schedule 09.02.2011    source แหล่งที่มา


คำตอบ (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

person Gavin    schedule 10.02.2011