#jasper-reports
#jasper-отчеты
Вопрос:
Я сталкиваюсь с очень проблематичным поведением, которое полностью противоречит цели использования вспомогательных наборов данных.
Всякий раз, когда я просто объявляю набор подданных:
<subDataset name="dataset1" uuid="b8a31d7f-9906-4db0-ac81-155091b1817a">
<parameter name="Parameter3" class="java.lang.String">
<defaultValueExpression><![CDATA["SELECT country, count(*) AS number_of_sites FROM sites GROUP BY country ORDER BY number_of_sites DESC LIMIT 5"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[$P{Parameter3}]]>
</queryString>
<field name="country" class="java.lang.String"/>
<field name="number_of_sites" class="java.lang.Long"/>
</subDataset>
и используйте это в гистограмме (или, если быть точным, в столбчатой диаграмме, но это не имеет значения) :
<categoryDataset>
<dataset>
<datasetRun subDataset="dataset1" uuid="0a388bb3-2e57-4880-9b48-27e0a2afd415"/>
</dataset>
<categorySeries>
<seriesExpression><![CDATA[$F{country}]]></seriesExpression>
<categoryExpression><![CDATA[$F{country}]]></categoryExpression>
<valueExpression><![CDATA[$F{number_of_sites}]]></valueExpression>
<labelExpression><![CDATA[$F{number_of_sites}.toString()]]></labelExpression>
</categorySeries>
</categoryDataset>
В результате я получаю пустой документ, я на 100% уверен, что адаптер отчетов работает правильно. Поэтому, чтобы запустить это и получить результаты, мне по какой-то причине нужно дополнительно включить повторяющиеся записи:
<parameter name="Parameter3" class="java.lang.String">
<defaultValueExpression><![CDATA["SELECT country, count(*) AS number_of_sites FROM sites GROUP BY country ORDER BY number_of_sites DESC LIMIT 5"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[$P{Parameter3}]]>
</queryString>
Это добавлено где-то за пределами блока набора подданных в JRXML. Это снова приводит меня в отчаяние, поскольку я столкнулся с таким количеством ошибок jasper или несоответствий в дизайне. Если основной запрос должен соответствовать набору подданных, то это сводит на нет цель множественного запроса внутри отчета. В моем случае мне даже не нужен основной запрос отчета, я хочу иметь много наборов подданных, у каждого из которых есть свой собственный запрос.
Я играл с подключением к отчету, это ничего не меняет, результаты возвращаются только тогда, когда основной запрос соответствует запросу набора подданных вместе с параметризацией. Если какой-либо из 4 компонентов не соответствует — либо не удается сгенерировать отчет, либо возвращается пустой документ.
Я играл с uuid, чтобы они совпадали, что не имеет никакого значения.
Комментарии:
1. Если вы используете что-то вроде «выберите 1» в качестве запроса для вашего основного набора данных, сработает ли это? Я полагаю, что среда Jasper Reports не создала бы никаких групп (для вашего основного отчета), если у вас нет запроса к вашему основному набору данных.
2. Вы правы, опубликуйте это как ответ, и я приму его.
Ответ №1:
Я полагаю, что среда Jasper Reports не создала бы никаких групп (для вашего основного отчета), если у вас нет запроса к вашему основному набору данных.
Вы можете попробовать что-то вроде «выбрать 1 как фиктивный» для вашего запроса, например.
Jaspersoft Studio предлагает в качестве опции источник данных под названием «Одна пустая запись». Это также может быть полезно для ваших целей.