Concetti CSDL
Il linguaggio CSDL (Conceptual Schema Definition Language) è basato su Entity Data Framework, ovvero un'astrazione per la rappresentazione di tipi diversi di dati in modo da rendere possibile l'accesso, l'esecuzione di query o l'esportazione di set di dati diversi. CSDL viene utilizzato per rappresentare modelli tabulari per la creazione di report, essendo particolarmente appropriato per la definizione di applicazioni guidate dai dati.
In questa sezione viene illustrato come applicare Entity Data Model ai modelli tabulari e vengono forniti esempi relativi alla modalità di rappresentazione di un modello in CSDL.
Gli esempi utilizzati per illustrare questi provengono dal database di esempio AdventureWorks, disponibile su Codeplex. Per ulteriori informazioni sugli esempi, vedere Esempi di Adventure Works per SQL Server.
Struttura di un modello in CSDL
Un documento CSDL che descrive un modello di report e i relativi dati inizia con l'istruzione xsd, seguito dalla definizione di un modello.
Il modello è uno spazio dei nomi che contiene le seguenti entità, associazioni e proprietà principali:
In EntityContainer sono elencate le tabelle del modello.
Ogni tabella viene elencata con EntityContainer come EntitySet.
Ogni relazione tra due tabelle viene descritta come AssociationSet che definisce gli endpoint e i ruoli della relazione.
L'elemento EntityType viene esteso per BISM per fornire dettagli aggiuntivi sulle tabelle e sulle relative colonne, incluse le proprietà utilizzate a scopo di ordinamento e visualizzazione.
L'elemento Measure definisce i calcoli che è possibile utilizzare nel modello. Una misura può essere trasformata in un indicatore KPI aggiungendo un set di attributi di visualizzazione speciali tramite il nuovo elemento KPI.
Non sono disponibili rappresentazioni di prospettive distinte. Le colonne e le tabelle non incluse in una prospettiva sono presenti in CSDL, ma contrassegnate con l'attributo Hidden.
Entità, EntitySet ed EntityType
La nozione di un'entità in Entity Data Framework viene estesa per rappresentare colonne e tabelle del modello di dati. Nell'estratto seguente è riportato l'elenco di elementi EntitySet in un modello semplice che contiene solo tre tabelle.
<EntityContainer Name="SimpleModel">
<EntitySet Name="DimCustomer"EntityType="SimpleModel.DimCustomer">
<bi:EntitySet />
</EntitySet>
<EntitySet Name="DimDate" EntityType="SimpleModel.DimDate">
<bi:EntitySet />
</EntitySet>
<EntitySet Name="DimGeography" EntityType="SimpleModel.DimGeography">
<bi:EntitySet />
</EntitySet> />
EntitySet non contiene informazioni su colonne o dati inclusi nella tabella. La descrizione dettagliata delle colonne e delle relative proprietà viene fornita nell'elemento EntityType.
L'elemento EntityType per ogni entità (tabella) include una raccolta di proprietà che definiscono la colonna chiave, il tipo di dati e la lunghezza della colonna, l'utilizzo dei valori Null, il tipo di ordinamento e così via. Ad esempio, nell'estratto di CSDL seguente vengono descritte tre colonne nella tabella Customer. La prima colonna è una colonna nascosta speciale utilizzata internamente dal modello.
<EntityType Name="Customer">
<Key>
<PropertyRef Name="RowNumber" />
</Key>
<Property Name="RowNumber" Type="Int64" Nullable="false">
<bi:Property Hidden="true" Contents="RowNumber"
Stability="RowNumber" />
</Property>
<Property Name="CustomerKey" Type="Int64" Nullable="false">
<bi:Property />
</Property>
<Property Name="FirstName" Type="String" MaxLength="Max" FixedLength="false">
<bi:Property />
</Property>
Per limitare le dimensioni del documento CSDL generato, le proprietà visualizzate più di una volta in un'entità vengono specificate mediante un riferimento a una proprietà esistente, in modo che sia necessario elencare la proprietà una sola volta per EntityType. L'applicazione client può ottenere il valore della proprietà mediante la ricerca dell'elemento EntityType corrispondente a OriginEntityType.
Relazioni
In Entity Data Framework le relazioni sono definite come associazioni tra entità.
Le associazioni dispongono sempre esattamente di due endpoint, ognuno dei quali punta a un campo o una colonna in una tabella. Tra due tabelle sono pertanto possibili più relazioni, se queste ultime dispongono di endpoint diversi. Agli endpoint dell'associazione viene assegnato un nome di ruolo, che indica come viene utilizzata l'associazione nel contesto del modello di dati. Un esempio di un nome di ruolo potrebbe essere ShipTo, in caso di applicazione a un ID cliente correlato all'ID cliente in una tabella Orders.
La rappresentazione CSDL del modello contiene inoltre attributi relativi all'associazione che determinano la modalità di esecuzione del mapping tra le entità in termini di molteplicità dell'associazione. La molteplicità indica se l'attributo o la colonna corrispondente all'endpoint di una relazione tra tabelle si trova sul lato uno o sul lato molti di una relazione. Non sono presenti valori distinti per le relazioni uno-a-uno. Le estensioni BISM per CSDL supportano una molteplicità pari a 0 (ovvero l'entità non è associata ad alcun elemento) oppure 0..1, per indicare una relazione uno-a-uno o uno-a-molti.
Nell'esempio seguente viene rappresentata la definizione CSDL di una relazione tra le tabelle Date e ProductInventory unite in join alla colonna DateAlternateKey. Si noti che, per impostazione predefinita, il nome di AssociationSet è il nome completo delle colonne interessate dalla relazione. È tuttavia possibile modificare questo comportamento quando si progetta il modello, in modo da utilizzare un formato di denominazione diverso.
<AssociationSet Name="ProductInventory_Date_DateKey" Association="Model.ProductInventory_Date_DateKey">
<End EntitySet="ProductInventory" />
<End EntitySet="Date" />
<bi:AssociationSet />
</AssociationSet>
Proprietà di visualizzazione e navigazione
Una parte importante delle estensioni di Entity Data Framework per la modellazione tabulare sono le proprietà per la definizione della presentazione nel livello del report e per la navigazione all'interno delle relazioni tra entità. In genere, quando si crea un modello di dati non si considera importante controllare la modalità di ordinamento o raggruppamento dei dati o quale potrebbe essere il valore predefinito, supponendo che l'ordinamento e gli altri dettagli di presentazione verranno specificati dall'applicazione client. I modelli tabulari di Analysis Services vengono tuttavia progettati per l'integrazione con il client di creazione report Power View e includono proprietà e attributi che supportano la presentazione di entità dal modello di dati nell'area di progettazione del report.
Nelle estensioni per la visualizzazione sono inclusi attributi che consentono di specificare l'aggregazione predefinita da utilizzare con i dati numerici, di indicare che un campo di testo punta all'URL di un'immagine o di specificare il campo utilizzato per l'ordinamento del campo corrente.
Proprietà dei nomi e convenzioni di denominazione
La specifica di CSDL indica che ogni entità dispone di un nome univoco e un identificatore che può essere utilizzato come una chiave. Alcune entità possono inoltre disporre di didascalie utilizzate a fini della visualizzazione e di nomi contestuali che vengono modificati a seconda della posizione in cui viene utilizzata l'entità.
L'elemento Documentazione offre ai progettisti di report la possibilità di fornire una descrizione dell'entità, per consentire agli utenti aziendali di comprendere il significato dei dati. Alcune entità supportano inoltre uno o più attributi di annotazione, che forniscono metadati aggiuntivi utilizzabili dall'applicazione o dai client.
Quando si genera un modello per gli strumenti di Analysis Services, i nomi creati per gli oggetti seguono le convenzioni di Analysis Services per la denominazione degli oggetti e l'univocità dei nomi. Poiché tuttavia CSDL fa parte di Entity Data Framework, in cui è necessario che i nomi rispettino le convenzioni per gli identificatori C#, quando il server crea il linguaggio CSDL per un modello, ottiene i nomi utilizzati all'interno dello schema di Analysis Services e crea automaticamente nuovi nomi di oggetti conformi ai requisiti di CSDL. Nella tabella seguente vengono descritte le operazioni tramite le quali vengono generati i nuovi nomi.
Regola |
Azione |
Esempio |
---|---|---|
Nessun carattere non consentito |
I caratteri non consentiti vengono sostituiti da caratteri di sottolineatura. |
Esempio in costruzione |
I nomi devono essere univoci |
Se due stringhe sono uguali, una viene resa univoca aggiungendovi un carattere di sottolineatura più un numero |
esempio in costruzione |
Sono presenti traduzioni sia per didascalie che per qualificatori e, per un determinato linguaggio, potrebbe essere presenti le une o gli altri. Ciò significa che nei casi in cui siano concatenati un qualificatore e un nome o un qualificatore e una didascalia, è possibile che le stringhe siano in due linguaggi diversi.