Crystal 报告 -- 将多行合并为一行
Crystal Reports -- combine multiple rows into one row
示例:
RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 1 ...............Hockey
1 .................. James ................. 2 ...............Football
2 .................. Jose .................. 5 ...............Basketball
3 .................. Jennifer .............. 2 ...............Football
3 .................. Jennifer .............. 4 ...............Dodgeball
4 .................. Jaqueline ............. 1 ...............Hockey
4 .................. Jaqueline ............. 3 ...............Baseball
4 .................. Jaqueline ............. 5 ...............Basketball
5 .................. John .................. 6 ...............Track
大家好,我正在尝试制作一份报告,根据我在参数字段中输入的 RecordID,输出特定 RecordID 的单页数据。为了实现这一点,我在报告中为 RecordID 创建了一个参数字段,并为 RecordID 创建了一个组,到目前为止,其他 tables 的数据都很好(其中的安排如 "First name", "last name", 等等, 对于给定的 RecordID).
到目前为止一切都很好,因为这个特定 table 的数据安排与其他人不同。
我的问题是,报告总是每页只输出一个结果,而不是一次输出所有结果;因此,对于 James 示例,我只在第一页选中 "Hockey" 框,然后在第二页仅选中 "Football" 框,依此类推。
我希望此 table 的输出显示如下(对于 RecordID=1):
James:
[checkbox] Hockey.................. [empty checkbox] Dodgeball
[checkbox] Football................ [empty checkbox] Basketball
[empty checkbox] Baseball.......... [empty checkbox] Track
这就是我制作复选框的方式(设置为 Wingdings 字体):
If {RecordID} = 1 Then
Chr(254)
Else
Chr(111)
谁能帮我解决这个问题?
编辑这是我老板尝试的解决方案(目前不起作用):
为每个运动声明一个变量
Shared BooleanVar Hockey:=False;
Shared BooleanVar Football:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Baseball:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Track:=False;
这对于每个变量:
Shared BooleanVar Hockey;
If {SportID} = 1 Then
Sport=True
这是复选框:
Shared BooleanVar Hockey;
If Hockey = True Then
Chr(254)
如果我理解的话,你的结构是这样的:
按 RecordId 分组
按 SportId 分组
包含所有复选框的详细信息部分
因此,报告选择 RecordId 1,然后选择 SportId 1。因此,第一次出现的详细信息部分的数据是:
RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 1 ...............Hockey
然后,继续RecordId 1,选择下一个SportId,也就是2。所以,details部分第一次出现的数据是:
RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 2 ...............Football
然后,报告选择下一个 RecordId (2),并选择下一个 SportId (5)。因此,详细信息部分中第一次出现的数据是:
RecordID ............ MemberName ........... SportID ......... Sport
2 .................. Jose .................. 5 ...............Basketball
你能看到现在发生了什么吗? (如果我理解你的话)。
它将始终以这种方式检查一项运动。
我会尝试以下解决方案。如果你只有这 6 项运动,那么你知道运动是有效的。
- 仅按 RecordId 分组。按 SportId 删除群组。
- 将复选框放在组页脚中。
- 计算每项运动的出现次数。每项运动使用一个 运行 总字段。当 RecordId 改变时记得重新设置。
- 当一项运动的计数器大于零时,使用公式检查每项运动的复选框。
如果您在 运行 总字段方面需要帮助,或者我误解了问题,请告诉我。
已编辑:如何创建 运行 总字段(第 3 步)
- 在 "Field Explorer" 上,右键单击 "Running Total Fields",然后单击 "New..."。
- 给它最好的名字(是的,名字很重要):例如"HockeyCounter"。
- 设置"Field to Summarize" = "SportId".
- 设置"Type of Summary" = "Count".
- 使用公式按钮设置"Evaluate":
{YourTableName.SportID} = 1 //where 1 is the Hockey SportId
- 设置"Reset" = "on change of group", "group #1" (RecordId).
- 将全新的 运行 总计字段拖到第 1 组页脚部分。
- 对其他运动重复这些步骤(抱歉,那会很无聊)。
我不确定它是否对您有帮助,但您可以查看 this post 了解更多有关 运行 总字段的信息。
示例:
RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 1 ...............Hockey
1 .................. James ................. 2 ...............Football
2 .................. Jose .................. 5 ...............Basketball
3 .................. Jennifer .............. 2 ...............Football
3 .................. Jennifer .............. 4 ...............Dodgeball
4 .................. Jaqueline ............. 1 ...............Hockey
4 .................. Jaqueline ............. 3 ...............Baseball
4 .................. Jaqueline ............. 5 ...............Basketball
5 .................. John .................. 6 ...............Track
大家好,我正在尝试制作一份报告,根据我在参数字段中输入的 RecordID,输出特定 RecordID 的单页数据。为了实现这一点,我在报告中为 RecordID 创建了一个参数字段,并为 RecordID 创建了一个组,到目前为止,其他 tables 的数据都很好(其中的安排如 "First name", "last name", 等等, 对于给定的 RecordID).
到目前为止一切都很好,因为这个特定 table 的数据安排与其他人不同。
我的问题是,报告总是每页只输出一个结果,而不是一次输出所有结果;因此,对于 James 示例,我只在第一页选中 "Hockey" 框,然后在第二页仅选中 "Football" 框,依此类推。
我希望此 table 的输出显示如下(对于 RecordID=1):
James:
[checkbox] Hockey.................. [empty checkbox] Dodgeball
[checkbox] Football................ [empty checkbox] Basketball
[empty checkbox] Baseball.......... [empty checkbox] Track
这就是我制作复选框的方式(设置为 Wingdings 字体):
If {RecordID} = 1 Then
Chr(254)
Else
Chr(111)
谁能帮我解决这个问题?
编辑这是我老板尝试的解决方案(目前不起作用):
为每个运动声明一个变量
Shared BooleanVar Hockey:=False;
Shared BooleanVar Football:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Baseball:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Track:=False;
这对于每个变量:
Shared BooleanVar Hockey;
If {SportID} = 1 Then
Sport=True
这是复选框:
Shared BooleanVar Hockey;
If Hockey = True Then
Chr(254)
如果我理解的话,你的结构是这样的:
按 RecordId 分组 按 SportId 分组 包含所有复选框的详细信息部分
因此,报告选择 RecordId 1,然后选择 SportId 1。因此,第一次出现的详细信息部分的数据是:
RecordID ............ MemberName ........... SportID ......... Sport 1 .................. James ................. 1 ...............Hockey
然后,继续RecordId 1,选择下一个SportId,也就是2。所以,details部分第一次出现的数据是:
RecordID ............ MemberName ........... SportID ......... Sport 1 .................. James ................. 2 ...............Football
然后,报告选择下一个 RecordId (2),并选择下一个 SportId (5)。因此,详细信息部分中第一次出现的数据是:
RecordID ............ MemberName ........... SportID ......... Sport 2 .................. Jose .................. 5 ...............Basketball
你能看到现在发生了什么吗? (如果我理解你的话)。
它将始终以这种方式检查一项运动。
我会尝试以下解决方案。如果你只有这 6 项运动,那么你知道运动是有效的。
- 仅按 RecordId 分组。按 SportId 删除群组。
- 将复选框放在组页脚中。
- 计算每项运动的出现次数。每项运动使用一个 运行 总字段。当 RecordId 改变时记得重新设置。
- 当一项运动的计数器大于零时,使用公式检查每项运动的复选框。
如果您在 运行 总字段方面需要帮助,或者我误解了问题,请告诉我。
已编辑:如何创建 运行 总字段(第 3 步)
- 在 "Field Explorer" 上,右键单击 "Running Total Fields",然后单击 "New..."。
- 给它最好的名字(是的,名字很重要):例如"HockeyCounter"。
- 设置"Field to Summarize" = "SportId".
- 设置"Type of Summary" = "Count".
- 使用公式按钮设置"Evaluate":
{YourTableName.SportID} = 1 //where 1 is the Hockey SportId
- 设置"Reset" = "on change of group", "group #1" (RecordId).
- 将全新的 运行 总计字段拖到第 1 组页脚部分。
- 对其他运动重复这些步骤(抱歉,那会很无聊)。
我不确定它是否对您有帮助,但您可以查看 this post 了解更多有关 运行 总字段的信息。