2011-11-28 16 views
8

Ho guardato in alto e in basso e non riesco a trovare una risposta a quelli che sembrano essere problemi piuttosto semplici (penserei).Grafico a linee SSRS che non connette i punti dati

Ho un grafico a linee in cui ci sono dati in diversi punti di una serie ma solo un solo insieme di punti di collegamento.

Qualcuno sa perché questo è? Ha a che fare con i miei dati? Se lo è, sto facendo fatica a vedere eventuali relazioni nei dati che potrebbero spiegare questo comportamento.

Ecco cosa intendo:

Messed up data points

Come si può vedere, i diamanti rossi vanno collegamento - lo stesso si potrebbe dire per le piazze blu e triangoli blu scuro. qualche idea?

Mi scuso se i miei colori sono sbagliati - Sono daltonico.

risposta

16

Ok, quindi ho risolto questo problema.

In primo luogo, per ottenere il collegamento delle linee, è necessario impostare il colore EmptyPoint per la serie.

  1. selezionare la serie nel grafico
  2. Nella scheda delle proprietà (non la finestra di dialogo) drill-down nella proprietà EmptyPoint e impostare il colore da nero

Questo otterrà unirsi a loro in su - Sìì! Ma parte della linea è il colore e l'altra parte è nera, giusto? È un po 'sciocco, soprattutto considerando se si lascia il colore a Automatic sul EmptyPoint che sarà trasparente.

Quindi, quindi, è necessario sincronizzare la serie e i colori di EmptyPoint. Utilizzo del codice da here. Ho aggiunto del codice al codice del rapporto.

1). Fare clic con il tasto destro del mouse su uno spazio vuoto nel report e selezionare "Proprietà report"
2). Nella scheda di codice, incollare il seguente:

Private colorPalette As String() = {"#418CF0", "#FCB441", "#E0400A", "#05642E", "#1A3B69", "#BFBFBF", "#E0400A", "#FCB441", "DarkBlue", "Tomato", "Orange", "CornflowerBlue", "Gold", "Red", "Green", "LightBlue", "Lime", "Maroon", "LightSteelBlue", "Tan", "Silver"} 
Private count As Integer = 0 
Private mapping As New System.Collections.Hashtable() 

    Public Function GetColor(ByVal groupingValue As String) As String 

     If mapping.ContainsKey(groupingValue) Then 
       Return mapping(groupingValue) 
     End If 

     Dim c As String = colorPalette(count Mod colorPalette.Length) 
      count = count + 1 
      mapping.Add(groupingValue, c) 
      Return c 
    End Function 

allora abbiamo bisogno di chiamare questo codice quando si imposta il colore della serie e del EmptyPoint.

  1. Selezionare la serie
  2. Nella scheda Proprietà pasta qualcosa il seguente (sostituire WhateverTheGroupIsForYourSeries con la serie del nome del gruppo): =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)
  3. Drill verso il basso per l'elemento colore della proprietà serie EmptyPoint
  4. Incolla lo stesso testo del punto 2 [es =Code.GetColor(Fields!*WhateverTheGroupIsForYourSeries*.Value)]

E voilà! Hai finito! Non riesco a credere a quanto sia inutilmente difficile questo: D

+0

Tutto ha funzionato bene fino a quando ho provato i passaggi 2 e 4. Il problema è con l'accesso alla funzione GetColor. Sembra che il codice scritto nelle proprietà del report che definisce la funzione GetColor non sia accessibile qui nell'elemento colore. Qualche idea su come risolvere questo. Sto usando RDLC e non il RDL che è sui servizi di segnalazione. – learner

+0

Ho capito il mio errore! Il nome della serie che ho fornito ha avuto un refuso. La soluzione ha funzionato. Grazie. L'unico problema che vedo ora è che il colore delle leggende è incasinato. Ci sono più di un'apparenza dello stesso colore. – learner

+0

Stavo usando CountRows() per il mio valore Y, che mi dava l'illusione di Punti vuoti, ma erano punti reali con un valore pari a zero. Per ovviare a questo, ho cambiato il mio valore Y in = IIF (CountRows()> 0, CountRows(), Nothing) – Towler

1

Ho appena avuto un problema in cui mostrava i marcatori ma non le linee.Ho finito per risolverlo avvolgendo l'espressione in un CInt() per convertirlo in un numero intero.

+0

Puoi spiegarlo un po 'di più con un esempio di codice? Sono interessato a provare questa soluzione. –

+0

Questa soluzione ha funzionato perfettamente per me. Scegli il campo dei valori del grafico, fai clic sulla freccia e scegli Espressione, quindi avvolgi tutto ciò che è lì dentro con CINT ([la tua espressione]). Grazie SteveCav – MrsTapp

0

Un altro modo per gestire ciò è eseguire una selezione ricorsiva (se i set di dati molto grandi non lo fanno, uccide le prestazioni). Così si potrebbe rendere il vostro set di dati:

SELECT *, ROW_NUMBER() over(partition by Store order by Date desc) as rn 
FROM StorePerformance 

Ora puoi avere il tuo gruppo di categorie essere rn (dovrebbe gruppo da RN e ordina per rn) data, ma di selezione per la sua etichetta. Questo mostrerà comunque la data sull'asse x, ma dal momento che stai raggruppando per rn i dati saranno comunque continui e tutte le linee si connetteranno. Anche la tua leggenda corrisponderà ancora.

Non ho ancora analizzato in dettaglio quanto questi dati spostino i punti dato che stiamo tracciando con il numero di riga e la data di visualizzazione, ma se ci si preoccupa principalmente di visualizzare le tendenze nelle linee e non si preoccupano di dove sono in un dato momento in relazione l'uno con l'altro, ti serviranno proprio bene. Altrimenti lascerei il grafico così com'è e leggo solo i punti della trama, che sono ancora dati validi.

Problemi correlati