2012-02-14 76 views
0

我的重要的其他人在履行职责时使用了Crystal Reports,并且向我寻求帮助。她写了如下所示的映射函数,并且当客户端拥有多个卡片时(参见图表)会惊讶地发现影响值。映射函数的意外结果

diagram

在这个模型中,当客户端有一个护理访问,客户的卡被认为在政府报告目的的客户访问记录中注明。尽管卡片ID在概念上是不可选的,但在访问详细信息被记录时,卡片很有可能不在档案中,因此他们的系统允许它暂时未被填充。该状态在下面的映射函数中由“无卡”条件表示。

她对我的回应表示不满意,这意味着她的任何条件都不符合,她要求我发布她的呼吁以寻求帮助。

下面是她的映射函数中的Crystal Basic代码。她知道最后一个条件中存在未处理的情况,在这种情况下,将显示一个空白,这不是所观察到的行为。图中的名称与映射函数代码中的名称不匹配,因为该图是我合成的许多挥手和解释的代码,而代码直接从报告中粘贴并包含实际的字段名称。

if ({awt_temp.Service_code} = "DOM") and ({Card_Type.Card_Type_ID} = 21) then 
    {Card_Holder.Card_No} 
else if ({awt_temp.Service_code} = "MANT") and ({Card_Type.Card_Type_ID} = 25) then 
    {Card_Holder.Card_No} 
else if ({awt_temp.Service_code} = "PC") and ({Card_Type.Card_Type_ID} = 22) then 
    {Card_Holder.Card_No} 
else if ({awt_temp.Service_code} = "RES") and ({Card_Type.Card_Type_ID} = 24) then 
    {Card_Holder.Card_No} 
else if ({awt_temp.Service_code} = "SOC") and ({Card_Type.Card_Type_ID} = 23) then 
    {Card_Holder.Card_No} 
else if not ({Card_Type.Description} startswith "vhc") then 
    "no card" 

没有必要提到映射函数最好通过连接到查找表来处理。她不能重新设计架构。

+0

是报告中的Card_Type_ID的类型integer还是varchar?这可能是问题 – 2012-02-14 14:11:12

回答

0

它可能与NULL值有关。您应该始终在公式开始时测试空值:

if Isnull({awt_temp.Service_code}) OR Isnull({Card_Type.Card_Type_ID}) then 
    ... 
+0

感谢您的回复。这是“重要的其他”。我已经提出了一些建议,但是无济于事。对于我认为很简单的事情,解决方案是使用子报告。它完美的作品。 – 2012-03-23 22:45:42