Crystal 报告:如何制作包含月度、季度和年初至今字段总计的报告?

Crystal Reports: How to make a report with Monthly, Quarterly, and YTD field totals?

这是我正在使用的 table 的缩写示例:

Month ............ SiteID ........ Patients ....FundingSource.... Year
January ............ 1 ........... 13 .......... ABCD.......... 2019
February............ 1 ........... 223 ......... ABCD.......... 2019
February ........... 2 ........... 52 .......... ABCD.......... 2019
February ........... 3 ........... 21........... EFGH.......... 2018
March .............. 1 ........... 44 .......... EFGH.......... 2018
April .............. 1 ........... 12 .......... ABCD.......... 2019
May................. 1 ........... 34 .......... ABCD.......... 2018
May................. 1 ........... 51 .......... ABCD.......... 2019
June ............... 1 ............62 .......... EFGH.......... 2017

我正在尝试输出一份报告,显示根据给定参数就诊的每月、每季度和年初至今的患者总数。参数是 FundingSource、SiteID、Month 和 Year。因为报告应该看起来像一个表格,所以它必须将结果打印出一页 time/on。

编辑:季度总数应该是从 7 月到 6 月的财政季度。年列是日历年。

Patients 字段本身是一个字符串字段,表示当月就诊的患者数量。因此创建每月总计很容易,因为只需添加字段即可。

对于季度总计,我制作了一个 Cdbl 公式字段以将 table.Patients 转换为数字(它是我们数据库中的一个 nvarchar 字段——不能在 运行 中求和总字段),然后为该字段的每个季度创建一个 运行 总字段(通过使该 cdbl 字段评估 [January, February, March, April] 月份等,并在 SiteID 更改时重置)。然后我制作了另一个公式字段,它将输出相应的 运行 季度的总字段

例如

 IF month IN [January, February, March, April] then
{#PatientsSeenQ1}

我遇到的问题是,给定这些参数字段,季度结果最终与月度结果相同,因为 Month = ?Month 并且无法缩小以捕获其他月份四分之一。我认为这也是获取年初至今总计的问题。

我已经为这个问题苦苦思索了一段时间,所以非常感谢您的帮助!!这对我的工作来说是一个重要的问题,所以我一定会及时回复。

编辑:

我被要求像这样格式化输出(为了示例目的假设日历年季度):

Reporting Period: May 2019
Funding Source: ABCD
Site: 1

........................... Monthly ... Quarterly ..... YTD
Number of patients seen:..... 51 ........ 63........... 299

我不必报告每个站点、年份和月份,只需报告输入的站点、年份、资金来源和月份(参数)。输出应该是用户将在网站上查看的报告的 printable 版本。

编辑:

根据用户 heringer 的以下内容,我找到了解决问题的方法。今年年初至今,我得到了外部帮助,所以这是答案:

我创建了一个公式字段@FiscalYear 来确定年份:

IF {@RowMonthCDate} IN [7,8,9,10,11,12] and {@ParMonthCDate} IN [1,2,3,4,5,6] THEN toText((ToNumber({?Year})-1),"#")
ELSE IF {@RowMonthCDate} IN [1,2,3,4,5,6] and {@ParMonthCDate} IN [7,8,9,10,11,12] THEN toText((ToNumber({?Year})+1),"#")
ELSE toText((ToNumber({?Year})),"#")

然后对于 YTD 运行 总字段,我将其用于评估公式:

 {reporting_year} = {@FiscalYear} AND
(
     if  {@ParMonthCDate} = 7  then  {@RowMonthCDate} = 7
else if  {@ParMonthCDate} = 8  then  {@RowMonthCDate} in [7,8]
else if  {@ParMonthCDate} = 9  then  {@RowMonthCDate} in [7,8,9]
else if  {@ParMonthCDate} = 10 then  {@RowMonthCDate} in [7,8,9,10]
else if  {@ParMonthCDate} = 11 then  {@RowMonthCDate} in [7,8,9,10,11]
else if  {@ParMonthCDate} = 12 then  {@RowMonthCDate} in [7,8,9,10,11,12]

else if  {@ParMonthCDate} = 1 then {@RowMonthCDate} in [7,8,9,10,11,12,1]
else if  {@ParMonthCDate} = 2 then {@RowMonthCDate} in [7,8,9,10,11,12,1,2]
else if  {@ParMonthCDate} = 3 then {@RowMonthCDate} in [7,8,9,10,11,12,1,2,3]
else if  {@ParMonthCDate} = 4 then {@RowMonthCDate} in [7,8,9,10,11,12,1,2,3,4]
else if  {@ParMonthCDate} = 5 then {@RowMonthCDate} in [7,8,9,10,11,12,1,2,3,4,5]
else if  {@ParMonthCDate} = 6 then {@RowMonthCDate} in [7,8,9,10,11,12,1,2,3,4,5,6]
) 
AND
 {report.fundingsource} = {?FundingSource} AND
 {report.Site_id} = {?Site_ID}

可能不够优雅,但它为我提供了该会计年度参数月份的字段总计。再次感谢 heringer 与我一起为此工作了大约一周!

您可以创建一个公式来使用年份和月份(并考虑第 1 天)构建日期。

然后按照这个公式创建3组。

使用小组专家对每个小组进行年度、季度、月度

然后将简单的摘要字段放在组页脚上。

我不确定它是否适合您的最终设计。如果没有,请出示。

编辑:

在新的评论之后,这是一个新的有目的的解决方案。我将保留上面的旧版本以供进一步参考。

基于 com 评论,我假设该报告将显示一年、一个月、一个资金来源和一个站点 ID 的数据。

我知道你的起点是正确的。我会尽力帮助解决细节问题。

  1. 创建参数:{?Year}、{?Month}、{?FundingSource?}、{?SideId}。
  2. 创建 运行 总字段 {#PatientsInMonth} 以求和 {Table.Patients} 并使用此公式设置 "evaluate / use a formula":
{Table.Year} = {?Year} AND
{Table.Month} = {?Month} AND
{Table.FundingSource} = {?FundingSource} AND
{Table.SiteId} = {?SiteId}
  1. 创建 运行 总字段 {#PatientsInQuarter} 以求和 {Table.Patients} 并使用此公式设置 "evaluate / use a formula":
 numbervar rowNumberOfMonth := 0; //TODO i'm letting it up to you, since you said you did it
 numbervar parNumberOfMonth := 0; //TODO
 numbervar rowQuarter := (rowNumberOfMonth - 1) \ 4; //notice the integer divide, the symbol is not wrong
 numbervar parQuarter := (parNumberOfMonth - 1) \ 4; //notice the integer divide, the symbol is not wrong
 {Table.Year} = {?Year} AND
 rowQuarter = parQuarter AND
 {Table.FundingSource} = {?FundingSource} AND
 {Table.SiteId} = {?SiteId}
  1. 创建 运行 总字段 {#PatientsInYear} 以求和 {Table.Patients} 并使用此公式设置 "evaluate / use a formula":
 {Table.Year} = {?Year} AND
 {Table.FundingSource} = {?FundingSource} AND
 {Table.SiteId} = {?SiteId}
  1. 将 运行 个总字段放在报表页脚中。