Кросс-таблица в Джаспере отображает только первый столбец из ввода JSON - PullRequest
0 голосов
/ 12 ноября 2018

мой 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 по-прежнему отображается только первый столбец

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

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

Спасибо Anjana.

1 Ответ

0 голосов
/ 12 ноября 2018

Недопустимое отображение поля: 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>
...