2012-12-13 33 views
5

Ho un campo stringa che contiene principalmente valori decimali numerici, ma a volte contiene valori come "< 0.10" o "HEMOLYSIS".Avere una formula di Crystal Reports convertire stringhe numeriche in valori, ma lasciare non numerici vuoti/nulli

Desidero utilizzare una formula per convertire queste stringhe di valori numerici in valori, lasciando non valori vuoti (null).

if isNumeric({a_omgang.omg_resultat}) then 
    toNumber({a_omgang.omg_resultat}) 

restituisce 0 per tutti i valori non numerici, il che rende difficile calcolare ad es. media o media o per contare il numero di valori. (Quest'ultimo può naturalmente essere ottenuto utilizzando un conteggio totale parziale con la formula di valutazione isNumeric.)

Qualche suggerimento su come posso far funzionare la formula come voglio?

Modifica: voglio che il valore sia vuoto (null), non solo giro di visibilità se non numerico.

risposta

4

In passato, ho creato un Espressione SQL che restituisce un NULL:

-- {@DB_NULL} 
-- Oracle syntax 
(
SELECT NULL FROM DUAL 
) 

 

-- {@DB_NULL} 
-- MS SQL syntax 
(
SELECT NULL 
) 

Poi riferimento questo campo nella formula:

// {@FormulaField} 
If IsNumberic({table.field} Then 
    ToNumber({table.field}) 
Else 
    ToNumber({@DB_NULL}) 
+0

Concetto interessante, ma ottengo "Nome oggetto non valido 'DUAL'" quando corro contro MS SQL Server. Ho provato a cambiarlo in nomi di tabelle reali, ma ho ancora errori. – LapplandsCohan

+2

Prova semplicemente con 'SELEZIONA NULL'. Non ho accesso a SQL Server, quindi non posso verificarlo. – craig

+0

Ha funzionato! Penso che questa sia la soluzione più generica. – LapplandsCohan

0

Non sicuro se questa è la soluzione migliore, ma è una soluzione.

Creare una formula totale parziale per il massimo del campo. Valutare dalla formula
NumericText(Replace({a_omgang.omg_resultat}, ".", ","))
e reset dalla formula
true

Questo vi darà il massimo risultato di ogni ingresso. (I.e quella voce.) Verranno valutate solo le voci che possono essere convertite in un valore, quindi tutte le altre saranno nulle. Avendo true come formula di reimpostazione si assicura che si ottiene sempre il valore della voce che si sta valutando.

Il risultato di questo totale parziale può quindi essere convertito in un valore utilizzando la formula nella domanda.

Il Replace() è dovuto all'impostazione locale e potrebbe non essere necessario in base alle impostazioni del sistema. Se necessario, dovrà essere utilizzato anche nella formula di conversione del valore.

0

Per quanto ne so, non è possibile farlo direttamente. Se un campo formula numerica restituisce un valore null, viene convertito in 0.

Si dice che non si può sopprimere. Potresti convertire in un numero e poi tornare a una stringa?

+0

Per questo specifico rapporto sarebbe sufficiente sopprimere, ma mi interessa una soluzione generale. Aggiornamento domanda. – LapplandsCohan

2

È possibile farlo funzionare nel modo seguente:

  1. creare una nuova formula e solo immettere un numero in esso, quindi salvare. Crystal ora assocerà questa formula con un valore di ritorno numerico.
  2. Torna alla formula e elimina il numero e salvalo nuovamente. Ora hai una formula che restituisce un valore nullo, ma CR l'ha già associato come una formula numerica in modo che tu possa ora usarlo ovunque tu possa usare un tipo numerico.
if isNumeric({a_omgang.omg_resultat}) 
    then toNumber({a_omgang.omg_resultat}) 
else {@NullNumeric}

Si noti che è anche possibile utilizzare questo per tutti gli altri tipi di dati (incluse le stringhe da una stringa vuota non è equivalente a una stringa nulla) ed è estremamente utile per l'utilizzo con le funzioni di riepilogo in cui si desidera solo per rettificare ignorare determinate righe.

Problemi correlati