JasperReports ошибка с набором подданных

#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 предлагает в качестве опции источник данных под названием «Одна пустая запись». Это также может быть полезно для ваших целей.