2014-07-07 53 views
0

我遇到了一個非常有問題的行爲,它完全違背了使用子數據集的目的。JasperReports與subDataset的錯誤

每當我只是聲明子數據:

<subDataset name="dataset1" uuid="b8a31d7f-9906-4db0-ac81-155091b1817a"> 
     <parameter name="Parameter3" class="java.lang.String"> 
      <defaultValueExpression><![CDATA["SELECT country, count(*) AS number_of_sites FROM sites GROUP BY country ORDER BY number_of_sites DESC LIMIT 5"]]></defaultValueExpression> 
     </parameter> 
     <queryString> 
      <![CDATA[$P{Parameter3}]]> 
     </queryString> 
     <field name="country" class="java.lang.String"/> 
     <field name="number_of_sites" class="java.lang.Long"/> 
</subDataset> 

和BARCHART使用它(或堆疊條形圖是精確的,但它並不重要):

  <categoryDataset> 
       <dataset> 
        <datasetRun subDataset="dataset1" uuid="0a388bb3-2e57-4880-9b48-27e0a2afd415"/> 
       </dataset> 
       <categorySeries> 
        <seriesExpression><![CDATA[$F{country}]]></seriesExpression> 
        <categoryExpression><![CDATA[$F{country}]]></categoryExpression> 
        <valueExpression><![CDATA[$F{number_of_sites}]]></valueExpression> 
        <labelExpression><![CDATA[$F{number_of_sites}.toString()]]></labelExpression> 
       </categorySeries> 
      </categoryDataset> 

我得到空文檔作爲結果,我100%確定報告適配器能正常工作。因此,要運行這個和得到的結果,我需要某種原因還包括重複的條目:

<parameter name="Parameter3" class="java.lang.String"> 
       <defaultValueExpression><![CDATA["SELECT country, count(*) AS number_of_sites FROM sites GROUP BY country ORDER BY number_of_sites DESC LIMIT 5"]]></defaultValueExpression> 
</parameter> 
<queryString> 
    <![CDATA[$P{Parameter3}]]> 
</queryString> 

這是什麼地方加入JRXML的子數據塊之外。這又讓我絕望了,因爲我遇到了許多碧玉錯誤或設計上的不一致。如果主查詢需要與subDataset相匹配,那麼這會在報表內擊敗多文字查詢的目的。在我的情況下,我甚至不需要主要報告查詢我想要有許多子數據集,每個子​​數據集都有自己的查詢。

我玩報告連接它不會改變任何東西,只有當主查詢匹配subDataset查詢和參數化時,結果纔會返回。如果4個組件中的任何一個不匹配 - 它將無法生成報告或返回空白文檔。

我玩uuids讓他們匹配 - 這使零差異。

+0

如果您使用「select 1」作爲主數據集的查詢,它會起作用嗎?如果您沒有查詢主數據集,我相信Jasper Reports環境不會創建任何波段(用於主報告)。 –

+0

你是對的,發佈這個答案,我會接受它。 – Aubergine

回答

0

我相信,如果您沒有查詢主數據集,Jasper Reports環境將不會創建任何波段(用於主報告)。

例如,您可以嘗試諸如「select 1 as dummy」之類的查詢。

Jaspersoft Studio提供一個名爲「One Empty Record」的數據源作爲選項。它也可能對你的目的有用。

相關問題