Jasper reports 如何在交叉表中隐藏行组?

Jasper reports 如何在交叉表中隐藏行组?,jasper-reports,Jasper Reports,我正在使用Jaspersoft Studio 6。我有这样一个数据集: sales channel, product, amount channel a, prod a, 1 channel a, prod b, 1 channel b, prod a, 1 channel b, prod b, 1 我想生成这样一个交叉表(或任何可以这样做的组件)(2是您可以猜到的每个产品的总数量) 因此,基本上是一个没有行组的交叉表,我尝试创建一个交叉表,销售渠道作为行组,产品作为列组,然后删除行组,但报告

我正在使用Jaspersoft Studio 6。我有这样一个数据集:

sales channel, product, amount
channel a, prod a, 1
channel a, prod b, 1
channel b, prod a, 1
channel b, prod b, 1
我想生成这样一个交叉表(或任何可以这样做的组件)(2是您可以猜到的每个产品的总数量)

因此,基本上是一个没有行组的交叉表,我尝试创建一个交叉表,销售渠道作为行组,产品作为列组,然后删除行组,但报告无法编译。我没有为它创建专用数据集的原因是,我还需要在同一个报告中显示此交叉表(如下所示),因此考虑对两个表使用相同的数据集,这可能吗

        prod a, prod b
channel a   1, 1
channel b   1, 1
问题1:我想生成一个没有行组的交叉表。可能吗? 是的,这是可能的。您可以使用行组中的任何字段创建交叉表,然后更改Bucket表达式。在表达式中使用某个常量的情况下,所有行都有一个组

之后,您可以为所有不需要显示的单元格设置宽度/高度属性,设置值为0。此技巧允许您隐藏所有不需要的单元格

问题2:我可以为不同的交叉表只使用一个数据集吗? 是的,您可以对示例中的两个交叉表使用单个数据源

工作示例 数据来源 我使用了csv数据源

sales channel, product, amount
channel a, prod a, 1
channel a, prod b, 1
channel b, prod a, 1
channel b, prod b, 1
下面示例中此数据源的数据适配器名称为channels.csv.xml

报告模板 我使用Studio设计了一个报告模板。保留模板中的样式以使报表更具吸引力

