【问题标题】:How to hide row group in a Crosstab?如何在交叉表中隐藏行组?
【发布时间】:2018-12-09 01:48:39
【问题描述】:

我正在使用 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
2, 2

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

        prod a, prod b
channel a   1, 1
channel b   1, 1

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    问题 1:我想生成一个没有行组的交叉表。有可能吗?

    是的,这是可能的。您可以使用行组中的任何字段创建交叉表,然后更改 Bucket 表达式。如果在表达式中使用某个常量,则所有行都会有一组。

    之后,您可以为所有不使用的单元格设置 width/height 属性和 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 中单元格的宽度和高度。

    输出结果

    我使用Studio的预览模式对输出结果进行拍照。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多