2015-09-03 21 views
5

Ho due Tablix (tabelle) e un dataset. Sono delimitazione con questo set di datiReport RDLC - Errore Rownumber() non può essere utilizzato nel filtro

Serial No. |  Name  
______________|________________ 
    SN0003  |  Beckham 
    SN0005  |  Henry 
    SN0012  |  Rooney 
    SN0119  |  Ji Sung 
    SN0200  |  Gerrard 

Nella mia relazione, ho bisogno di dividere due Tablix Mostrerà come qui di seguito ...

(E ' "da sinistra a destra" prima "Fino a Buttom")

Serial No. |  Name  || Serial No. | Name 
______________|________________ || _______________|______________ 
    SN0003  |  Beckham  ||  SN0005  | Henry   
    SN0012  |  Rooney  ||  SN0119  | Ji Sung 
    SN0200  |  Gerrard  ||    | 

tavolo sinistra è Tablix1 e tavolo giusto è Tablix2

penso che uso questo FilterExpression per ogni Tablix.

 = RowNumber(Nothing) mod 2 = 0 

per Tablix1 (tabella a sinistra)

 = RowNumber(Nothing) mod 2 = 1 

per Tablix2 (tabella a destra)

Ma è errore questo messaggio ...

 "A FilterExpression for tablix ‘Tablix1’ uses the RowNumber function. 
     RowNumber cannot be used in filters." 

E 'non è possibile utilizzare Rownumber in Filter. Cosa devo fare? È possibile se non modifico il set di dati.

risposta

5

È possibile modificare il set di dati che si sta ricevendo in primo luogo? È possibile aggiungere un campo ROW_NUMBER a questo utilizzando

SELECT 
    ..., 
    ROW_NUMBER() OVER(ORDER BY SerialNo ASC) AS RowNum, 
    ... 

Allora il vostro set di dati restituito sarà simile

Serial No. |  Name  | RowNum 
______________|________________|__________ 
    SN0003  |  Beckham | 1 
    SN0005  |  Henry  | 2 
    SN0012  |  Rooney | 3 
    SN0119  |  Ji Sung | 4 
    SN0200  |  Gerrard | 5 

E poi si può fare il vostro filtro su RowNum mod 2 = 0

Modifica

In alternativa, se non è possibile modificare il set di dati sottostante, si può essere intelligenti utilizzando RunningValue e CountDistinct.

CountDistinct darà il numero di righe corrispondenti nel set di dati, per ogni riga (così, di solito 1 assumendo numeri di serie sono unici)

RunningValue vi darà un totale crescente dei valori tra ciascuna riga in una table ... e con questo puoi sommare tutti quei `CountDistincts '.

impostare la visibilità riga della tabella di essere qualcosa di simile a

Per Tablix1

=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 0 

Per Tablix2

=(RunningValue(CountDistinct(Fields!SerialNo.Value), Sum, "DataSetName") mod 2) = 1 
+0

Grazie per la tua risposta.E dirti "I'm Sorry". Il mio team non desidera modificare alcun set di dati perché ha un effetto su un'altra parte del progetto. E 'possibile se risolvo questo problema senza modificare datatable? –

+0

Modificato per fornire una soluzione che non modifica l'SQL sottostante – Jonnus

+0

Grazie mille. È un lavoro. Rendo nuovo datatable e clona tutti i dati a cui è aggiunto un nuovo datatable seq_no column. Grazie. –

0

Grazie [Risolto], Jonas

Questa mia datatable . Ho creato una nuova colonna per il negozio seq_no. Con clic destro> Aggiungi colonna e cambiare il nome "SEQ_NO" enter image description here

Il passo successivo, ho impostato un valore per SEQ_NO colonna codeing con VB

   Dim dt As dsProductionControl.TL_PRODUCTION_SCHEDULE_DETAILSDataTable = DsProductionControl.TL_PRODUCTION_SCHEDULE_DETAILS 

       For i As Integer = 1 To dt.Rows.Count 
        dt.Rows(i).Item("SEQ_NO") = i 
       Next i 

e il filtro in Tablix della relazione SEQ_NO

 =Fields!SEQ_NO.Value Mod 2 = 0 

Grazie, ancora Jonas.

Problemi correlati