2016-04-12 19 views
1

Bir rapor oluşturmak için Jaspersoft studio kullanıyorum. Veri bağdaştırıcısı, bir postgresql sorgusudur (bir postgres sunucusuna). Sorgu:datetime parametresi postgresql sql'ye nasıl aktarılır?

select * from dbo.FACTSALES where FactSales.saledatekey BETWEEN to_char($P!{StartDate}, 'YYYYMMDD')::INTEGER AND to_char($P!{EndDate}, 'YYYYMMDD')::INTEGER 

FactSales.saledatekeyInteger olduğunu.

Planım, raporda iki veri zamanı parametresi (StartDate, EndDate) koymak, böylece raporu çalıştırmak için başlangıç ​​ve bitiş tarihleri ​​seçebilirim. Yani sorgu yukarıdaki gibidir ve aynı isimde ve java.sql.Timestamp (varsayılan ifade yok) türünde Outline'da iki parametre oluşturdum. Ancak raporu çalıştırdığımda, SQL deyimini çalıştırırken hata alıyorum.

DÜZENLEME

yüzden $ P değişti! Bu hata hala aynı hatayı alıyorum.

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="fd68b751-49c2-4153-b2a8-48a95af021c9"> 
     <property name="com.jaspersoft.studio.data.sql.tables" value=""/> 
     <property name="com.jaspersoft.studio.data.defaultdataadapter" value="datamart"/> 
     <property name="ireport.jasperserver.url" value="http://10.20.169.43:8080/jasperserver/"/> 
     <property name="ireport.jasperserver.user" value="Nian"/> 
     <property name="ireport.jasperserver.report.resource" value="/reports/NianTest/test4_files/main_jrxml"/> 
     <property name="ireport.jasperserver.reportUnit" value="/reports/NianTest/test4"/> 
     <parameter name="StartDate" class="java.sql.Timestamp"> 
      <parameterDescription><![CDATA[]]></parameterDescription> 
     </parameter> 
     <parameter name="EndDate" class="java.sql.Timestamp"/> 
     <queryString> 
      <![CDATA[select customerkey, productkey from dbo.FACTSALES where $X{[BETWEEN], FactSales.saledatekey , to_char($P{StartDate} , 'YYYYMMDD')::INTEGER, to_char($P{EndDate}, 'YYYYMMDD')::INTEGER}]]> 
     </queryString> 
     <field name="customerkey" class="java.lang.Integer"/> 
     <field name="productkey" class="java.lang.Integer"/> 
     <background> 
      <band splitType="Stretch"/> 
     </background> 
     <title> 
      <band height="79" splitType="Stretch"/> 
     </title> 
     <pageHeader> 
      <band height="35" splitType="Stretch"/> 
     </pageHeader> 
     <columnHeader> 
      <band height="61" splitType="Stretch"> 
       <staticText> 
        <reportElement x="50" y="0" width="100" height="30" uuid="1471918d-b246-4aea-ba5c-d65a7fa48284"/> 
        <text><![CDATA[customerkey]]></text> 
       </staticText> 
       <staticText> 
        <reportElement x="268" y="0" width="100" height="30" uuid="361e8408-7859-483f-8143-5834fff3594d"/> 
        <text><![CDATA[productkey]]></text> 
       </staticText> 
      </band> 
     </columnHeader> 
     <detail> 
      <band height="125" splitType="Stretch"> 
       <textField> 
        <reportElement x="50" y="49" width="100" height="30" uuid="3423ea0c-aa51-4537-ab28-29ae255c313c"/> 
        <textFieldExpression><![CDATA[$F{customerkey}]]></textFieldExpression> 
       </textField> 
       <textField> 
        <reportElement x="200" y="40" width="100" height="30" uuid="d8381278-1fc1-4f9f-bd85-e65a85b77630"/> 
        <textFieldExpression><![CDATA[$F{productkey}]]></textFieldExpression> 
       </textField> 
      </band> 
     </detail> 
     <columnFooter> 
      <band height="45" splitType="Stretch"/> 
     </columnFooter> 
     <pageFooter> 
      <band height="54" splitType="Stretch"/> 
     </pageFooter> 
     <summary> 
      <band height="42" splitType="Stretch"/> 
     </summary> 
</jasperReport> 

ve iki parametre:

jrxml

(Sadece iki sütun için * seçeneğini değiştirildi)

StartDate class: java.sql.Timestamp 
EndDate class: java.sql.Timestamp 

hatası: kullanarak

ERROR: function to_char(unknown, unknown) is not unique Hint: Could not choose a best candidate function. You might need to add explicit type casts

+0

$ P! {StartDate} 'iniz java.sql.Timestamp? string substitution yapıyorsunuz, bundan sonra sorgu [use-parameters-queries] arasında özel bir komut var (http://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/using- parametre sorguları) –

+0

Bunu http://stackoverflow.com/questions/11871042/jasperreports-passing-parameters-to-query olarak önereceğim, Alex yanıtı $ P {ve $ P! {arasındaki farka göre farklılık gösterecektir. Senin durumunda $ X {IS_BETWEEN, column, startParam, endParam} –

+0

kullanmış olurum biraz daha fazla detay verebilir misin? Buna gerçekten yeniyim. – thotwielder

cevap

1

sorgu hazırlanan ifade:

select customerkey, productkey from dbo.FACTSALES where FactSales.saledatekey BETWEEN to_char($P{StartDate}::timestamp, 'YYYYMMDD')::int AND to_char($P{EndDate}::timestamp, 'YYYYMMDD')::int 

veya Integer için parametresine ve her zaman parametrelere seti varsayılan değerlerine dikkate IDE test etmek isterseniz

select customerkey, productkey from dbo.FACTSALES where $X{[BETWEEN], FactSales.saledatekey ,StartDate, EndDate} 

fonksiyonu
arasında yılında yap-kullanın değiştirin.

<parameter name="StartDate" class="java.sql.Timestamp" isForPrompting="false"> 
    <defaultValueExpression><![CDATA[new java.sql.Timestamp(1l)]]></defaultValueExpression> 
</parameter> 
<parameter name="EndDate" class="java.sql.Timestamp" isForPrompting="false"> 
    <defaultValueExpression><![CDATA[new java.sql.Timestamp(new java.util.Date().getTime())]]></defaultValueExpression> 
</parameter> 
+0

FactSales.saledatekey tamsayıdır (yani 20160413), bu yüzden sizinki işe yaramayacaktır.Bu yüzden orijinal sorgulamda başlangıç ​​/ bitiş tarihlerini karşılaştırma için tamsayıya dönüştürdüm.Ben, bu dbo.FN_convertIntToDate (saledatekey)> = $ P {StartDate} ve dbo.FN_convertIntToDate (saledatekey) <= $ P {EndDate}, burada FN_convertIntToDate işlevinin bir işlevi olduğu gibi, datetime dönüştürmeyi denedim. ama sadece orijinal çalışmayı nasıl yapacağını bilmek ister misiniz? – thotwielder

+0

Aaah o tarih biçimindeki bir tamsayı, zaman damgası biçiminde (ms), Tamsayı parametresini kullan seçeneğine inanıyorum? –

+0

Hayır, işe yaramıyor. Bunu ikinci versiyonumda gerçekten yormuştum. Bu hatayı aldım: HATA: function to_char (bilinmeyen, bilinmeyen) benzersiz değil İpucu: En iyi aday işlevi seçilemedi. Müstehcen yayınlar eklemeniz gerekebilir. Konum: 87 Veri Kümesi ve Sorgu İletişim penceresinde. – thotwielder