Domanda

Sembra che dovrebbe essere semplice ma non riesco ancora a trovare nulla. In Reporting Services ho una tabella con un massimo di 6 righe che hanno tutti valori calcolati e visibilità dinamica. Vorrei riassumere queste righe. Fondamentalmente ho un numero di articoli di fattura e voglio fare un totale. Non posso modificare nulla dal lato DB poiché le mie procedure memorizzate sono utilizzate altrove nel sistema. Ogni riga estrae anche i dati da un set di dati diverso, quindi non posso fare una somma del set di dati. Posso sommare tutte le righe con un piè di pagina della tabella? Analogamente al totale di un numero di righe in Excel? Sembra molto ridondante inserire la mia espressione di visibilità da ogni riga nella riga del piè di pagina per calcolare la somma.

È stato utile?

Soluzione

Alcuni modi per raggiungere questo obiettivo:

1. Esegui il calcolo in SQL e somma quel campo, in questo modo:

SELECT Quantity, Amount, Quantity * Amount As TotalAmount FROM MyTable

Quindi usa semplicemente il campo TotalAmount nella riga Dettagli e sommalo nel piè di pagina.

2. Crea un secondo set di dati che calcola il totale per te e utilizzalo nel tuo piè di pagina anziché in una somma:

=Sum(Fields!TotalAmount.Value, "MyTotalingDataset")

3. Fallo utilizzando un codice personalizzato. Fare clic con il tasto destro del mouse sullo spazio Layout, selezionare Proprietà e fare clic sulla scheda Codice. Inserisci il seguente codice:

Public Dim TotalAmount As Double = 0

Public Function CalculateRowTotal(ThisValue As Double, ThatValue As Double) As Double
    TotalAmount = TotalAmount + (ThisValue * ThatValue)
    Return ThisValue * ThatValue
End Function

Nella banda Dettagli, fai in modo che la colonna in cui sommi il campo abbia questa espressione:

=Code.CalculateRowTotal(Fields!Quantity.Value, Fields!Amount.Value)

Questo eseguirà il codice sopra e farà il tuo calcolo oltre a calcolare la somma totale nel processo.

La banda Footer mostra la somma totale in modo che la colonna abbia l'espressione:

=Code.TotalAmount

E il gioco è fatto. Fai solo attenzione perché non ti è garantito l'ordine in cui verrà eseguito il tuo codice e per alcuni rapporti eseguirà prima il piè di pagina (ad esempio, se usi la somma delle righe nella banda Dettagli) che renderebbe lo zero totale poiché i calcoli della banda di dettaglio non sono ancora avvenuti, ma per il caso generale dovrebbe funzionare.

Altri suggerimenti

È possibile modificare il db come segue.

Sapevi che puoi ottenere risultati aggregati in SQL senza aggregare i dati?

Basta aggiungere una colonna aggiuntiva al set di dati come segue:  , SUM (OrderQty) OVER (PARTITION BY SalesOrderID) COME 'Totale'

Nell'esempio sopra: OrderQty è il valore che si desidera sommare SalerOrderID è l'equivalente di "GROUP BY"

È possibile utilizzare la stessa tecnica con COUNT, AVG e così via

Ulteriori informazioni qui http://msdn.microsoft.com/en-us /library/ms189461(SQL.90).aspx

In caso di problemi con l'ordine di esecuzione, aggiungere una casella di testo sotto la tabella e visualizzare TotalAmount in questa casella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top