<?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="crosstab_wout_row_group" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="5edd462e-9135-43d5-a3d2-552c8663900a">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <style name="Crosstab_CH" mode="Opaque" backcolor="#F0F8FF" hTextAlign="Center" vTextAlign="Middle">
        <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_CG" mode="Opaque" backcolor="#BFE1FF" hTextAlign="Center" vTextAlign="Middle">
        <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" hTextAlign="Center" vTextAlign="Middle">
        <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" hTextAlign="Center" vTextAlign="Middle">
        <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>
    <subDataset name="channelsDS" uuid="ad122c55-8366-4f20-b070-a8d40614c7c5">
        <property name="net.sf.jasperreports.data.adapter" value="channels.csv.xml"/>
        <queryString>
            <![CDATA[]]>
        </queryString>
        <field name="sales channel" class="java.lang.String"/>
        <field name="product" class="java.lang.String"/>
        <field name="amount" class="java.lang.Integer"/>
    </subDataset>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <title>
        <band height="708">
            <crosstab ignoreWidth="true">
                <reportElement x="0" y="10" width="186" height="50" uuid="bad8b778-d3b7-426f-b5fe-ff15218f1df6">
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
                </reportElement>
                <crosstabDataset>
                    <dataset>
                        <datasetRun subDataset="channelsDS" uuid="fe18e49c-7b5f-4644-8821-6a5ece2305cf">
                            <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRCsvDataSource("c:\\path\\chanels.csv")]]></dataSourceExpression>
                        </datasetRun>
                    </dataset>
                </crosstabDataset>
                <rowGroup name="all" width="0" totalPosition="End">
                    <bucket class="java.lang.String">
                        <bucketExpression><![CDATA["1"]]></bucketExpression>
                    </bucket>
                    <crosstabRowHeader>
                        <cellContents mode="Opaque" style="Crosstab_CH"/>
                    </crosstabRowHeader>
                    <crosstabTotalRowHeader>
                        <cellContents mode="Opaque" style="Crosstab_CT"/>
                    </crosstabTotalRowHeader>
                </rowGroup>
                <columnGroup name="product" height="20" totalPosition="End">
                    <bucket class="java.lang.String">
                        <bucketExpression><![CDATA[$F{product}]]></bucketExpression>
                    </bucket>
                    <crosstabColumnHeader>
                        <cellContents mode="Opaque" style="Crosstab_CH">
                            <textField>
                                <reportElement style="Crosstab_CH" x="0" y="0" width="60" height="20" uuid="ad62e573-acbd-4e01-a339-d4611a6593d4"/>
                                <textFieldExpression><![CDATA[$V{product}]]></textFieldExpression>
                            </textField>
                        </cellContents>
                    </crosstabColumnHeader>
                    <crosstabTotalColumnHeader>
                        <cellContents mode="Opaque" style="Crosstab_CT"/>
                    </crosstabTotalColumnHeader>
                </columnGroup>
                <measure name="sum" class="java.lang.Integer" calculation="Sum">
                    <measureExpression><![CDATA[$F{amount}]]></measureExpression>
                </measure>
                <crosstabCell width="60" height="20">
                    <cellContents mode="Opaque" style="Crosstab_CD">
                        <textField>
                            <reportElement style="Crosstab_CD" x="0" y="0" width="60" height="20" uuid="64c93e0c-c740-41f7-9ad2-a98f32a34f12"/>
                            <textFieldExpression><![CDATA[$V{sum}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
                <crosstabCell width="0" height="20" columnTotalGroup="product">
                    <cellContents mode="Opaque" style="Crosstab_CT"/>
                </crosstabCell>
                <crosstabCell width="60" height="0" rowTotalGroup="all">
                    <cellContents mode="Opaque" style="Crosstab_CT"/>
                </crosstabCell>
                <crosstabCell width="0" height="0" rowTotalGroup="all" columnTotalGroup="product">
                    <cellContents mode="Opaque" style="Crosstab_CT"/>
                </crosstabCell>
            </crosstab>
            <crosstab ignoreWidth="true">
                <reportElement x="200" y="10" width="186" height="70" uuid="371e42fa-6c78-45bc-b7c7-5efc8f97c789">
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
                </reportElement>
                <crosstabDataset>
                    <dataset>
                        <datasetRun subDataset="channelsDS" uuid="a9518e47-0662-4b8a-96bf-876220cbfe3c">
                            <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRCsvDataSource("c:\\path\\chanels.csv")]]></dataSourceExpression>
                        </datasetRun>
                    </dataset>
                </crosstabDataset>
                <rowGroup name="channel" width="60" totalPosition="End">
                    <bucket class="java.lang.String">
                        <bucketExpression><![CDATA[$F{sales channel}]]></bucketExpression>
                    </bucket>
                    <crosstabRowHeader>
                        <cellContents mode="Opaque" style="Crosstab_CH">
                            <textField>
                                <reportElement key="" style="Crosstab_CH" x="0" y="0" width="60" height="20" uuid="52e76a1c-73cd-4380-a0c1-1a5a43796992"/>
                                <textFieldExpression><![CDATA[$V{channel}]]></textFieldExpression>
                            </textField>
                        </cellContents>
                    </crosstabRowHeader>
                    <crosstabTotalRowHeader>
                        <cellContents mode="Opaque" style="Crosstab_CT">
                            <staticText>
                                <reportElement style="Crosstab_CT" x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="d65fc01b-5f52-478e-97c5-005c50bed918"/>
                                <text><![CDATA[Total]]></text>
                            </staticText>
                        </cellContents>
                    </crosstabTotalRowHeader>
                </rowGroup>
                <columnGroup name="product" height="20" totalPosition="End">
                    <bucket class="java.lang.String">
                        <bucketExpression><![CDATA[$F{product}]]></bucketExpression>
                    </bucket>
                    <crosstabColumnHeader>
                        <cellContents mode="Opaque" style="Crosstab_CH">
                            <textField>
                                <reportElement style="Crosstab_CH" x="0" y="0" width="60" height="20" uuid="006f5601-cda6-42d1-a5c8-ce4e6c6b2ce7"/>
                                <textFieldExpression><![CDATA[$V{product}]]></textFieldExpression>
                            </textField>
                        </cellContents>
                    </crosstabColumnHeader>
                    <crosstabTotalColumnHeader>
                        <cellContents mode="Opaque" style="Crosstab_CT">
                            <staticText>
                                <reportElement style="Crosstab_CT" x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="cb16eb49-0945-46bc-9e6f-9a83296b8293"/>
                                <text><![CDATA[Total]]></text>
                            </staticText>
                        </cellContents>
                    </crosstabTotalColumnHeader>
                </columnGroup>
                <measure name="amount_MEASURE" class="java.lang.Integer" calculation="Sum">
                    <measureExpression><![CDATA[$F{amount}]]></measureExpression>
                </measure>
                <crosstabCell width="60" height="20">
                    <cellContents mode="Opaque" style="Crosstab_CD">
                        <textField>
                            <reportElement style="Crosstab_CD" x="0" y="0" width="60" height="20" uuid="10e01814-0960-4522-99d6-dc2e37eb9a8e"/>
                            <textFieldExpression><![CDATA[$V{amount_MEASURE}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
                <crosstabCell width="60" height="20" columnTotalGroup="product">
                    <cellContents mode="Opaque" style="Crosstab_CT">
                        <textField>
                            <reportElement style="Crosstab_CT" x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="34e42b3b-5b34-4ed3-888a-4925d56f37aa"/>
                            <textFieldExpression><![CDATA[$V{amount_MEASURE}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
                <crosstabCell width="60" height="20" rowTotalGroup="channel">
                    <cellContents mode="Opaque" style="Crosstab_CT">
                        <textField>
                            <reportElement style="Crosstab_CT" x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="7464296e-2f2b-467c-8700-616d0cb6bc0d"/>
                            <textFieldExpression><![CDATA[$V{amount_MEASURE}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
                <crosstabCell width="60" height="20" rowTotalGroup="channel" columnTotalGroup="product">
                    <cellContents mode="Opaque" style="Crosstab_CT">
                        <textField>
                            <reportElement style="Crosstab_CT" x="0" y="0" width="60" height="20" forecolor="#FFFFFF" uuid="f248de34-9e48-4b9b-bc9f-dbe95acba86d"/>
                            <textFieldExpression><![CDATA[$V{amount_MEASURE}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
            </crosstab>
        </band>
    </title>
</jasperReport>

此模板中有两个交叉表:第一个交叉表不包含行组和不需要的单元格,第二个交叉表同时包含组和所有单元格(默认情况下)

我使用这个bucket表达式将所有频道“连接”到一个组中

<bucket class="java.lang.String">
    <bucketExpression><![CDATA["1"]]></bucketExpression>
</bucket>

例如,您可以在Studio的帮助下更改此表达式

我也改变了工作室中单元格的宽度和高度

输出结果 我使用Studio的预览模式拍摄输出结果的照片


谢谢!你能回答我的另一个问题吗?
<bucket class="java.lang.String">
    <bucketExpression><![CDATA["1"]]></bucketExpression>
</bucket>