Кросс-таблица в Джаспере отображает только первый столбец из ввода 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

                    }
                ]
    },
   ]

Я хочу, чтобы отобразить сетку, где строки являются именем продукта и (столбцы по неделям)

Я следовал методике, приведенной в разделе Как показать столбец в Crosstab, даже если данные отсутствуют

Однако название продукта указано в строке, а столбец показывает только первый столбец.

мой набор данных выглядит следующим образом

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

мой источник данных кросс-данных выглядит следующим образом

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

и экспрессия гайки находится на недельной давности.

При использовании JsonQL по-прежнему отображается только первый столбец.

Как мне получить список столбцов на основе weekstardate от итерации от rootnode.

Я использую Jasper Studio 6.5.

Спасибо, Анжана.

1 ответ

Решение

Недопустимое отображение поля: weekStartDate в java.lang.String[], это не поддерживается в JSONQL.

Вместо этого вы можете иметь это выражение 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>
Другие вопросы по тегам