Crystal Reports:在满足其他特定条件的情况下提取数据点的公式



我确信这是一个非常简单的公式,但我对CR很陌生,在这方面遇到了困难。。。搜索了SO我的答案,但找不到,所以如果有人问我这个问题,请原谅我。

我有一份患者名单,每年给一名患者分配一个风险评分,所以每个患者都有多个评分。数据看起来像这样:

Patient_ID Score_Year Risk_Score
11111      2013       1.05
11111      2014       0.00
22222      2013       0.07
22222      2014       0.11
33333      2013       1.19
33333      2014       0.00
44444      2013       2.13
44444      2014       0.00
55555      2013       0.30
55555      2014       0.54
66666      2013       1.67
66666      2014       2.31

我想创建一个字段,为每个患者分配一个单独的风险评分,但正如你从数据中看到的,一些患者2014年的评分为"0.00",我不想包括在内。

我的想法是创建一个公式,基本上说明[Score_EYear]=2014和[Risk_Score]<>0然后([Risk_Score]其中[Score_EYear]=2014),否则([Risk _Score]中[Score_Eyear]=2013),但撞到了砖墙。

简而言之,我需要一个公式来首先获得2014年的分数,但如果是0,那么默认为2013年。

有没有办法把它写在公式中,或者选择一个案例会更好?这就是我CR知识的范围,所以如果你们知道任何更有效的东西,我很想学习!

前两个可能作为SQL表达式工作,尽管它们可能很慢。主要好处是计算值是数据集的一部分,可以在渲染过程的所有过程中使用。

(
select coalesce(max(Score_Year * 1000 + Risk_Score * 100.00) % 1000 / 100.00, 0.00)
from table T2
where (Score_Year <> 2014 or Risk_Score <> 0.00) and T2.Patient_ID = T.Patient_ID
) -- better to say year(getdate()) - 1 instead of hardcoding 2014??

这是一个较少的黑客攻击,但只能在SQL Server(或Sybase)上工作。类似的方法也适用于Oracle、DB2等。

coalesce(
(    
select top 1 Risk_Score
from table T2
where Risk_Score <> 0.00 and T2.Patient_ID = T.Patient_ID
order by Score_Year desc
),
0.00
)

这里有一个可以给出正确值的Crystal公式(不过我可能对语法有些生疏。)你需要在Patient_ID上有一个Crystal组,然后将公式放在详细信息部分并取消显示。然后你可以在组页脚的任何位置使用该公式,并返回正确的值。

// @RiskScore
whileprintingrecords;
static numbervar patient_id :: 0;
static numbervar risk_score := 0.00;
static numbervar score_year := 1900;
if (
risk_score = 0.00 and score_year < {T.Score_Year} or
patient_id <> {T.Patient_ID}
) then (
patient_id := {T.Patient_ID};
risk_score := {T.Risk_Score};
score_year := {T.Score_Year};
)
risk_score;

按照第一个SQL表达式的模式,您可以将其转换为一对公式。这里的缺点是风险评分不可用于行级(whilereadingrecords)公式。

// @WeightedRiskScore
{T.Score_Year} * 1000 + {T.Risk_Score} * 100.00;
// @MostRecentRiskScore
max(@WeightedRiskSCore, "Patient_ID") mod 1000 / 100.00;

根据您报告的具体情况,可能还有其他选择。

最新更新