2010-08-09 10 views
17

Utilizzo di SSRS (2008) qual è il modo migliore che si è trovato per gestire valori nulli o vuoti e sostituirli con qualcos'altro da visualizzare. Le soluzioni del tutto evidente èVisualizzazione valore vuoto o nullo nelle caselle di testo SSRS

=IIF(IsNothing(Fields!MyField.Value),"NA",Fields!MyFields.Value) 

che funziona anche se è noioso, la mia speranza era di trovare qualcosa di simile a una proprietà EmptyText sulla casella di testo ma ahimè nulla. Qualche idea? Devo creare un articolo di report personalizzato dalla base TextBox che crea questa proprietà?

risposta

5

Chiama una funzione personalizzata?

http://msdn.microsoft.com/en-us/library/ms155798.aspx

Si può sempre mettere un caso stmt in là per gestire diversi tipi di dati 'vuoti'

+2

Scegliere questa risposta perché la maggior parte degli altri si occupa di ISNULL in sql e non è una soluzione specifica per SSRS. Soluzione valida ma lo scopo del problema qui è limitato a SSRS. – keithwarren7

2

Mentre probabilmente non meglio di soluzione, si potrebbe regolare il vostro T-SQL per restituire lo stesso risultato utilizzando COALESCE:

SELECT MyField = COALESCE(table.MyField, " NA") 

Il ragionamento per lo spazio extra prima che il NA è quello di consentire l'ordinamento a posto i risultati di NA in alto. Poiché i tuoi dati potrebbero variare, potrebbe non essere una buona opzione.

+2

Questo non è sempre praticabile. Nel caso di un 'MATRIX', potresti avere uno scenario' PIVOT' che genera "buchi" nei tuoi campi, perché tu "INNER JOIN'ed in SQL e" LEFT JOIN "comporterebbero una penalità di costo. – MarkD

0

sono d'accordo su come eseguire la sostituzione sul lato SQL, ma usando la funzione ISNULL sarebbe il come vorrei andare.

SELECT ISNULL(table.MyField, "NA") AS MyField 

faccio di solito il più trattamento dei dati sui nostri server SQL e cercare di fare il meno manipolazione dei dati in SSRS possibile. Questo è principalmente dovuto al fatto che il mio server SQL è considerevolmente più potente del mio server SSRS.

+0

Tendo a privilegiare 'COALESCE' su' IsNull' semplicemente perché lavoro con Oracle e SQL Server e 'COALESCE' funziona con entrambi. – TomG

0

Sia in SQL o in codice di rapporto (come per la funzione suggerimento di aglio Adolf)

In questo momento nel tempo, lo farei nella relazione. Ho pochissimi rapporti contro un server OLTP occupato e un server di report non completamente gestito. Se avessi un mix diverso lo farei in SQL.

In entrambi i casi è accettabile ...

5

Io sarei d'accordo con la conversione sul lato server. Se lo fai tornerà come un tipo di stringa piuttosto che un tipo di data con tutto ciò che comporta (si ordinerà come una stringa per esempio)

Il mio principio quando si tratta di date è di tenerli digitati come una data per tutto il tempo che puoi

Se si verificano dei colli di bottiglia nelle prestazioni sul server di report, è possibile gestirli in modo migliore rispetto alla compromissione della logica.

+0

Sono d'accordo con questo approccio. Ha senso che i dati del server siano strutturati e digitati correttamente, quindi decidere come presentarli nel livello di reporting. –

0

Non ho potuto ottenere IsNothing() comportamento e non volevo creare righe fittizie nel mio dataset (ad esempio per un determinato elenco di clienti creare un ordine fittizio al mese visualizzato) e notato che i valori nulli erano visualizzati come - 247192.

Ed ecco usando quel lavorato per sopprimerla (almeno fino a quando MSFT cambia SSRS in meglio da 08R2) così mi perdoni, ma:

=iif(Fields!Sales_Diff.Value = -247192,"",Fields!Sales_Diff.Value) 
+0

L'unico motivo plausibile per i null visualizzati in questo modo è che se avessi un'espressione da qualche parte che non li ha considerati correttamente e restituito risultati bizzarri quando si sono verificati, nel qual caso sarebbe il tuo problema e non quello di Microsoft. –

-2

ho avuto una situazione simile ma le seguenti funzionato meglio per me ..

=Iif(Fields!Sales_Diff.Value)>1,Fields!Sales_Diff.Value),"") 
6
=IIF(ISNOTHING(CStr(Fields!MyFields.Value)) or CStr(Fields!MyFields.Value) = "","-",CStr(Fields!MyFields.Value)) 

usare questa espressione si può ottenere la risposta.

Qui CStr è una funzione predefinita per la gestione dei tipi di dati String.

0

Prova questa

=IIF(IsNothing(Fields!MyField.Value)=TRUE,"NA",Fields!MyFields.Value) 
Problemi correlati