Crystal reports Crystal报表中的条件不同计数

Crystal reports Crystal报表中的条件不同计数,crystal-reports,formula,crystal-reports-2010,summary,Crystal Reports,Formula,Crystal Reports 2010,Summary,我有这样一个数据集: ID PersonID ClassID Attended Converted 1 1 1 1 0 2 1 1 1 1 3 1 1 1 1 4 2 1 1 1 5 3

我有这样一个数据集:

ID    PersonID    ClassID    Attended    Converted
1     1           1          1           0
2     1           1          1           1
3     1           1          1           1
4     2           1          1           1
5     3           2          0           0
6     3           2          1           1
7     4           2          1           0
ID    PersonID    Attended    Converted
CLASS 1 GROUP
1     1           1           0
2     1           1           1
3     1           1           1
4     2           1           1

Percent= 2/4 = 50%

CLASS 2 GROUP
5     3           0           0
6     3           1           1
7     4           1           0

Percent= 1/2 = 50%
我正在构建一个按ClassID分组的报告(实际上我使用了一个参数,该参数允许在几个不同的列上进行分组,但为了简单起见,我只使用ClassID)。我需要在每组页脚中进行计算。为了进行计算,我需要使用该组特有的personid来计算记录。在一种情况下,问题是这些记录还需要符合标准。例如:

X = [Count of records where Converted = 1 with distinct PersonID]
Y = [Count of records where Attended = 1]
然后我需要以百分比的形式显示商:

(X/Y)*100
if {@fY} = 0 then 0
else ({@fX}/{@fY})*100
所以最终报告应该是这样的:

ID    PersonID    ClassID    Attended    Converted
1     1           1          1           0
2     1           1          1           1
3     1           1          1           1
4     2           1          1           1
5     3           2          0           0
6     3           2          1           1
7     4           2          1           0
ID    PersonID    Attended    Converted
CLASS 1 GROUP
1     1           1           0
2     1           1           1
3     1           1           1
4     2           1           1

Percent= 2/4 = 50%

CLASS 2 GROUP
5     3           0           0
6     3           1           1
7     4           1           0

Percent= 1/2 = 50%

请注意,在类别1组中,有3条记录的Converted=1,但“X”(分子)由于PersonID重复而等于2。如何在Crystal Reports中计算此值?

我必须创建一些不同的公式,以便在的帮助下使其工作

首先,我按照该站点的建议创建了一个名为fNull的函数,该函数为空。我想知道在它的位置键入null是否可以完成这项工作,但没有进行测试。接下来,我创建了公式来评估一行是否有人参与以及一行是否被转换

FTRIALAT:

//Allows row to be counted if AttendedTrial is true
if {ConversionData.AttendedTrial} = true
then CStr({ConversionData.PersonID})
else {@fNull}
fTrialsConverted:

//Allows row to be counted if Converted is true
if {ConversionData.Converted} = true
then CStr({ConversionData.PersonID})
else {@fNull}
请注意,如果出席或转换为true,我将返回PersonID。这让我可以在下一个公式中进行不同的计数(原始问题的X):

外汇:

这将放置在组页脚中。再次请记住@fTrialsConverted返回的是已转换的试用人名(或fNull,不计算在内)。我不明白的一件事是,如果group by字段(ClassID)在group footer中,为什么我必须显式地包含它,但我这样做了,否则它会计算所有组的总数。接下来,Y只是一个直截了当的数字

财政年度:

最后是计算百分比的公式:

(X/Y)*100
if {@fY} = 0 then 0
else ({@fX}/{@fY})*100
我最后要分享的是,我还想计算报表页脚中所有组的总数。计算总Y很容易,它与fY公式相同,只是您省略了group by参数。计算总X更为复杂,因为我需要每组X的总和,而Crystal无法求另一个总和。因此,我更新了我的X公式,以便在全局变量中保留一个运行总数:

外汇:


现在我可以在页脚中使用rtConverted进行计算。这导致了另一件让我困惑的事情,我花了几个小时才弄明白。在我明确添加global关键字之前,rtConverted没有被视为全局变量,尽管我看到的所有文档都说global是默认值。一旦我弄明白了这一点,一切都很顺利。

若第5行的ClassID值为“1”,则分组是错误的。我希望应该是“2”!!抢手货我已经更新了源数据。感谢+1提供了非常详细的解决方案!谢谢你帮我省了几个小时的时间headaches@MPaul这是一个相当具体的问题。我很高兴有人能帮上忙!