Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software [email protected].
-
Upload
antonia-giordani -
Category
Documents
-
view
214 -
download
0
Transcript of Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software [email protected].
Sql Server 2005
La Piattaforma ApplicativaLa Piattaforma Applicativa
Davide Mauri Factory Software
2
Agenda
T-SQL Ranking / Top n CTE Pivot / Unpivot Try … Catch Encryption
XML Xml data type XQuery Full Text Search
3
Agenda
Integration Services Data e Control Flow Connections Task Transformations
Reporting Services Report Manager Sviluppo dei report con Visual Studio Report Builder
4
T-SQL
5
FUNZIONI di RANKING
RANK DENSE_RANK NTILE ROW_NUMBER
6
RANK
Ritona il “posizionamento” di ogni riga all’interno di una partizione
PARTITION BY definisce il criterio di partizionamento
ORDER BY stabilisce l’ordine in cui viene appicato il rank alle righe
Sintassi:SELECT
select_list,RANK() OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1
7
RANK
RANK = 1 + numero di rank che precedono la riga
Se due o più righe sono alla pari, ricevono lo stesso rank
I rank potrebbero non essere numeri consecutivi
8
DENSE_RANK
RANK = 1 + numero di DISTINCT rank che precedono la riga
Se due o più righe sono alla pari, ricevono lo stesso rank
Non vi sono “gap” nei rank
SELECT select_list,DENSE_RANK() OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1
9
NTILE
Distribuisce le righe di una partizione ordinata in uno specificato numero di gruppi
Se il numero di righe non è divisibile per il numero di gruppi I gruppi avranno ampiezza differente Prima compariranno i gruppi con più elementiSELECT
select_list,NTILE(nr_gruppi) OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1
10
ROW_NUMBER
Ritorna il numero sequenziale di una riga all’interno di una partizione ordinata
SELECT select_list,ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1
11
TOP
Specifica che solo la prima parte di un result set verrà ritornata
PERCENT WITH TIES (+ order by) TOP @variabile
12
COMMON TABLE EXPRESSION (CTE) Result set temporaneo Non è salvato come oggetto Rimane in vita solo per la durata della
query che lo ospita Migliora la leggibilità e la manutenibilità
delle query
13
CTE: Utilizzo
Query ricorsive Anchor Member e Recursive Member Quert hint: option (maxrecursion n)
Sostituto delle view (quando non serve salvare i metadati)
Referenziare lo stesso result set più volte nella query
14
CTE: Sintassi
Struttura della CTE:
WITH nome_cte [(nome colonna,…)] AS(query che definisce la CTE)
Utilizzo:
SELECT * FROMnome_cte
15
PIVOT
Ruota un’espressione tabellare trasformando i valori univoci di una colonna nelle colonne dell’espressione di output
Effettua le aggregazioni che costituiscono l’output SELECT VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS
Emp3, [231] AS Emp4FROM ( SELECT PurchaseOrderID, EmployeeID, VendorID FROM Purchasing.PurchaseOrderHeader) pPIVOT(
COUNT (PurchaseOrderID)FOR EmployeeID IN ( [164], [198], [223], [231] )) AS pvt
16
UNPIVOT
Effettua l’operazione inversa rispetto a PIVOT
Ruota le colonne in righe I valori nulli non possono essere usati
SELECT VendorID, Employee, OrdersFROM (SELECT VendorID, Emp1, Emp2, Emp3, Emp4 FROM pvt) pUNPIVOT (Orders FOR Employee IN (Emp1, Emp2, Emp3, Emp4, Emp5))AS unpvtGO
17
Error handling
Gestione simile al C# / VB.NET attraverso TRY e CATCH: Se si verifica un errore nel blocco TRY il
controllo passa al blocco CATCH. Eseguito il blocco CATCH il controllo passa al
codice che sta dopo END CATCH
Blocco TRY
Blocco CATCH
CodiceSuccessivo a END CATCH
Exception
Nessuna Exception
18
Sintassi di TRY...CATCH
Sintassi:BEGIN TRY...END TRYBEGIN CATCH.... Gestione dell’errore .....END CATCH
Il batch è unico!!!!
19
Try...catch TIPS
Ogni TRY..CATCH deve essere contenuto in un unico BATCH, Stored Procedure, Trigger
I blocchi TRY…CATCH possono essere nidificati
Errori con severity <= 10 sono warning che non vengono intercettati dal blocco CATCH
Errori con severity >= 20 che causano l’interruzione della connessione: Non sono gestiti da TRY…CATCH Tuttavia finchè la connessione non è interrotta
il blocco CATCH funziona.
20
Try...catch e XACT_STATE
Nel blocco catch è bene controllare lo stato della transazione attraverso XACT_STATE() 1: Transazione attiva, la sessione può
compiere qualsiasi azione (COMMIT o ROLLBACK)
0: Nessuna transazione attiva -1: Esiste una transazione aperta, ma NON
può essere eseguito il COMMIT. BEGIN CATCHIF (XACT_STATE()) = -1 ROLLBACK TRANSACTION;IF (XACT_STATE()) = 1 COMMIT TRANSACTION;END CATCH
21
Informazioni sugli errori
ERROR_MESSAGE() ERROR_NUMBER() ERROR_SEVERITY() ERROR_STATE() ERROR_PROCEDURE() ERROR_LINE() Ritornano informazioni solo all’interno di
un blocco CATCH. Posso utilizzate una stored procedure per il
logging
22
TRY...CATCH: tips
Utilizzo di RAISERROR per il rethrow
Intercetta: Deadlock errors
Non intercetta: Errori di compilazione tipo syntax error Statement level recompilation errors (object
name resolution errors)
23
ENCRYPTION
Possibilità di criptare i valori tramite l’utilizzo di EncryptKey DecryptKey
Utilizzabili negli statement DML
Solo chi è in possesso della chiave giusta potrà vedere il valore Gli altri vedranno NULL
24
XML
25
XML in un Database Relazionale? E’ lo standard de facto
Utilizzato come Lingua Franca
Dati trasmessi e ricevuti come XML Sempre più utilizzato
I database prima o poi devono cominciare a fare i conti con questa realtà Allora meglio farlo nel modo migliore
26
XML in un Database Relazionale? XML può vivere all’interno del db in 3 modi
1. TEXT Come accade con Sql Server 2000 Si perdono le funzionalità intrinsche di XML
27
XML in un Database Relazionale?2. RELATIONAL FORMAT
Se possibile un documento può essere scomposto in tabelle
Si sfruttano le capacità del motore relazionale Si ottiene tramite OPENXML o XMLBULKLOAD
(SqlXml)
28
XML in un Database Relazionale? 3. XML Data Type
Utilizzo di tutte le funzionalità di xml Supporto ricerche full-text Supporto validazione Utilizzabile in ogni situazione
Colonne, Parametri, Variabili, Return Value
Attenzione non abusarne Violazione della forma normale
29
XML in un Database Relazionale? Perchè dovrei?!?!
Memorizzazione di documenti XML Memorizzazione di dati destrutturati Sistemi Integrati
B2B (Business To Business)/B2C (Business To Consumer)
A2A (Application To Application) Messaging (SOAP)
Occhio a non sentirsi “obbligati” Ogni tanto la si cerca di usare solo perchè è
nuova o perchè non si conoscono alternative
30
XML in un Database Relazionale
Una colonna XML può memorizzare well-formed XML Fragments Documents
31
XML in un Database Relazionale
Pieno supporto e gestione dell’encoding-- This works correctlyINSERT INTO xml_tab VALUES(4,'<?xml version="1.0" encoding="utf-8"?><doc1> <row au_id="111-11-1111"/></doc1>')
-- This fails, encoding does not agree w/variable typeINSERT INTO xml_tab VALUES(5,N'<?xml version="1.0" encoding="utf-8"?><doc1> <row au_id="111-11-1111"></row></doc1>')
32
Typed & Untyped XML
E’ possibile fare in modo che il tipo XML sia validato da un XML Schema
Per validare i dati inseriti
Per assicurarsi che tutte le entità abbiano la stessa struttura Definizione dei tipi di dati utilizzati
33
Constrained XML
E’ possibile anche utilizzare il vincolo CHECK Constrained XML
CREATE TABLE docs(pk INT PRIMARY KEY, xCol XML not nullCONSTRAINT CK_name CHECK (xCol.exist('/book/author[first-name = last-name]') = 0))
34
XML Schema Collections
Gli XML Schema utilizzati devono essere nel database
CREATE XML SCHEMA COLLECTION Il nome verrà utilizzato nell’associazione con il
tipo di dato Lo schema deve essere inserito come literal
35
XML Schema CollectionsCREATE XML SCHEMA COLLECTION geocoll '<xs:schema ...
targetNamespace= urn:geo>
... </xs:schema>'
literal schematargetNamespace
CREATE TABLE Locations( location xml(geocoll) ...)
reference toschema collection
Memorizzazione nella tabelle di sistema sys.xml_schema_collections sys.xml_schema_namespaces
36
XML Schema Sample<xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema" targetNamespace="urn:geo" xmlns:tns="urn:geo"> <xs:simpleType name="dim"> <xs:restriction base="xs:int"/> </xs:simpleType> <xs:complexType name="Point"> <xs:sequence> <xs:element name="X" type="tns:dim"/> <xs:element name="Y" type="tns:dim"/>
</xs:sequence> </xs:complexType> <xs:element name="Point" type="tns:Point"/></xs:schema>
for namespace urn:geo
similar to sql type,
structured type,i.e. a tree
element that mightappear in xml data
37
Utilizzo di Typed XML
CREATE TABLE point_tab( id int IDENTITY primary key, -- geocoll include schema for 'urn:geo' namespace thepoint xml(CONTENT, geocoll)GO
-- this works, schema-valid PointINSERT INTO point_tab VALUES( '<Point xmlns="urn:geo"><X>10</X><Y>20</Y></Point>')
-- this insert fails, value foo is not a dim (integer)INSERT INTO point_tab VALUES( '<Point xmlns="urn:geo"><X>10</X><Y>foo</Y></Point>')
38
XML Schema Collections
L’ XML schema non è realmente memorizzato nel database Il contenuto è scomposto e memorizzato in
tabelle di sistema Solo le imformazioni fondamentali vengono
memorizzate
Informazioni non memorizzate Comments, Processing Instructions <xs:annotation>
39
XML Schema Collections
Ottenere lo schema memorizzato sys_schema_namespace(…, …)
Non è lo schema orginale Ma è Functionally Equivalent
select xml_schema_namespace(N’dbo’, N’geocollection’)
40
FOR XML
Risultato memorizzabile in una varibile Tramite la keywork TYPE
Nuova keywork PATH per effettuare lo shaping dell’XML Più semplice da usare che EXPLICIT
DECLARE @x xmlSET @x = SELECT * FROM authors FOR XML AUTO, TYPE
41
FOR XML
SELECT au_id as [@authorid], au_fname as [name/firstname], au_lname as [name/lastname]FROM authors FOR XML PATH
<!– one row per selected row --><row authorid="111-11-1111"> <name> <firstname>Bob</firstname> <lastname>Smith</lastname> </name></row>...
42
XML BULK LOAD
I dati XML possono essere popolati tramite BULK LOAD
43
XQuery
XQuery è l’evoluzione di XPath Più correttamente è un SuperSet
Supporto di un subset di XQuery implementazione basata con il draft Novembre
2003 http://www.w3.org/TR/xquery
Permette di poter fare query su dati semistrutturati e/o destrutturati XML
44
XQuery
XQuery fatta da “FLWOR” Expressions: FOR LET (not supported) WHERE ORDER BY RETURN
Può lavorare direttamente sull’ XML Data Type sia come variabile sia come colonna
45
XQuery
Possibilità di utilizzare sia query XPath che FLWOR
(: this is a valid XQuery :)/people/person[age > 30]
(: so is this FLWOR expression :)for $p in /people/personwhere $p/age > 30order by $p/age[1]return $p/name
46
XQuery-- returns <li>moe in record number x</li> -- where x is the ID column, or blank columnSELECT xml_col.query(' for $b in //person where $b/@name=“davide" return <li>{ data($b/@name) } in record number {sql:column("xml_tab.id")}</li> ') FROM xml_tab
-- returns <li>moe is a stooge</li> DECLARE @occupation VARCHAR(50)SET @occupation = ' is a singer'SELECT xml_col.query(' for $b in //person where $b/@name=“eric" return <li>{ data($b/@name) } {sql:variable("@occupation") }</li> ') FROM xml_tab
47
XQuery & Xml Data Type
Xml Data Type Functions exist() value() query() nodes() modify()
SELECT xmlCol.query(‘/Root/ProdDesc/*’)
FROM myTable
48
xml.exist()
xml.exist usa XML type and XQuery expression false se la query restituisce NULL true negli altri casi
Può essere utilizzato in constraint di tipo CHECK
49
xml.exist()
-- pdoc must have a person element-- as a child of the people rootCREATE TABLE xmltab( id INTEGER PRIMARY KEY, pdoc XML CHECK (pdoc.exist('/people/person')=1))-- okinsert xmltab values( 1, '<people><person name="bob"/></people>')
-- fails, no personsinsert xmlpeople values( 2, '<people><emp name="fred"/></people>')
Supporto per DEFAULT
50
xml.value()
xml.value restituisce un tipo di dato nativo SQL Server e scalar input: XQuery, SQL Type restituisce un tipo scalare o NULL non può restituire un tipo XML
Utilizzo predicati (es. WHERE Clause) result values views
51
xml.value()-- insert some rowsINSERT xml_tab VALUES('<people><person name=“alessandro"/></people>')INSERT xml_tab VALUES('<people><person name=“davide"/></people>')INSERT xml_tab VALUES('<people><person name=“franco"/></people>')
-- this query SELECT id, xml_col.value('/people/person/@name','varchar(50)') AS nameFROM xml_tab
-- yields this resultset id name--------------------------1 alessandro2 davide3 franco
52
xml.query()
xml.query resituisce un XML data type input: XQuery l’xml risultante può essere un XML Fragment può costruire nuovi elementi
<Invoice> <LineItem>Soda</LineItem> <LineItem>Ice</LineItem></Invoice>
Colonna Invoice, Tabella Invoices
SELECT invoice.query('Invoice/LineItem') FROM Invoices
<LineItem>Soda</LineItem><LineItem>Ice</LineItem>
53
xml.nodes()
scompone il contenuto di un XML data type simile (concettualmente) a value(), ma
produce dei nodi, non un valore scalare il risultato è un rowset
il risultato può essere application al comando T-SQL CROSS APPLY si ottengono funzionalità simili ad OPENXML performance migliori
54
xml.nodes()
--input xml in variable @x<row id=“1”><name>alessandro</name><name>davide</name></row><row id=“2”><name>franco</name></row><row id=“3/>
-- this query SELECT
... FROM
@x.nodes(‘//row’) T(rows)
-- yields this resultset id name--------------------------1 alessandro1 davide2 franco
55
Using Relational Data in XQuery
SQL Server XQuery può utilizzare sia dati XML che dati relazionali sql:variable: accesso a variabili T-SQL sql:column: accesso a columns value
limitatamente alla riga in uso
56
Using Relational Data With XML-- returns <li>moe in record number x</li> -- where x is the ID column, or blank columnSELECT xml_col.query(' for $b in //person where $b/@name=“Eric" return <li>{ data($b/@name) } in record number {sql:column("xml_tab.id")}</li> ') FROM xml_tab
-- returns <li>moe is a stooge</li> DECLARE @occupation VARCHAR(50)SET @occupation = ' is a stooge'SELECT xml_col.query(' for $b in //person where $b/@name=“Bruce" return <li>{ data($b/@name) } {sql:variable("@occupation") }</li> ') FROM xml_tab
57
XQuery DML
58
XQuery DML
xml.modify permette la modifica di XML XQuery non ha standard DML vengono utilizzati gli standard proposti
insert, delete, replace operators all’interno di espressioni XQuery
insert before or after element first or last sibling subelements and attributes
must be a single node replace
elements or attributes solo simple types “value-of" clause per aggiornare i valori
59
XQuery DML - Original Document
declare @x xmlset @x = '<Invoice> <InvoiceID>1000</InvoiceID> <CustomerName>Jane Smith</CustomerName> <LineItems> <LineItem> <Sku>134</Sku> <Quantity>10</Quantity> <Description>Chicken Patties</Description> <UnitPrice>9.95</UnitPrice> </LineItem> <LineItem> <Sku>153</Sku> <Quantity>5</Quantity> <Description>Vanilla Ice Cream</Description> <UnitPrice>1.50</UnitPrice> </LineItem> </LineItems></Invoice>'
60
XQuery DML - Using xml.modify
-- use modify to insert a subelementSET @x.modify( 'insert <InvoiceDate>2002-06-15</InvoiceDate> into /Invoice[1] ')
-- or insert an attributeSET @x.modify('insert attribute status{"backorder"} into /Invoice[1] ')
-- this deletes all LineItem elementsSET @x.modify('delete /Invoice/LineItems/LineItem')
-- change the value of the CustomerName elementSET @x.modify('replace value of /Invoice[1]/CustomerName[1]/text()[1] with "John Smith" ')
61
XML filter
Index e query su istanze XML Analisi sul contenuto di un token I tag (attributi inclusi) sono rimossi
Sintassi — come per le altre colonne CREATE FULLTEXT INDEX ON docs (xDoc)
XML Full Text Search
62
Può essere combinata con XQuery Full-text search come filtro, poi XQuery
search
SELECT R.X.query ('//sec[@num=12]')FROM (SELECT * FROM docs WHERE contains (xDoc, 'Wrd1 Wrd2')) R(X)
Supporta l’attributo xml:lang Utilizza correttamente il linguaggio
SELECT * FROM docs WHERE contains (xDoc, 'Visionen',
LANGUAGE 'German')
XML Full Text Search
63
Integration Services
64
Architettura ed Object Model
Separazione dei package in due aree Control Flow Data Flow
Modello ad oggetti facilmente estendibile basato sul .NET Framework Non limitato ai soli Custom Task
65
Architettura ed Object Model
Supporto per sorgenti e destinazioni multiple
Supporto nativo XML, SQL CE 2005, AS 2005 come sorgenti/destinazione dati
Introduzione delle DTS Expression Una sorta di linguaggio interno Vagamente simile a C#
66
Ambiente di sviluppo
BI Development Studio Praticamente è Visual Studio
Designer molto più ordinato tramite l’utilizzo di aree “tematiche”
Supporto per sistemi di gestione del codice Visual SourceSafe
Migliorate le capacità di debugging
67
Package Elements
Numerosi nuovi task Data Flow Data Preparation Workflow Sql Server Scripting Analisys Server Maintenance
Aggiunto il supporto per i Containers Loop, For Each, Sequence, ecc…
68
Tools
Wizard per: Configurazione dei Package Deployment e Update Migrazione dai DTS di SQL Server 2000
DTExecUI e DTExec Esecuzione dal prompt
DTUtil Gestione dal prompt (copy, crypt, sign…)
69
Package Management
E’ possibile utilizzare dei Folder per fare ordine
Logging non limitato alle trasformazioni
Supporto nativo per la configurazione del package senza necessità di utilizzo dell’ambiente di editing
Package Checkpointing
70
Sviluppo
Molti elementi permettono l’utilizzo di un “Linguaggio” interno: DTS Expressions
Possibilità di creare workflow molto complessi
Possibilità di gestire gli eventi (es. OnError)
Programmabili ed estendibili con .NET
71
Packages
72
Package Content
Un Package può contenere: Control Flow
Task Container
Data Flow Trasformations
Connections Configurations Variables
73
Operational Surfaces
Control Flow Data Flow Event Handlers Package Explorer Execution Results Connection Managers Properties
74
Control Flow
Descrive l’intero processo definito dal Package
Organizza i task e specifica percorsi e/o precedenze
Il workflow è basato sul risultato di un’espressione DTS Praticamente nessun limite alla fantasia!
75
Data Flow
Descrive il flusso dei dati (Pipeline)
Specifica dettagliatamente tutto ciò che riguarda la manipolazione dei dati
E’ un task del Control Flow
Source Transform Destination
76
Connection Managers
Le connessioni visualizzate in uno spazio dedicato
Non solamente dedicate ai database Es. SMTP Connection Manager, FTP Connection
Manager
Condivise sia dagli elementi del Control Flow che del Data Flow
77
Control Flow Elements
Tre diversi tipi di Container:
Possibilità di effettuare dei loop: For Loop ForEach Loop
Raggruppamento di task Sequence
78
Control Flow Elements
Numerosi nuovi task che evitano la scrittura di codice
Data Flow Task Per la definizione dettagliata dei processi di
ETL
File System Task Per la gestione dei file e delle directory (Create,
Copy, Move, Delete, Rename, Set Attributes)
79
Control Flow Elements
Script Task Esecuzione di script scritti in VB.NET Editor *finalmente* evoluto
Send Mail Task Supporto SMTP (Era Ora! )
FTP Task Supporto per tutte le operazione non solo il
GET
80
Control Flow Elements
WMI Data Reader Task Per ottenere informazioni da WMI
WMI Event Watcher Task Per monitorare i dati di WMI e rispondere ai
cambiamenti
XML Task Per operare su documenti XML (XSLT, Merge,
Patch, Diff, Validate, XPath)
81
Data Flow Elements
Conditional Split Transform Per processare una riga secondo diversi criteri
Multicast Transform Permette di processare una riga più volte e con
diversi meccanismi
Union All Transform Prende più input e di generare un solo output
82
Data Flow Elements
Sort Transformation Per ordinare le righe
Count Rows Transformation Per contare le righe
Derived Column Per modificare o creare colonne
83
Data Flow Elements
Fuzzy Grouping Pulisce e standardizza i dati (Es. Rimuove i
duplicati)
Fuzzy Lookup Pulisce ulteriormente i dati (Es.
Standardizzazione, Correzione ed inserimento valori mancanti)
Percentage Sampling Crea dati di prova
84
Data Viewers
Attivi durante il debug
Permettono di interrompere l’esecuzione di un Data Flow visualizzare i dati
E’ possibile vedere anche la distribuzione dei dati con l’ausilio di grafici
85
Reporting Services
86
Reporting Services
Editor Report: BI Dev. Studio Non è obbligatorio in quanto il report è un file
xml Però è praticamente indispensabile
Creare un progetto di tipo “Report Project”
Aggiungere: Data Sources Parametri Reports
87
Reporting Services
Ogni proprietà visibile (e non) può essere modificata tramite l’uso di expressions
Il linguaggio è VB.NET
In più ci sono funzioni aggiunte dall’infrastruttura di SSRS Previous RowNumber CountRows
88
Sviluppo
E’ possibile aggiungere funzioni tramite Codice Embedded (VB.NET) External Assembly (Qualsiasi linguaggio .NET)
Per personalizzare il report è possibile utilizzare immagini Memorizzate nel report (embedded) Esterne (link) Memorizzata in un db
89
Reporting Services
Il Report Manager è “solamente” l’applicazione di default fornita da Microsoft
Utilizza il web service per visualizzare i metadati e gestire i report
I report vengono visualizzati in un IFRAME E sono chiamati tramite URL
90
Reporting Services
E’ possibile integrare SSRS in qualsiasi applicazione tramite Chiamate SOAP (Web Services) Chiamate via URL
E’ possibile integrare il tutto con SharePoint Web part disponibile dalla SP2 dei “vecchi” RS
91
Reporting Services
Creazione di report ad-hoc Tramite il Report Builder
Non c’è un liberta “totale” I report possono essere creati sulla base di un
“Report Model” Il “Report Model” contiene i metadati
disponibili Più che sufficiente nel 99% dei casi
Il “Report Model” si crea da Visual Studio
92
Reporting Services
93
Invocazione di Report
E’ possibile accedere a Reporting Services in una soluzione custom in due modalita’: Url access
richiesta via HTTP/GET Web Services
Richiesta via SOAP
94
Invocazione di Report
95
Invocazione di Report
Url Access Report Server URL
Defaults to http://[servername]/ReportServer Report Name
Nome del report Report Parameters
I nomi devono mappare I parametri definiti nel report Es http://servername/ReportServer/ReportName?
CategoryID=1&EmployeeID=1
96
Invocazione di Report
Web Services Esecuzione dei report
GetReportParameters() Render() Anche asincrona
Gestione report CreateReport() GetReportDefinition()
97
Distribuzione dei report
I report possono essere visualizzati Da web, tramite il Report Manager Da applicazioni ad hoc, o integrati in
applicazioni esistenti
…ma possono anche essere loro ad andare dall’interessato Via mail Via network share
Questa funzionalità prendere il nome di Subscription
98
Distribuzione dei report
Le subscription vengono eseguite in base ad una schedulazione Ad hoc Condivisa
La schedulazione fa affidamento sul SQL Server Agent Quindi deve essere attivo! Vengono creati dei Job ad hoc
99
Distribuzione dei report
Distribuzione tramite network share
100
Distribuzione dei report
Distribuzione via email
101
Distribuzione dei report
Le sottoscrizioni guidate (Data-Driven subscription) permettono di impostare a runtime Destinatari Parametri Formati
I dati vengono prelevati tramite query ad hoc La sorgente dati, come al solito, può essere
qualsiasi cosa (SQL Server, Oracle, OLEDB, ODBC)
102
Domande ?
© 2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.