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