Division par zéro dans la formule crosstab
-
13-10-2019 - |
Question
J'ai un tableau croisé avec un champ de formule. La requête retourne quelque chose comme
CategoryID Company MarketValue PaymentMode
1 ABC 1000 H
1 xyz 2000 H
3 efg 9800 H
Mode de paiement est indiquée par moitié chaque année « H » J'ai fait un champ de formule pour évaluer le mode de paiement par
WhileReadingRecords;
numberVar mode;
if({PaymentMode}='H') then mode:=2 else mode:=12
Alors je fait un autre champ de formule
WhileReadingRecords;
numberVar mode;
numberVar result:={MarketValue}/mod;
result
Cependant, il retourne division par zéro erreur. Pourquoi ma formule pour le mode de paiement ne pas évaluer correctement. J'ai essayé de placer les mode de paiement formule dans la tête de rapport et onglet croix est 2ème tête mais il jette toujours la même erreur.
La solution
Deux problèmes.
Première erreur de syntaxe - ou plutôt faute de frappe ici, dernière 'e' est manquante:)
numberVar result:={MarketValue}/mode;
Deuxième - vous devez évaluer formuals dans l'ordre indiqué. Supposons que votre première formule a le nom « calc_mode », puis la deuxième devrait commencer par déclaration suivante:
EvaluateAfter({@calc_mode});
Autres conseils
Je suis heureux que vous ayez déjà trouvé la réponse de Arvo, mais j'ai quelques suggestions pour simplifier votre code:
-
mode est un buit en fonction de cristal (voir les fichiers d'aide de cristal). Alors, quand je vous ai vu utiliser ce mot comme nom pour une variable personnalisée, mon cerveau a fait un saut périlleux arrière. Que diriez-vous l'appeler "numPayPeriods" à la place?
-
Étant donné que votre formule échantillon comprend des valeurs de champ, des outils de cristal WhileReadingRecords par défaut (encore une fois, voir les fichiers d'aide de cristal). Donc, en ajoutant qu'il est superflu dans ce cas. Vous pouvez prendre cette complètement.
-
Il n'y a pas besoin de 2 formules distinctes dans votre exemple. En outre, Résultat variable est inutile dans la syntaxe Crystal. Vous pouvez simplifier le tout à seulement 1 formule:
if({PaymentMode}='H') then
{MarketValue}/2
else
{MarketValue}/12;