2016-06-21 32 views
2

背景:ジャスパーレポート削除/非表示空のグループ

enter image description here

クロス集計のデータセット:

select 'prod1' as prod, 'mon1' as month, 1 as val 
    union all select 'prod1' as prod, 'mon2' as month, 1 as val 
    union all select 'prod2' as prod, 'mon1' as month, 1 as val 
    union all select 'prod2' as prod, 'mon2' as month, 1 as val 
    union all select 'prod3' as prod, null as month, null as val 

問題:Jaspersoftスタジオ6.

は、このクロス集計を持っているようにprod3にmon1またはmon2に関連するデータがないことに気づいたかもしれません。しかし、私はまだ報告書に示される必要があります。したがって、Jasperによって作成されているNULL列があります。どうすれば空の列を取り除くことができますか? nullのときは空白を試していますが、空白のときはさまざまな場所で行を削除しますが、何も動作しません。ある時点でもnullテキストを取り除くことができますが、セルはまだレンダリングされているので、枠線と背景色は表示されます。

とソースファイル(ちょうど1つの行グループとのクロス集計と1つの列グループ):

<?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="test" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d00fbad1-be1e-4544-b22f-6dca803b6714"> 
    <style name="Crosstab_CH" mode="Opaque" backcolor="#F0F8FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="Crosstab_CT" mode="Opaque" backcolor="#005FB3"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="Crosstab_CD" mode="Opaque" backcolor="#FFFFFF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <queryString> 
     <![CDATA[select 'prod1' as prod, 'mon1' as month, 1 as val 
    union all select 'prod1' as prod, 'mon2' as month, 1 as val 
    union all select 'prod2' as prod, 'mon1' as month, 1 as val 
    union all select 'prod2' as prod, 'mon2' as month, 1 as val 
    union all select 'prod3' as prod, null as month, null as val]]> 
    </queryString> 
    <field name="prod" class="java.lang.String"/> 
    <field name="month" class="java.lang.String"/> 
    <field name="val" class="java.lang.Integer"/> 
    <summary> 
     <band height="229" splitType="Stretch"> 
      <crosstab ignoreWidth="true"> 
       <reportElement x="10" y="14" width="520" height="116" isRemoveLineWhenBlank="true" uuid="bb1bb352-1dab-438b-b2c8-b73286af3a9c"> 
        <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/> 
       </reportElement> 
       <rowGroup name="prod1" width="60"> 
        <bucket class="java.lang.String"> 
         <bucketExpression><![CDATA[$F{prod}]]></bucketExpression> 
        </bucket> 
        <crosstabRowHeader> 
         <cellContents mode="Opaque" style="Crosstab_CH"> 
          <textField> 
           <reportElement x="0" y="0" width="60" height="20" uuid="d56c7426-8030-4919-8869-86129c230a48"/> 
           <textFieldExpression><![CDATA[$V{prod1}]]></textFieldExpression> 
          </textField> 
         </cellContents> 
        </crosstabRowHeader> 
        <crosstabTotalRowHeader> 
         <cellContents mode="Opaque" style="Crosstab_CT"> 
          <staticText> 
           <reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="ef3d9aab-f696-48c4-b95b-6be099951c55"/> 
           <text><![CDATA[Total prod1]]></text> 
          </staticText> 
         </cellContents> 
        </crosstabTotalRowHeader> 
       </rowGroup> 
       <columnGroup name="month1" height="20"> 
        <bucket class="java.lang.String"> 
         <bucketExpression><![CDATA[$F{month}]]></bucketExpression> 
        </bucket> 
        <crosstabColumnHeader> 
         <cellContents mode="Opaque" style="Crosstab_CH"> 
          <textField isBlankWhenNull="false"> 
           <reportElement x="0" y="0" width="60" height="20" uuid="f8dca50f-1f98-425b-bc4e-8a9505901477"/> 
           <textFieldExpression><![CDATA[$V{month1}]]></textFieldExpression> 
          </textField> 
         </cellContents> 
        </crosstabColumnHeader> 
        <crosstabTotalColumnHeader> 
         <cellContents mode="Opaque" style="Crosstab_CT"> 
          <staticText> 
           <reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="4960b0b9-4df7-4216-908e-e042ccf2e3a6"/> 
           <text><![CDATA[Total month1]]></text> 
          </staticText> 
         </cellContents> 
        </crosstabTotalColumnHeader> 
       </columnGroup> 
       <measure name="val_MEASURE1" class="java.lang.Integer" calculation="Sum"> 
        <measureExpression><![CDATA[$F{val}]]></measureExpression> 
       </measure> 
       <crosstabCell width="60" height="20"> 
        <cellContents mode="Opaque" style="Crosstab_CD"> 
         <textField isBlankWhenNull="false"> 
          <reportElement x="0" y="0" width="60" height="20" uuid="d207dcd9-1db6-4adb-a7ba-1b539fa06993"/> 
          <textFieldExpression><![CDATA[$V{val_MEASURE1}]]></textFieldExpression> 
         </textField> 
        </cellContents> 
       </crosstabCell> 
       <crosstabCell width="60" height="20" columnTotalGroup="month1"> 
        <cellContents mode="Opaque" style="Crosstab_CT"> 
         <textField> 
          <reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="59ff8664-202c-4ec7-966c-93c30b372202"/> 
          <textFieldExpression><![CDATA[$V{val_MEASURE1}]]></textFieldExpression> 
         </textField> 
        </cellContents> 
       </crosstabCell> 
       <crosstabCell width="60" height="20" rowTotalGroup="prod1"> 
        <cellContents mode="Opaque" style="Crosstab_CT"> 
         <textField> 
          <reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="686e7851-9a94-4cbe-aac1-60703fdfc049"/> 
          <textFieldExpression><![CDATA[$V{val_MEASURE1}]]></textFieldExpression> 
         </textField> 
        </cellContents> 
       </crosstabCell> 
       <crosstabCell width="60" height="20" rowTotalGroup="prod1" columnTotalGroup="month1"> 
        <cellContents mode="Opaque" style="Crosstab_CT"> 
         <textField> 
          <reportElement x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="acbe85bf-5cea-40d3-9951-cb0de8baa353"/> 
          <textFieldExpression><![CDATA[$V{val_MEASURE1}]]></textFieldExpression> 
         </textField> 
        </cellContents> 
       </crosstabCell> 
      </crosstab> 
     </band> 
    </summary> 
</jasperReport> 
+0

SQLまたはjavaレベルでフィルタアウトするのはどうですか? –

+0

どういう意味ですか?私はprod3を除外したくない、私はそれがレポートにあることを望む、ちょうどmon1とmon2の0を示しています。 – thotwielder

答えて

0

[OK]を、これが解決得ました。ジャスパーとは何の関係もありません(これは良いツールですが、正直言って、いくつかの機能が欠けています)。解決策は単にprod3に列グループと0の値を与えます。このキーは、Jasperがヌル・グループを生成できないように、任意のグループ・フィールドにヌル値を持たないだけです。この場合、既存のグループメンバー(mon1またはmon2)と0値のprod3値を与えます。実際のケースでは、これを達成するためにSQLを混乱させる必要がありますが、ジャスパーでハッキングするよりもずっと簡単です。

select 'prod1' as prod, 'mon1' as month, 1 as val 
     union all select 'prod1' as prod, 'mon2' as month, 1 as val 
     union all select 'prod2' as prod, 'mon1' as month, 1 as val 
     union all select 'prod2' as prod, 'mon2' as month, 1 as val 
     union all select 'prod3' as prod, 'mon1' as month, 0 as val 
関連する問題