Analysis Services include linguaggi MDX, DMX, DAX XML/A e ASSL. Il supporto di tali linguaggi varia a seconda al tipo di modello selezionato. Per modelli tabulari vengono supportati calcoli DAX, query DAX e query MDX mentre per modelli multidimensionale ricorrono i soli calcoli MDX e query MDX, nonché ASSL.
• MDX (Multi Dimensional Expression) è stato introdotto con Analysis Services nel 1997, diventando lo standard industriale delle Business
Intelligence Company per la logica di business multi-dimensionale, calcoli e query per OLAP. Fornisce una sintassi specializzata per la query e la
manipolazione di modelli multidimensionali ed è utilizzato anche per creare calcoli, stabilire delle regole di sicurezza e definire oggetti calcolati. Non è un linguaggio facile da imparare, ma la sua complessità permette molte funzioni analitiche specializzate.
• DAX (Data Analysis Expression) è un linguaggio di espressione basato sulle formule di Excel che è stato introdotto inizialmente con PowerPivot e si
basa su concetti tabulari (tabelle, colonne e relazioni) ma vi sono alcune differenze importanti rispetto ad Excel:
• In Microsoft Excel è possibile fare riferimento a singole celle o matrici, mentre se è necessario utilizzare solo parte di una colonna o valori univoci da una colonna, è possibile l'utilizzo di funzioni DAX. • Le formule DAX non supportano esattamente gli stessi tipi di dati di
Microsoft Excel. In generale, DAX fornisce più tipi di dati rispetto a Excel ed esegue le conversioni implicite su determinati tipi di dati durante l’importazione.
• Una formula DAX inizia sempre con un segno di uguale (=), dopo il quale è possibile specificare qualsiasi espressione che restituisce un valore scalare.
• DAX può essere utilizzato per supportare lo sviluppo dei modelli tabulari come la navigazione dati sulle relazioni e la modifica del contesto.
Confrontando i due linguaggi, DAX rispetto MDX risulta essere più facile da comprendere per uno sviluppatore che ha maggiore famigliarità con il
linguaggio SQL rispetto a concetti multidimensionali.
Il concetto di filtraggio, di raggruppamento e di aggregazione in DAX è molto più facile e intuitibile rispetto a query MDX presenti in modellazione
multidimensionale. Anche se l’uso di DAX è piuttosto semplice per i calcoli di base (margine, rapporto, ecc.), diventa sempre più complesso per i calcoli analitici avanzati.
Ad esempio, le clausule WHERE, GROUP BY in SQL sono paragonabili alle clausule FILTER e SUMMARIZE in DAX, come anche la funzione SUM di aggregazione è uguale per entrambi i linguaggi.
Per queste differenze, cambia l’approccio di interpretazione e di definizione query per le diverse rispettive modellazioni. Durante la fase di realizzazione di
una query DAX, è opportuno sapere “come” filtrare le tabelle e “quale” funzione di aggregazione scegliere, mentre per realizzare query in MDX, è opportuno spostare l’attenzione sul “come” estrarre i dati dal cubo e quindi definire quali assi prendere in considerazione.
È utile rivedere il motore interno SSAS nell’ottica di formulazione query durante l’emissione di una query MDX/DAX applicata su un cubo e sulle tecniche differenti di memorizzazione per poter definire relativi vantaggi e svantaggi.
Query su modelli multidimensionali:
Nei modelli multidimensionali si utilizza un’archiviazione basata su lettura di righe in tabelle recuperate dalla memoria secondaria.
Il Query Parser accetta le richieste, analizza e convalida la query inoltrandola al Query Processing Engine per l’esecuzione. A sua volta, il Query Processing Engine elabora un piano di esecuzione che determina come i risultati richiesti saranno forniti dai dati del cubo, memorizzando i risultati del calcolo nella Formula Engine Cache. Il motore di memorizzazione verifica prima se i dati e le aggregazioni del sottocubo richiesto sono già disponibili in cache; in caso contrario, recupera i dati di dettaglio e calcola le relative aggregazioni richieste inoltrando il tutto dalla cache Storage Engine al Query Processor per servire la richiesta.
Secondo il piano di esecuzione di una query MDX, si possono verificare dei colli di bottiglia o sul motore di elaborazione query o sul motore di
memorizzazione che a loro volta gestiscono il recupero dei dati grezzi dal disco e le relative aggregazioni necessarie.
In questo contesto, difficilmente è possibile applicare delle soluzioni di ottimizzazione standard per qualsiasi modellazione multidimensionale. Il diagramma in Figura 4.0 illustra l'architettura di elaborazione Analysis Service durante l'esecuzione query in modalità multidimensionale.
Figura 4.0: Piano di esecuzione query in modalità multidimensionale
Query su modelli Tabulari:
I modelli tabulari utilizzano la memorizzazione per colonna, già caricata in memoria primaria. Durante l’esecuzione della query vengono scansionate solo le colonne necessarie per la corretta esecuzione query.
I modelli tabulari possono essere interrogati, come detto precedentemente, utilizzando query MDX o DAX. Il motore di memorizzazione è progettato per eseguire in modo molto efficiente la scansione di dati compressi in memoria (in-memory) scansionando le varie colonne. Data l’alta capacità di memorizzazione compressa colonnale di VertiPaq, questa scansione risulta essere molto veloce ed efficace, con assenza di comunicazioni I/O esterne. Durante l’esecuzione di una query abbastanza complessa, se il motore
determina che il calcolo può essere eseguito mediante una modalità alternativa più efficiente, allora il motore di archiviazione VertiPaq, può inviare un
callback al “Formula Engine Cache” per la riformulazione del calcolo. Il diagramma in Figura 4.1 illustra l'architettura di elaborazione Analysis Service durante l'esecuzione query in modalità tabulare.
Il modello tabulare presenta lo svantaggio di essere supportato in linguaggio DAX solo da Power View e non da altri tool come le tabelle Pivot elaborate su Excel che supportano attualmente esclusivamente query MDX.
"
Figura 4.1: Piano di esecuzione query in modalità tabulare
5.4 ACCESSO, COMPRESSIONE, MEMORIZZAZIONE DEI DATI