Division by zero in formula a campi incrociati
-
13-10-2019 - |
Domanda
Ho un campo incrociato con un campo formula. La query restituisce qualcosa come
CategoryID Company MarketValue PaymentMode
1 ABC 1000 H
1 xyz 2000 H
3 efg 9800 H
modalità di pagamento è semestrale indicata da 'H' Ho fatto un campo formula per valutare modalità di pagamento da
WhileReadingRecords;
numberVar mode;
if({PaymentMode}='H') then mode:=2 else mode:=12
Poi ho fatto un altro campo di formula
WhileReadingRecords;
numberVar mode;
numberVar result:={MarketValue}/mod;
result
Tuttavia restituisce la divisione per zero errore. Perché la mia formula per la modalità di pagamento non valutare correttamente. Ho provato mettendo la formula modalità di pagamento in testa relazione e scheda croce è 2 ° colpo di testa, ma getta ancora lo stesso errore.
Soluzione
Due problemi.
In primo errore di sintassi - o meglio errore di battitura qui, ultimo 'e' che manca:)
numberVar result:={MarketValue}/mode;
In secondo luogo - è necessario valutare formuals in ordine specificato. Di 'la tua prima formula ha il nome 'calc_mode', poi la seconda dovrebbe iniziare con la prossima dichiarazione:
EvaluateAfter({@calc_mode});
Altri suggerimenti
Sono contento che hai già trovato la risposta di Arvo, ma ho alcuni suggerimenti per semplificare il codice:
-
modalità è un buit-in funzione di cristallo (vedi file di aiuto di Crystal). Così, quando ti ho visto usare questa parola come nome per una variabile personalizzata, il mio cervello ha fatto un backflip. Che ne dite di definendolo "numPayPeriods", invece?
-
Dal momento che la formula di esempio include i valori di campo, attrezzi di cristallo WhileReadingRecords di default (di nuovo, vedere i file di aiuto di Crystal). Così l'aggiunta è superflua in questo caso. Si può prendere quella del tutto.
-
Non c'è bisogno di 2 formule separati nel tuo esempio. Inoltre, il Risultato variabile è inutile nella sintassi Crystal. È possibile semplificare il tutto ad appena 1 formula:
if({PaymentMode}='H') then
{MarketValue}/2
else
{MarketValue}/12;