Creazione del report Sales_Order_Detail_2008R2 (SSRS)
Questa esercitazione consente di compilare il report Sales_Order_Detail_2008R2 dai report di esempio di AdventureWorks 2008R2.
Si tratta del report dettagli che rappresenta la destinazione dell'azione drill-through del report Employee_Sales_Summary_2008R2 per il campo SalesOrderNumber. Nel report vengono visualizzati i dettagli sull'intestazione vendite e sulla voce vendite per un intervallo consecutivo di ordini di vendita. I dettagli includono il numero di ordine, il nome del negozio, gli indirizzi di fatturazione e di spedizione, le informazioni di contatto del venditore e altri dettagli disponibili dal database AdventureWorks2008R2. Per ulteriori informazioni sull'insieme di report e sulle relative relazioni, vedere Esercitazioni: Creazione dei report di esempio di AdventureWorks 2008R2 (SSRS).
Lezioni dell'esercitazione
In questa esercitazione verranno effettuate le attività seguenti:
Aggiungere un set di dati e una query che consentirà di recuperare i dati dettaglio relativi agli ordini di vendita per un intervallo di ordini di vendita.
Configurare i parametri di report per il primo e ultimo numero di ordine di vendita nell'intervallo.
Aggiungere le informazioni seguenti all'intestazione di pagina:
Nomi di pagina. Se il report viene esportato in Excel, il nome della scheda di un foglio di lavoro si basa sul nome della pagina.
Numeri di pagina per l'intero report.
Numeri di pagina all'interno di ogni ordine di vendita.
Istruzioni per l'utente del report su come tornare al report principale.
Aggiungere un elenco con un solo gruppo di righe basato su SalesOrderID. All'elenco verranno aggiunti gli elementi seguenti:
Un rettangolo nidificato come contenitore per facilitare il controllo del layout delle informazioni sull'intestazione dell'ordine di vendita e sui dettagli.
Più caselle di testo per visualizzare le informazioni sull'intestazione dell'ordine di vendita.
Un sottoreport per visualizzare i numeri di telefono per più contatti.
Una tabella per visualizzare i dettagli per ogni voce in un ordine di vendita.
Aggiungere il codice personalizzato per calcolare i totali di pagina e i totali di pagina parziali per le pagine successive.
Definire una variabile di report per semplificare l'espressione del totale parziale.
Definire un'espressione di raggruppamento personalizzata nelle righe di dettaglio per iniziare una nuova pagina ogni 25 righe.
Il tempo stimato per completare l'esercitazione è di 30 minuti.
Requisiti
Per informazioni sui requisiti, vedere Prerequisiti per i report di esempio di AdventureWorks 2008R2 (SSRS).
Per questa esercitazione si presume che sia stata completata la sezione Creazione del progetto server di report e del report AdventureWorks2008R2_Base (SSRS).
Suggerimenti
Il report dettagli dell'ordine di vendita è un report in formato libero in cui vengono utilizzate aree dati, rettangoli, aree dati nidificate e caselle di testo nidificate per l'organizzazione dei dati. La gerarchia di contenimento di questi elementi è importante. Rivedere i suggerimenti in Suggerimenti relativi alla progettazione di report (Generatore report 3.0 e SSRS), quindi utilizzare i suggerimenti seguenti per la compilazione di questo report:
È consigliabile aprire il report di esempio Sales_Order_Detail_2008R2 e visualizzarlo insieme a questa esercitazione. Dopo aver aperto Sales_Order_Detail_2008R2, visualizzare la gerarchia degli elementi del report nel riquadro Struttura documento. Durante la compilazione del report, verificare le relazioni di contenimento tra gli elementi del report Tablix e i rettangoli.
Nota
Per aprire il riquadro Struttura documento, fare clic su Altre finestre dal menu Visualizza, quindi scegliere Struttura documento.
Un elenco è un layout della Tablix in formato libero. Per impostazione predefinita, un elenco contiene una sola cella della Tablix contenente un rettangolo. A questo report verranno aggiunti gli elementi seguenti:
Un rettangolo nidificato aggiuntivo per contenere le informazioni relative al logo, al numero di ordine di vendita e all'intestazione dell'ordine di vendita.
Una tabella per visualizzare i dettagli dell'ordine di vendita per ogni riga.
Può risultare più semplice copiare e incollare aree dati o contenitori rettangolari tra il report originale e la copia in uso anziché creare elementi del report e layout nuovi. È possibile copiare e incollare gli elementi del report tra le viste a schede dei report aperti. Dopo avere copiato gli elementi da un report, fare clic sulla scheda del report in cui si desidera eseguire la copia, quindi fare clic nel punto in cui si desidera incollare gli elementi. L'azione incolla è sensibile al contesto. Non è possibile, ad esempio, incollare un'area dati in un'intestazione di pagina.
Per aprire il progetto e creare una copia di un report
In Business Intelligence Development Studio aprire il progetto server di report AdventureWorks 2008R2.
In Esplora soluzioni effettuare le operazioni seguenti:
Fare clic con il pulsante destro del mouse sul report AdventureWorks2008R2_Base.rdl, quindi scegliere Copia.
Fare clic con il pulsante destro del mouse sul nodo del progetto, quindi scegliere Incolla.
Rinominare il report copiato in Sales_Order_Detail_2008R2.rdl.
Per creare il set di dati per le vendite ai singoli clienti
Al riquadro Dati report aggiungere un set di dati incorporato denominato SalesOrder. Utilizzare l'origine dati condivisa AdventureWorks2008R2 e la query seguente:
SELECT SOH.SalesOrderNumber, S.BusinessEntityID, S.Name, SOH.SalesOrderID, SOH.SalesPersonID, SOH.TotalDue, SOH.OrderDate, SOH.PurchaseOrderNumber, SOH.BillToAddressID, SOH.ShipToAddressID, SOH.ShipMethodID, SM.Name AS ShipMethod, BA.AddressLine1 AS BillAddress1, BA.City AS BillCity, BA.PostalCode AS BillPostalCode, BSP.Name AS BillStateProvince, BCR.Name AS BillCountryRegion, SA.AddressLine1 AS ShipAddress1,SA.City AS ShipCity, SA.PostalCode AS ShipPostalCode, SSP.Name AS ShipStateProvince, SCR.Name AS ShipCountryRegion, e.JobTitle, per.[FirstName] + N' ' + per.[LastName] AS [SalesPerson], ph.PhoneNumber, SD.SalesOrderDetailID, SD.OrderQty, SD.UnitPrice, CASE WHEN SD.UnitPriceDiscount IS NULL THEN 0 ELSE SD.UnitPriceDiscount END AS UnitPriceDiscount, SD.LineTotal, SD.CarrierTrackingNumber, P.Name as ProductName, P.ProductNumber FROM [Sales].[SalesOrderHeader] SOH INNER JOIN Sales.Customer C ON SOH.CustomerID = C.CustomerID INNER JOIN Sales.Store S ON C.StoreID = S.BusinessEntityID INNER JOIN Person.Address SA ON SA.AddressID = SOH.ShipToAddressID -- Shipping address INNER JOIN Person.StateProvince SSP ON SA.StateProvinceID = SSP.StateProvinceID INNER JOIN Person.CountryRegion SCR ON SSP.CountryRegionCode = SCR.CountryRegionCode INNER JOIN Person.Address BA ON SOH.BillToAddressID = BA.AddressID -- Billing Address INNER JOIN Person.StateProvince BSP ON BA.StateProvinceID = BSP.StateProvinceID INNER JOIN Person.CountryRegion BCR ON BSP.CountryRegionCode = BCR.CountryRegionCode INNER JOIN Purchasing.ShipMethod SM ON SOH.ShipMethodID = SM.ShipMethodID INNER JOIN [Sales].[SalesPerson] sp ON sp.[BusinessEntityID] = SOH.[SalesPersonID] INNER JOIN [HumanResources].[Employee] e ON SOH.[SalesPersonID] = e.[BusinessEntityID] INNER JOIN [Person].[Person] per ON per.[BusinessEntityID] = sp.[BusinessEntityID] INNER JOIN Person.PersonPhone ph ON per.[BusinessEntityID] = ph.[BusinessEntityID] INNER JOIN Sales.SalesOrderDetail SD ON SD.SalesOrderID = SOH.SalesOrderID INNER JOIN Production.Product P ON SD.ProductID = P.ProductID WHERE (SOH.SalesOrderID BETWEEN (@SalesOrderIDStart) AND (@SalesOrderIDEnd))
La query del set di dati restituisce i dati per più ordini di vendita in un intervallo.
Per configurare il parametro del report @SalesOrderIDStart
Aprire Proprietà parametri per @SalesOrderIDStart.
Impostare Messaggio di richiesta su ID primo ordine?
Impostare Tipo di dati su Integer.
In Valori predefiniti aggiungere un valore e impostarlo su 57030.
Per configurare il parametro del report @SalesOrderIDEnd
Aprire Proprietà parametri per @SalesOrderIDEnd.
Impostare Messaggio di richiesta su ID ultimo ordine?
Impostare Tipo di dati su Integer.
In Valori predefiniti aggiungere un valore e impostarlo su 57032.
Aggiungere nomi e numeri all'intestazione di pagina
Per aggiungere i nomi di pagina
Nell'intestazione di pagina, alla casella di testo contenente [&ReportName], aggiungere il testo seguente in una nuova riga: Nome pagina:.
Nel riquadro Dati report espandere Campi predefiniti e trascinare PageName accanto al testo appena aggiunto.
Fare clic sullo sfondo del report per visualizzare Proprietà report nel riquadro Proprietà.
In InitialPageName digitare SalesOrder.
Nel riquadro di raggruppamento fare clic sul gruppo SalesOrderID. Verificare che le proprietà Membro Tablix siano visualizzate nel riquadro Proprietà.
Espandere Gruppo, trovare PageName e digitare =Fields!SalesOrderNumber.Value.
Se il file viene esportato in Excel, i nomi delle schede si basano sul nome della pagina.
Per aggiungere i numeri di pagina
All'intestazione di pagina aggiungere una casella di testo con il testo seguente:
Pagina ordine di vendita: [&PageNumber] di [&TotalPages]
Pagina di report: [&OverallPageNumber] di [&OverallTotalPages]
Nel riquadro di raggruppamento fare clic sul gruppo SalesOrderID.
Nel riquadro Proprietà verificare che un Membro Tablix sia selezionato. Espandere Gruppo, PageBreak e impostare ResetPageNumber su true.
Durante lo scorrimento delle pagine del report, sono visualizzati sia il numero di pagina del gruppo sia quello dell'intero report.
Aggiungere istruzioni per l'utente del report
Per aggiungere istruzioni per l'utente del report su come tornare al report principale
Al livello immediatamente inferiore rispetto all'intestazione di pagina aggiungere una casella di testo con le istruzioni per l'utente finale su come tornare al report master. Aggiungere il testo seguente:
Utilizzare il pulsante Indietro del browser per tornare al report principale.
Formattare le caselle di testo in base alle esigenze.
Aggiungere e configurare un elenco
Per aggiungere un elenco con una riga di gruppo
Sotto le istruzioni per attivare o disattivare il testo dello scenario, inserire un Elenco.
Per impostazione predefinita, l'elenco contiene una sola cella della Tablix in una riga di dettaglio. Nei passaggi 2-6 verrà aggiunta una riga di gruppo e verrà rimossa la riga di dettaglio in modo che l'elenco contenga una sola cella della Tablix in una riga di gruppo.
Dal set di dati SalesOrder trascinare [SalesOrderID] in Gruppi di righe nel riquadro di raggruppamento e rilasciarlo al di sopra del gruppo di dettagli.
Nel riquadro di raggruppamento fare clic con il pulsante destro del mouse sul gruppo Dettagli e scegliere Elimina gruppo.
Nella finestra di dialogo Elimina gruppo fare clic su Elimina gruppo e righe e colonne correlate.
Nell'elenco selezionato verificare che nell'handle di riga sia visualizzata una parentesi singola che indica un solo gruppo di righe.
Fare clic con il pulsante destro del mouse sull'handle per la prima colonna, quindi scegliere Elimina colonne.
Nella finestra di dialogo Elimina colonne fare clic su Elimina solo colonne.
La Tablix dispone ora di una singola cella che contiene un rettangolo e viene raggruppata per [SalesOrderID]. Questo rettangolo è il contenitore per le informazioni su un solo ordine di vendita. Nei passaggi successivi a tale contenitore verranno aggiunti i dettagli dell'intestazione di ordine di vendita e dell'ordine di vendita.
Fare clic con il pulsante destro del mouse sulla cella, quindi scegliere Proprietà rettangolo.
Impostare il nome su OrderHeader_Contents.
Nel riquadro di raggruppamento fare clic con il pulsante destro del mouse sul gruppo SalesOrderID e aprire Proprietà gruppo.
In Interruzioni di pagina selezionare Tra ogni istanza di un gruppo.
In base alle caratteristiche di progettazione, ogni ordine di vendita inizia in una nuova pagina.
Per verificare la configurazione dell'elenco
Fare clic sulla cella vuota nell'elenco e, nella barra degli strumenti, impostare Colore di sfondo su Bianco fumo. Durante l'utilizzo degli elementi nidificati in un rettangolo, è possibile visualizzare il contenitore.
Per verificare la configurazione dell'elenco, effettuare le operazioni seguenti:
Dal set di dati SalesOrder trascinare SalesOrderID e TotalDue nel rettangolo.
Fare clic con il pulsante destro del mouse su SalesOrderID, scegliere Riepiloga per, quindi fare clic su Primo.
Poiché si tratta di una riga di gruppo, utilizzare le funzioni di aggregazione per i campi di un'espressione.
Formattare TotalDue come valuta.
Eseguire il report.
Per ogni istanza dell'ordine di vendita, l'elenco viene visualizzato in una nuova pagina mostrando il numero dell'ordine di vendita e le vendite totali. Devono essere presenti tre pagine, una per ogni ordine di vendita: 57030, 57031 e 57032. Mentre si scorrono le pagine del report, i valori dell'intestazione di pagina cambiano.
Quando si utilizza questo report per fornire i dettagli per un singolo ordine di vendita, impostare @SalesOrderIDStart e @SalesOrderIDEnd sullo stesso SalesOrderID.
In Visualizzazione della struttura eliminare le caselle di testo dall'elenco.
Compilare il layout dell'intestazione dell'ordine
Il layout dell'intestazione dell'ordine verrà compilato in due contenitori rettangolari separati che verranno poi combinati. Successivamente, il rettangolo esterno verrà aggiunto all'elenco.
Un contenitore rettangolare padre per il logo, il numero di ordine e il rettangolo OrderHeaderData.
Un contenitore rettangolare denominato OrderHeaderData per i campi dati dell'intestazione dell'ordine. Durante la compilazione di questo layout, è possibile prevedere le informazioni nelle tre sezioni orizzontali seguenti:
Informazioni sulla fatturazione e sulla spedizione
Informazioni sui contatti
Informazioni rimanenti: data, venditore, numero dell'ordine di acquisto e metodo di spedizione
Per compilare l'intestazione dell'ordine in un contenitore rettangolare
Inserire un rettangolo all'esterno dell'elenco.
Spostare il logo dall'intestazione di pagina nel rettangolo.
Inserire una casella di testo con il testo seguente:
Ordine di vendita
Numero di ordine: [SalesOrderNumber]
Trascinare il logo nel lato sinistro del contenitore e la casella di testo nel lato destro. Formattare in base alle esigenze.
Per aggiungere un rettangolo per i campi dati dell'intestazione dell'ordine
All'esterno dell'elenco inserire un Rettangolo e impostare il nome su OrderHeaderData.
Espandere il rettangolo nella pagina per fare spazio a tutte le informazioni di intestazione dell'ordine di vendita.
In questo rettangolo aggiungere ogni sezione orizzontale delle informazioni descritta nelle procedure successive.
Per compilare la sezione relativa alle informazioni sulla fatturazione e sulla spedizione
Aggiungere una casella di testo. In modalità di modifica digitare Fatturare a:
Aggiungere una casella di testo contenente le righe di testo seguenti:
[Name]
[BillAddress1]
[BillCity], [BillStateProvince] [BillPostalCode]
[BillCountryRegion]
Aggiungere una casella di testo. In modalità di modifica digitare Spedire a:
Aggiungere una casella di testo contenente le righe di testo seguenti:
[Name]
[ShipAddress1]
[ShipCity], [ShipStateProvince] [ShipPostalCode]
[ShipCountryRegion]
Allineare le parti superiori di queste caselle di testo.
Per compilare la sezione relativa alle informazioni di contatto del negozio
Aggiungere una casella di testo. In modalità di modifica digitare Contatto:
Inserire un Sottoreport ed effettuare le operazioni seguenti:
Nella pagina Generale selezionare il sottoreport Store_Contacts_2008R2.
Nella pagina Parametri aggiungere un parametro.
Impostare Nome su StoreID e Valore su [BusinessEntityID].
Allineare la parte superiore della casella di testo e il sottoreport.
Per compilare la sezione relativa alle informazioni rimanenti
Aggiungere una casella di testo contenente le righe di testo seguenti:
Data
Testo segnaposto. Impostare l'etichetta su DataElaborazione e il valore su [&ExecutionTime].
Aggiungere una casella di testo contenente le righe di testo seguenti:
Data ordine
[OrderDate]
Aggiungere una casella di testo contenente le righe di testo seguenti:
Venditore
[SalesPerson], [JobTitle]
[PhoneNumber]
Aggiungere una casella di testo contenente le righe di testo seguenti:
Ordine di acquisto
[PurchaseOrderNumber]
Aggiungere una casella di testo contenente le righe di testo seguenti:
Metodo di spedizione
[ShipMethod]
Allineare le parti superiori di queste caselle di testo e modificarne la larghezza in base alle esigenze.
Per combinare le informazioni sull'intestazione dell'ordine e spostarle nell'elenco
Selezionare il rettangolo OrderHeaderData e trascinarlo sotto il logo.
Trascinare il rettangolo dell'intestazione dell'ordine di vendita nell'elenco.
Il rettangolo con il logo si espande per includere i dati dell'ordine.
La cella dell'elenco si espande per includere le informazioni sull'intestazione dell'ordine di vendita.
Compilare il layout dei dettagli dell'ordine di vendita
Visualizzare le voci, incluso un numero di voce, per ogni ordine di vendita.
Per aggiungere una tabella contenente le voci
Nell'elenco selezionare l'handle di riga ed espandere l'altezza della riga.
Inserire una Tabella sotto l'intestazione dell'ordine di vendita nello spazio appena creato.
Nella tabella trascinare i dati seguenti dal set di dati SalesOrder nella riga di dettaglio:
[OrderQty]
[ProductNumber]
[ProductName]
[CarrierTrackingNumber]
[UnitPrice]
Aggiungere un testo segnaposto. Impostare l'etichetta su [Subtotal] e il valore sull'espressione seguente: =Fields!OrderQty.Value * Fields!UnitPrice.Value
Aggiungere un testo segnaposto. Impostare l'etichetta su [Discount] e il valore sull'espressione seguente: =0 - Fields!UnitPrice.Value * Fields!OrderQty.Value * Fields!UnitPriceDiscount.Value
[LineTotal]
Nota
Questa casella di testo è denominata ItemTotal. Il nome di tale casella di testo verrà utilizzato in un secondo momento quando si scriverà un'espressione per calcolare il totale di tutti gli elementi nella pagina.
Inserire una colonna all'inizio della tabella.
Nell'intestazione di colonna digitare Riga.
Nella riga della casella di testo digitare =RowNum("OrderDetail")
Formattare in base alle esigenze.
Per aggiungere una riga del totale
Fare clic con il pulsante destro del mouse sulla cella che contiene il campo [Qty], quindi scegliere Aggiungi totale.
Nella casella di testo in corrispondenza dell'ultima riga della quarta colonna digitare Sconto totale:.
Nella casella di testo adiacente aggiungere un testo segnaposto.
Impostare l'etichetta su Sconto totale e il valore su =Sum(Fields!UnitPrice.Value * Fields!OrderQty.Value * Fields!UnitPriceDiscount.Value).
Nell'ottava colonna dell'ultima riga della casella di testo digitare Totale:.
Nella casella di testo adiacente aggiungere un testo segnaposto.
Impostare l'etichetta su Totale complessivo e il valore su [Sum(LineTotal)].
Formattare in base alle esigenze.
Rimuovere lo spazio aggiuntivo tra caselle di testo, tabelle e rettangoli.
Definire un'interruzione di pagina ogni 25 righe nella tabella dei dettagli dell'ordine di vendita
Per impostare un'interruzione di pagina ogni 25 righe per il gruppo di dettagli
Nel riquadro di raggruppamento fare clic con il pulsante destro del mouse su OrderDetails_Details_Group, scegliere Aggiungi gruppo, quindi fare clic su Gruppo padre.
Aggiungere un gruppo e utilizzare l'espressione seguente: =Ceiling(RowNumber("OrderDetail")/25)
Nella pagina Interruzioni di pagina selezionare Tra ogni istanza di un gruppo.
Definire una variabile del report per RunningTotal
Per aggiungere una variabile del report
Fare clic con il pulsante destro del mouse sullo sfondo del report e aprire Proprietà report.
Nella pagina Variabili aggiungere una variabile di report denominata RunningTotal.
Impostare Valore su =0.0
Definire il codice personalizzato per calcolare i totali parziali
Per aggiungere codice personalizzato
Fare clic con il pulsante destro del mouse sullo sfondo del report e aprire Proprietà report.
Nella pagina Codice aggiungere il codice seguente:
Public Function AddToVariable(var As Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variable, ByVal increment As Double) As Double var.Value = var.Value + increment return var.Value End Function Public Function GetOrResetVariable(var As Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variable, ByVal executeReset As Boolean) if executeReset then var.Value = 0 end if return var.Value End Function
Aggiungere la descrizione
Per aggiungere la descrizione
Inserire un Rettangolo nel piè di pagina.
Spostare la casella di testo con la descrizione nel rettangolo.
Sostituire la descrizione con il testo seguente:
Scopo: Report dettagli. Visualizza i dettagli per un intervallo di ordini e rappresenta un report drill-through per un ordine di singole vendite di Employee_Sales_Summary_2008R2. Include layout in formato libero, Tablix utilizzata come elenco e tabella, un sottoreport, variabili di sessione per il calcolo dei totali di pagina parziali, codice personalizzato, immagine, interruzioni di pagina basate su espressioni in base al numero di righe di dettaglio, nomi di pagina, numerazione di pagine con il report e all'interno del gruppo e testo nascosto in modo condizionale.
Fare clic sullo sfondo del report per visualizzare Proprietà report nel riquadro Proprietà.
In Descrizione incollare il testo della descrizione.
Visualizzare i totali di pagina parziali nel piè di pagina
Per aggiungere i totali di pagina parziali
Aggiungere una casella di testo per il testo seguente: Totale di pagina precedente
Aggiungere una casella di testo adiacente con l'espressione seguente:
=Code.GetOrResetVariable(Variables!RunningTotal, Globals!OverallPageNumber = 1)
Aggiungere una casella di testo per il testo seguente: Totale di pagina corrente
Aggiungere una casella di testo adiacente con l'espressione seguente:
=Sum(ReportItems!ItemTotal.Value)
Aggiungere una casella di testo con il testo seguente: Totale di pagina parziale
Aggiungere una casella di testo adiacente con l'espressione seguente:
=Code.AddToVariable(Variables!RunningTotal, Sum(Reportitems!ItemTotal.Value))
Aggiungere una casella di testo spaziatore
Il testo della descrizione dispone della visibilità condizionale. Quando la descrizione è nascosta, il testo del totale di pagina esegue il rendering sul lato sinistro della pagina. Per mantenere la posizione del testo del totale di pagina sulla destra, è necessario aggiungere una casella di testo che non disponga della visibilità condizionale.
Per aggiungere una casella di testo spaziatore
Nel rettangolo aggiungere una casella di testo aggiuntiva sopra la descrizione.
Impostare la larghezza della casella di testo sulla stessa larghezza del rettangolo.
La casella di testo vuota consente di mantenere la posizione dei totali parziali quando la descrizione non è visibile.
Visualizzare in anteprima e verificare
Per distribuire e verificare il report
Visualizzare l'anteprima del report e verificare gli elementi seguenti:
Il rendering delle aree dettagli e dell'intestazione negozio viene eseguito come previsto.
Nel sottoreport vengono visualizzate le informazioni di contatto del negozio.
I totali di pagina vengono calcolati per la pagina corrente e la pagina precedente.
I totali di pagina eseguono il rendering nello stesso percorso indipendentemente dalla visibilità del testo della descrizione.
Passaggi successivi
È stata completata la compilazione di questo report. Per compilare gli altri report di esempio di AdventureWorks, vedere Esercitazioni: Creazione dei report di esempio di AdventureWorks 2008R2 (SSRS).
Cronologia modifiche
Contenuto aggiornato |
---|
|