Как добавить итоговую строку в Birt? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть набор данных, который отображает имя и значение и сортируется по имени.

Как добавить строку к сумме в отчете birt? Как то так.

    <b>Name  |  Val</b>
    ABC   |   3
    ABC   |   2
    ABC   |   1
    <b>Total |   6</b>
    DEF   |   3
    DEF   |   2
    <b>Total |   5</b>

Я попытался сделать это, сгруппировав столбец Имя, но вывод показывает, как это.

    <b>Name  |  Val</b>
    ABC   |   3
    ABC   |   2
    ABC   |   1
    <b>Total |   6</b>

    <b>Name  |  Val</b>
    DEF   |   3
    DEF   |   2
    <b>Total |   5</b>

Ответы [ 2 ]

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

Хотя ответ Тима технически верен, вам не нужно создавать такие данные в SQL, особенно это не будет красиво во время форматирования (у вас будет много if (name == "Total" || name == "Grand Total") и т. Д.

В таблицах BIRT есть вещи, называемые groups. Вы можете сказать, что вы группируете по имени, и у каждой группы может быть свой верхний и / или нижний колонтитулы. Вы выбираете нижний колонтитул и устанавливаете общее количество там.

Подробнее можно прочитать здесь: https://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.birt.doc%2Fbirt%2Fsg-DisplayTheTotalNumberOfCustomersInTheReport.html (см. Рис. 7-12)

0 голосов
/ 03 сентября 2018

Вы можете попробовать сделать GROUP BY с ROLLUP:

WITH cte AS (
    SELECT Name AS OrigName, SUM(Val) AS Val,
        ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY SUM(Val) DESC) rn
    FROM yourTable
    GROUP BY ROLLUP(Name, Val)
)

SELECT
    CASE WHEN rn=1 AND OrigName IS NOT NULL THEN 'Total'
         WHEN OrigName IS NULL THEN 'Grand Total'
         ELSE OrigName END AS NAME,
    Val
FROM cte
ORDER BY
    OrigName, Val;

enter image description here

Демо

...