jasper 中的交叉表仅显示输入的第一列 json

crosstab in jasper displays only the first column from input json

我的json如下

  "values": [
   {
            "purchase": {
                "name":"bags"
                },
                  "weekSpend": [
                    { 
                        "weekStartDate": 20181105,
                        "spend":100

                    },
                    {
                        "weekStartDate": 20181112,
                        "spend":200

                    }
                ]
    },
     {
            "purchase": {
                "name":"shoes"
                },
                  "weekSpend": [
                    { 
                        "weekStartDate": 20181105,
                        "spend":100

                    },
                    {
                        "weekStartDate": 20181112,
                        "spend":200

                    }
                ]
    },
   ]

我想显示行所在的网格 产品名称和(按周开始日期列)

我遵循了

中提供的技巧

然而,产品名称列在行中,但列仅显示第一列。

我的数据集如下

<queryString language="jsonql">
    <![CDATA[]]>
</queryString>
<field name="productName" class="java.lang.String">
    <property name="net.sf.jasperreports.jsonql.field.expression" value="product.name"/>
    <fieldDescription><![CDATA[product.name]]></fieldDescription>
</field>
<field name="weekStartDate" class="java.lang.String[]">
    <property name="net.sf.jasperreports.jsonql.field.expression" value="weekSpend.weekStartDate"/>
</field>
<group name="activityDateGroup">
    <groupExpression><![CDATA[$F{weekStartDate}]]></groupExpression>
</group>

我的crossdata数据源如下

        <crosstabDataset isDataPreSorted="true">
            <dataset>
                <datasetRun subDataset="crossTabDataSet" uuid="e7b27508-8a48-4785-a48e-c646249df9a9">
                    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("..values(@size > 0).*")]]></dataSourceExpression>
                </datasetRun>
            </dataset>
        </crosstabDataset>

并且 bucketexpression 在 weekstartdate。

使用 JsonQL 仍然只显示第一列

如何从根节点迭代获取基于星期日期的列列表。

我正在使用 jasper studio 6.5。

谢谢 安佳娜。

存在无效的字段映射:weekStartDatejava.lang.String[],JSONQL 不支持它。

相反,您可以使用此子数据集表达式:

<datasetRun subDataset="crossTabDataSet" uuid="e7b27508-8a48-4785-a48e-c646249df9a9">
    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("..values(@size > 0)..weekSpend.*")]]></dataSourceExpression>
</datasetRun>

使用这些字段映射:

<field name="productName" class="java.lang.String">
    <property name="net.sf.jasperreports.jsonql.field.expression" value="^{2}.purchase.name"/>
</field>
<field name="weekStartDate" class="java.lang.Integer">
    <property name="net.sf.jasperreports.jsonql.field.expression" value="weekStartDate"/>
</field>