1

我的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

                    }
                ]
    },
   ]

我想显示行是产品名称和(按weekstartdate的列)的网格

我遵循了如何在交叉表中显示列中提供的技术,即使数据不存在

但是,产品名称在行中列出,但该列仅显示第一列。

我的数据集如下

<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 时,仍然只显示第一列

如何从 rootnode 迭代中获取基于 weekstardate 的列列表。

我正在使用碧玉工作室 6.5。

谢谢安佳娜。

4

1 回答 1

0

JSONQL 不支持无效的字段映射:weekStartDateto 。java.lang.String[]

相反,你可以有这个 subDataset 表达式:

<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>
于 2018-11-12T10:47:23.637 回答