gpt4 book ai didi

perl - 如何在报告中进行拆分和小计?

转载 作者:行者123 更新时间:2023-12-05 00:06:23 25 4
gpt4 key购买 nike

我需要使用 perl + Template Toookit 和 LaTeX 生成业务报告。

一切正常,但每当字段发生变化时,我都会遇到中断(例如分页符或特殊标题)和小计的问题。

因此,例如,每次“类别”字段发生变化时,我都需要该类别的总销售额,以及显示另一个类别列表正在开始的标题;然后在字段“组”时执行相同的操作 - 增加了“组”由类别组成的兴趣,因此这两件事应该嵌套。

我想任何使用 Microsoft Access(或可能任何其他业务报告应用程序)构建报告的人都应该熟悉这个问题。

理想情况下,这将在元级别解决,因此我不必每次都重新构建代码,而只需指定哪些字段应生成分割或小计。

我(自愿)受制于 LaTeX 和 TT:LaTeX 因为它可以控制排版,并且可以生成自定义图形,而 TT(或任何其他在 perl 中工作的东西)因为学习曲线。

最佳答案

TT 中没有内置的小计功能,但您可以将数据放入 Data::Table 中对象,这将使您能够像您所说的那样在“元”级别处理小计。

不过,根据涉及的列数,创建本地散列以维护运行总计可能同样简单:注意:未经测试,仅示例代码

[%-
MACRO printrow(rowtype, line) BLOCK;
# however you print the row as LaTeX
# rowtype is 'row', 'subtotal' or 'grandtotal' for formatting purposes
END;

SET sumcols = [ 'col3', 'col4', 'col5' ]; # cols to be accumulated
SET s_tot = {}; SET g_tot = {};
FOREACH i IN sumcols;
SET s_tot.$i = 0; # initialise
SET g_tot.$i = 0;
END;

FOREACH row IN data;
IF s_tot.col2 AND s_tot.col2 <> row.col2; # start of new group
printrow('subtotal', s_tot);
FOREACH i IN sumcols;
SET s_tot.$i = 0; #re-init
END;
END;
printrow('row', row);
SET s_tot.col2 = row.col2; # keep track of group level

FOREACH i IN sumcols;
SET s_tot.$i = s_tot.$i + row.$i;
SET g_tot.$i = g_tot.$i + row.$i;
END;
END;
printrow('grandtotal', g_tot);
-%]

当然,如果您有多个分组级别,这可能会变得非常困惑。您可以使 s_tot 成为一个哈希数组来管理每个级别,以避免对级别进行硬编码。正如他们所说,这留给读者作为练习。

关于perl - 如何在报告中进行拆分和小计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21774587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com