28 Scrivi le query MDX

MDX è un linguaggio simile a SQL che è possibile utilizzare per emettere query che recuperano dati da Essbase. MDX viene utilizzato anche per definire formule nei cubi ASO, eseguire query sui metadati, qualificare i nomi dei membri e delineare sottoinsiemi di dati o metadati. Il modo migliore per imparare MDX è scrivere query.

Questa sezione consente di apprendere MDX scrivendo query sul cubo Sample Basic in una serie di esercizi.

Prerequisiti per la scrittura delle query MDX

Per completare gli esercizi, avrai bisogno di:

Creare un modello di query MDX

Imparare il formato di base di una query MDX, in modo da poter iniziare a utilizzare MDX con Essbase. Analogamente alle istruzioni SQL, le query MDX in genere iniziano con SELECT.

In questa sezione verrà creato un modello da utilizzare come base per lo sviluppo di query MDX semplici.

La maggior parte delle query può essere basata sul seguente framework grammaticale:

SELECT
  {}
ON COLUMNS
FROM Sample.Basic

SELECT alla riga 1 è la parola chiave che inizia il corpo principale delle istruzioni MDX.

Le parentesi graffe { } nella riga 2 sono segnaposto per un set. Nella query precedente, il set è vuoto, ma le parentesi graffe rimangono come segnaposto.

Esercizio 1: creare un modello di query MDX

Per creare un modello di query, procedere come indicato di seguito.

  1. Creare una cartella per memorizzare le query di esempio che possono essere eseguite nel cubo Sample.Basic.

  2. Utilizzando un editor di testo, digitare il codice seguente in un file vuoto:

    SELECT
      {}
    ON COLUMNS
    FROM Sample.Basic
  3. Salvare il file con il nome di qry_blank.txt.

Set e tuple MDX

I set MDX contengono tuple e le tuple MDX contengono nomi dei membri. Scopri la differenza tra set, tuple e nomi di membri e come si inseriscono nelle query MDX di Essbase.

Scrivere la prima query ed eseguirla in Client MaxL per recuperare alcuni dati dal cubo Sample Basic.

set

Un set MDX può essere vuoto o essere una raccolta di tuple o una raccolta di set.

Ad esempio, il seguente è un set vuoto.

{ }

Un set deve essere racchiuso tra parentesi graffe {}, tranne nei casi in cui il set è rappresentato da una funzione MDX che restituisce un set (ulteriori informazioni sulle funzioni in seguito).

Il seguente è un insieme costituito da una tupla.


  {[Cola]}

Nella query seguente, {([Cola], [Actual])} è anche un insieme costituito da una tupla, anche se in questo caso, la tupla ha più di un nome membro.

SELECT
  {([Cola], [Actual])}
ON COLUMNS
FROM Sample.Basic

{([Cola], [Actual])} è una tupla composta da due membri (Cola e Effettivo) da due dimensioni (Prodotto e Scenario).

Regola dimensionalità

Quando un set ha più tuple, i membri di ogni tupla devono rappresentare le stesse dimensioni Essbase, nello stesso ordine. In altre parole, tutte le tuple devono avere la stessa dimensionalità delle altre.

  • OK: Il seguente set è composto da due tuple della stessa dimensionalità:

    {(West, Feb), (East, Mar)}
  • Non OK: la seguente serie interrompe la regola di dimensionalità, poiché Feb e Sales provengono da dimensioni diverse:

    {(West, Feb), (East, Sales)}
  • Non OK: l'impostazione seguente rompe la regola di dimensionalità, perché sebbene le due tuple contengano le stesse dimensioni, l'ordine delle dimensioni viene invertito nella seconda tupla:

    {(West, Feb), (Mar, East)}

Tuple e nomi membri

Un tuple consente di fare riferimento a una combinazione di membri o membri di qualsiasi numero di dimensioni. Ad esempio, nel cubo Sample.Basic, tutte queste sono tuple valide:

  • Jan
  • (Jan, Sales)
  • ([Jan],[Sales],[Cola],[Utah],[Actual])

I nomi dei membri possono essere specificati nei modi riportati di seguito.

  • Specificando il nome effettivo o l'alias; ad esempio:

    • Cola

    • Actual

    • COGS

    • [100]

    Se il nome del membro inizia con un numero o contiene spazi, deve essere racchiuso tra parentesi, ad esempio [100] o [New York]. Tuttavia, le parentesi dei nomi dei membri sono consigliate per tutti i nomi dei membri, per chiarezza e leggibilità del codice.

    Se il nome del membro inizia con una e commerciale (&) , deve essere racchiuso tra virgolette, ad esempio ["&xyz"]. Questo perché la e commerciale iniziale è riservata alle variabili di sostituzione (vedere Variabili nelle query MDX). È inoltre possibile specificarlo come StrToMbr("&100").

    Per i membri attributo, deve essere utilizzato il nome lungo (qualificato per identificare in modo univoco il membro), ad esempio [Ounces_12] anziché [12].

  • Specificando il nome della dimensione o uno qualsiasi dei nomi dei membri predecessori come prefisso del nome membro, ad esempio [Product].[100-10] e [Diet].[100-10]. Questa procedura è consigliata per tutti i nomi dei membri, in quanto elimina le ambiguità e consente di fare riferimento in modo accurato ai membri condivisi. Vedere: "Membri qualificati per predecessore differenziatore" in Nomi membri duplicati nei profili.

    Nota

    Non utilizzare più predecessori nella qualifica del nome membro. Essbase restituisce un errore se sono inclusi più predecessori. Ad esempio, [Market].[New York] e [East].[New York] sono nomi validi per New York; tuttavia, [Market].[East].[New York] restituisce un errore.

  • Specificando il nome di un membro calcolato definito nella sezione WITH.

Esercizio 2: Esegui la tua prima query

Ricordiamo che le parentesi graffe {} nella riga 2 del modello di query sono un segnaposto per un set. In questo esercizio, aggiungeremo un set alla query ed eseguirla.

Per eseguire la query, procedere come segue.

  1. Aprire qry_blank.txt, il modello di query creato da Crea un modello di query MDX.

  2. Poiché un set può essere semplice come una tupla, aggiungere la tupla all'interno delle parentesi graffe { } che contengono il set.

    Digitare [Jan] all'interno delle parentesi graffe { } nella riga 2:

    SELECT 
      {[Jan]}
    ON COLUMNS
    FROM Sample.Basic
  3. Salvare la query come qry_first.txt.

  4. Assicurarsi che Essbase sia in esecuzione.

  5. Avviare il client MaxL ed eseguire il login con un nome utente e una password validi. Ad esempio:

    login admin1 my_Pa55w0rD on "https://myserver.example.com:9001/essbase/agent";
  6. Copiare e incollare l'intera query SELECT nel client MaxL, ma non premere Invio.

  7. Immettere un punto e virgola alla fine, in qualsiasi punto dopo Base, ma prima di premere Invio. (Il punto e virgola non è un requisito MDX, ma richiesto dal client MaxL per indicare la fine di un'istruzione).

  8. Premere Invio per inviare la query a Essbase.

    I risultati dovrebbero essere simili ai seguenti:

    Jan
      8024

Layout query MDX con assi e specifica cubo

Un asse MDX è un'istruzione che modella il layout della griglia dei risultati della query da un cubo Essbase. ON COLUMNS e ON ROWS sono parole chiave degli assi che descrivono dove devono apparire i risultati. Una specifica cubo include la parola chiave FROM e indica a Essbase quale cubo eseguire la query.

Asse MDX

Gli assi vengono inseriti nelle query MDX dopo la selezione:

SELECT <axis> [, <axis>...]
FROM <database> 

Nella query seguente, la specifica dell'asse è {Jan} ON COLUMNS:

SELECT
  {Jan} ON COLUMNS
FROM Sample.Basic

È necessario specificare almeno un asse in qualsiasi query MDX.

È possibile indicare fino a 64 assi, a partire da AXIS(0) e continuando con AXIS(1)... AXIS(63). L'utilizzo di più di tre assi è raro. L'ordine degli assi non è importante; tuttavia, quando si specifica un insieme di assi da 0 a n, non è necessario saltare alcun asse compreso tra 0 e n. Inoltre, una dimensione non può essere visualizzata su più assi.

I primi cinque assi hanno alias per parole chiave, come indicato nella tabella seguente:

Tabella 28-1 Alias parole chiave assi

Alias parola chiave assi Assi

SU COLONNE

Può essere utilizzato al posto di AXIS(0)

SU RIGHE

Può sostituire AXIS(1)

NELLE PAGINE

Può sostituire AXIS(2)

NEI CAPITOLI

Può sostituire AXIS(3)

NELLE SEZIONI

Può sostituire AXIS(4)

Specifica cubatura MDX

Una specifica cubo è la parte della query che determina quale database Essbase viene sottoposto a query. La specifica del cubo si inserisce in una query MDX come indicato di seguito.

SELECT <axis> [, <axis>...]
FROM <cube> 

La sezione <cube> segue la parola chiave FROM e deve essere costituita da identificativi delimitati o non delimitati che specificano prima un nome dell'applicazione e poi un nome del database, ad esempio le seguenti specifiche sono valide:

  • FROM Sample.Basic

  • FROM [Sample.Basic]

  • FROM [Sample].[Basic]

  • FROM'Sample'.'Basic'

Esercizio 3: Esecuzione di una query a due assi

Per eseguire una query a due assi:

  1. Aprire qry_blank.txt, il modello di query creato in Crea un modello di query MDX.

  2. Aggiungere una virgola dopo ON COLUMNS, quindi aggiungere un segnaposto per un secondo asse aggiungendo ON ROWS:

    SELECT
      {}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  3. Salvare il nuovo modello di query come qry_blank_2ax.txt.

  4. Come specifica di serie per l'asse colonna, immettere i membri Prodotto 100-10 e 100-20. Ad esempio:

    SELECT
      {[100-10],[100-20]}
    ON COLUMNS, 
      {}
    ON ROWS
    FROM Sample.Basic

    Poiché questi nomi di membro contengono caratteri speciali, è necessario utilizzare parentesi quadre. Si consiglia di utilizzare la convenzione qui utilizzata per racchiudere tra parentesi tutti i nomi dei membri anche se non contengono caratteri speciali.

  5. Come specifica di serie per l'asse delle righe, immettere i membri Anno da Trimestre1 a Trimestre4.

    SELECT
      {[100-10],[100-20]}
    ON COLUMNS,
      {[Qtr1],[Qtr2],[Qtr3],[Qtr4]}
    ON ROWS
    FROM Sample.Basic
  6. Salvare la query come qry_2ax.txt.

  7. Incollare la query nel client MaxL ed eseguirla, come descritto nel primo esercizio (in Set MDX e tuple).

I risultati della query devono essere i seguenti:

Tabella 28-2 Risultati: Esecuzione di una query a due assi

L'immagine di uno spazio viene utilizzata per le celle thead vuote da 100 a 10 da 100 a 20

Qtr1

5.096

1.359

Trimestre 2

5.892

1.534

Trimestre 3

6.583

1.528

Trimestre 4

5.206

1.287

Esercizio 4: interrogazione di più dimensioni su un singolo asse

Per eseguire una query su più dimensioni su un singolo asse, procedere come segue.

  1. Aprire qry_blank_2ax.txt, il modello di query creato nell'esercizio precedente.

  2. Nell'asse delle colonne, specificare due tuple, ognuna delle quali è una combinazione di membri anziché un singolo membro. Racchiudere ogni tupla tra parentesi, perché più membri sono rappresentati in ogni tupla.

    SELECT
      {([100-10],[East]), ([100-20],[East])}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  3. Nell'asse delle righe, specificare quattro tuple a due membri, annidando ogni trimestre con profitto:

    SELECT
      {([100-10],[East]), ([100-20],[East])}
    ON COLUMNS,
      {
      ([Qtr1],[Profit]), ([Qtr2],[Profit]),
      ([Qtr3],[Profit]), ([Qtr4],[Profit])
      }
    ON ROWS
    FROM Sample.Basic
  4. Salvare la query come qry_1ax.txt.

  5. Incollare la query nel client MaxL ed eseguirla, come descritto nel primo esercizio (in Set MDX e tuple).

    I risultati dovrebbero essere simili ai seguenti:

    Risultati tabella 28-3: interrogazione di più dimensioni su un singolo asse

    L'immagine di uno spazio viene utilizzata per le celle thead vuote L'immagine di uno spazio viene utilizzata per le celle thead vuote da 100 a 10 da 100 a 20
    L'immagine di uno spazio viene utilizzata per le celle thead vuote L'immagine di uno spazio viene utilizzata per le celle thead vuote

    East

    East

    Qtr1

    Profitto

    2.461

    212

    Trimestre 2

    Profitto

    2.490

    303

    Trimestre 3

    Profitto

    3.298

    312

    Trimestre 4

    Profitto

    2.430

    287

Usa funzioni MDX per creare serie

È possibile utilizzare le funzioni MDX per operare su metadati o dati di Essbase. Le funzioni possono restituire membri, insiemi, valori, tuple o stringhe. Sono utili se si utilizza MDX per analizzare, aggiornare o esportare i dati.

Impara a utilizzare le funzioni MemberRange e CrossJoin provando gli esercizi.

Questa introduzione alle funzioni MDX si concentra su alcune funzioni che generano set. Anziché immettere manualmente i set membro per membro o tupla per tupla in una query MDX, è possibile sostituire tali enumerazioni con un'espressione di funzione semplice. Le funzioni MDX possono restituire set e altri valori.

Ad esempio, Children è una funzione impostata. Restituisce il set di membri figlio del membro di input. Pertanto, Children(Qtr1) restituisce {Jan, Feb, Mar}.

Gli esercizi che seguono possono aiutarti a imparare a utilizzare le funzioni MDX in semplici query. Un riferimento completo alle funzioni MDX supportate da Essbase è riportato nell'elenco Elenco funzioni MDX.

Esercizio 5: Utilizzo della funzione MemberRange

La funzione MDX MemberRange restituisce un intervallo di membri compreso tra due membri specificati della stessa generazione. La sintassi è la seguente:

MemberRange (<member1>, <member2>, [,<layertype>])

dove il primo argomento fornito è il membro che inizia l'intervallo e il secondo è il membro che termina l'intervallo. L'argomento layertype è facoltativo.

Nota

Una sintassi alternativa per MemberRange consiste nell'utilizzare due punti tra i due membri, invece di utilizzare il nome della funzione: member1 : member2.

Per utilizzare la funzione MemberRange:

  1. Aprire qry_blank.txt, il modello di query creato in Crea un modello di query MDX.

  2. Eliminare le parentesi graffe {}, che non sono necessarie quando si utilizza una funzione per restituire il set.

  3. Utilizzare l'operatore due punti per selezionare un intervallo di membri da Qtr1 a Qtr4:

    SELECT 
      [Qtr1]:[Qtr4]
    ON COLUMNS 
    FROM Sample.Basic
  4. Incollare la query nel client MaxL ed eseguirla, come descritto nel primo esercizio (in Set MDX e tuple).

    Qtr1, Qtr2, Qtr3 e Qtr4 vengono restituiti.

  5. Utilizzare la funzione MemberRange per selezionare lo stesso intervallo di membri, da Qtr1 a Qtr4.

    SELECT
      MemberRange([Qtr1],[Qtr4])
    ON COLUMNS
    FROM Sample.Basic
  6. Incollare la query nel client MaxL ed eseguirla.

  7. Salvare la query come gry_member_range_func.txt.

Esercizio 6: Utilizzo della funzione CrossJoin

La funzione CrossJoin restituisce il prodotto incrociato di due set di dimensioni Essbase diverse. La sintassi è la seguente:

CrossJoin(set,set)

Questa funzione utilizza come input due insiemi di dimensioni diverse e crea un insieme che è un prodotto incrociato di tali insiemi. Ciò è utile per la creazione di report simmetrici.

Per utilizzare la funzione CrossJoin:

  1. Aprire qry_blank.txt, il modello di query creato in Crea un modello di query MDX.

  2. Sostituire le parentesi graffe {} dall'asse delle colonne con CrossJoin().

    SELECT
      CrossJoin () 
    ON COLUMNS, 
      {}
    ON ROWS
    FROM Sample.Basic
  3. Aggiungere due coppie di parentesi graffe separate da virgole come segnaposto per i due argomenti set che verranno forniti alla funzione CrossJoin:

    SELECT
      CrossJoin ({}, {})
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  4. Nel primo set, specificare il membro Product [100-10]. Nel secondo set, specificare i membri del mercato [East], [West], [South] e [Central].

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  5. Sull'asse delle righe, utilizzare CrossJoin per attraversare un set di membri Misure con un set contenente Qtr1:

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      CrossJoin ( 
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]} 
      ) 
    ON ROWS
    FROM Sample.Basic
  6. Salvare la query come qry_crossjoin_func.txt.

  7. Incollare la query nel client MaxL ed eseguirla.

Quando si sperimenta l'utilizzo di CrossJoin, si noti che l'ordine degli argomenti influisce sull'ordine delle tuple nell'output.

I risultati della query sono mostrati di seguito:

Tabella 28-4 Risultati: Utilizzo della funzione CrossJoin

L'immagine di uno spazio viene utilizzata per le celle thead vuote L'immagine di uno spazio viene utilizzata per le celle thead vuote da 100 a 10 da 100 a 10 da 100 a 10 da 100 a 10
L'immagine di uno spazio viene utilizzata per le celle thead vuote L'immagine di uno spazio viene utilizzata per le celle thead vuote

East

Regione dell’Ovest

Sud

Centrale

Vendite

Qtr1

5.731

3.493

2.296

3.425

COGS

Qtr1

1.783

1.428

1.010

1.460

% margine

Qtr1

66,803

59,118

56,01

57,372

% profitto

Qtr1

45,82

29,974

32,448

24,613

Nota

Prendere in considerazione l'utilizzo di CrossJoinAttribute se i set di input sono una dimensione base e la relativa dimensione attributo.

Esercizio 7: Utilizzo della funzione Bambini

La funzione Figli restituisce un set di tutti i membri figlio del membro specificato. Utilizzare questa sintassi:

Children (member)

Nota

Una sintassi alternativa per i figli consiste nell'utilizzarla come operatore nel membro di input, come indicato di seguito: member.Children. Utilizzeremo la sintassi dell'operatore in questo esercizio.

Per utilizzare la funzione Bambini per introdurre un collegamento nella specifica del primo asse:

  1. Aprire qry_crossjoin_func.txt, la query creata nell'esercizio precedente.

  2. Nel secondo set della specifica dell'asse della colonna, sostituire [East],[West],[South],[Central] con [Market].Children.

    SELECT 
      CrossJoin ({[100-10]}, {[Market].Children})
    ON COLUMNS,
      CrossJoin (
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]}
      )
    ON ROWS
    FROM Sample.Basic
  3. Salvare la query come gry_children_func.txt.

  4. Incollare la query nel client MaxL ed eseguirla.

    Dovresti vedere gli stessi risultati di quelli restituiti per il precedente esercizio CrossJoin.

Livelli e generazioni di riferimento con MDX

Alcune funzioni MDX eseguono operazioni di set in base a un argomento livello di input. Il layer rappresenta una generazione o un livello di una dimensione Essbase. Impara a fare riferimento a un set utilizzando la funzione Membri.

In MDX, il concetto di livello fa riferimento a generazioni e livelli in una gerarchia Essbase.

In Essbase, i numeri di generazione iniziano a contare con 1 nel nome della dimensione; i numeri di generazione superiore sono quelli più vicini ai membri foglia in una gerarchia.

I numeri di livello iniziano con 0 nella parte più foglia della gerarchia e il numero di livello più alto è un nome dimensione.

È possibile specificare un argomento di livello nei modi seguenti:

  • Nome generazione o livello, ad esempio States o Regions.

  • Il nome della dimensione insieme al nome della generazione o del livello, ad esempio Market.Regions e [Market].[States].

  • La funzione Livelli con una dimensione e un numero livello come input. Ad esempio, [Year].Levels(0).

  • Funzione Level con un membro come input. Ad esempio, [Qtr1].Level restituisce il livello dei trimestri in Sample.Basic, ovvero il livello 1 della dimensione Mercato.

  • Funzione Generazioni con una dimensione e un numero di generazione come input. Ad esempio, [Year].Generations (3).

  • Funzione di generazione con un membro come input. Ad esempio, [Qtr1].Generation restituisce la generazione dei trimestri in Sample.Basic, ovvero la generazione 2 della dimensione Mercato.

Nota

Nel database Sample.Basic, Qtr1 e Qtr4 si trovano nello stesso livello. Ciò significa che anche Qtr1 e Qtr4 appartengono alla stessa generazione. Tuttavia, in un database diverso con una gerarchia incompleta, Qtr1 e Qtr4 potrebbero non essere necessariamente nello stesso livello, anche se sono nella stessa generazione. Ad esempio, se la gerarchia di Qtr1 si espande fino a settimane e la gerarchia di Qtr4 si interrompe a mesi, Qtr1 è un livello superiore a Qtr4, ma si trova ancora nello stesso livello.

Esercizio 8: Utilizzo della funzione Membri

Utilizzare la funzione Membri per restituire tutti i membri di una generazione o di un livello specificati. Se utilizzata con un argomento layer, la sintassi è la seguente:

Members (layer)

dove l'argomento layer indica la generazione o il livello di membri da restituire.

Nota

Una sintassi alternativa per i membri è layer.Members.

Per utilizzare la funzione Membri:

  1. Aprire qry_blank.txt, il modello di query creato in Crea un modello di query MDX.

  2. Eliminare le parentesi graffe {}, che non sono necessarie quando si utilizza una funzione per restituire un set.

  3. Utilizzare la funzione Membri e la funzione Livelli per selezionare tutti i membri di livello 0 nella dimensione Mercato di Sample.Basic:

    SELECT
      Members(Market.levels(0))
    ON COLUMNS
    FROM Sample.Basic
  4. Salvare la query come qry_members_func.txt.

  5. Incollare la query nel client MaxL ed eseguirla, come descritto nel primo esercizio (in Set MDX e tuple).

    Risultati: vengono restituiti tutti gli stati della dimensione Mercato.

Utilizzare un asse affettatrice per impostare il punto di vista della query MDX

Un asse slicer consente di limitare una query MDX in modo da considerare solo un'area specifica del cubo Essbase. Impara a usare l'affettatrice nella clausola WHERE provando l'esercizio di esempio.

La slicer, se utilizzata, deve trovarsi nella sezione WHERE di una query MDX. Inoltre, la sezione WHERE deve essere l'ultimo componente della query, seguendo la specifica del cubo (sezione FROM):

SELECT {set}
ON axes
FROM cube
WHERE slicer

Utilizzare l'asse slicer per impostare il contesto della query; in genere è il contesto predefinito per tutti gli altri assi.

Per selezionare solo le vendite effettive nel cubo Sample.Basic, escluse le vendite in budget, la clausola WHERE potrebbe avere l'aspetto seguente:

WHERE ([Actual], [Sales])

Poiché (Effettivo, Vendite) è specificato nell'asse affettatrice, non è necessario includerli nelle specifiche del set ON AXIS(n).

Nota

La stessa dimensione non può essere visualizzata su altri assi e sull'asse di affettatura. Per filtrare un asse utilizzando criteri della propria dimensione, è possibile utilizzare una selezione secondaria.

Esercizio 9: Limitare i risultati con un asse affettatrice

Per utilizzare l'asse delle sezioni per limitare i risultati:

  1. Aprire gry_crossjoin_func.txt, la query creata in Esercizio 6 di Usa funzioni MDX per creare set.

  2. Incollare la query nel client MaxL ed eseguirla, come descritto nel primo esercizio (in Set MDX e tuple).

    Si noti i risultati in una delle celle dati; ad esempio, si noti che la prima tupla, ([Cola],[East],[Sales],[Qtr1]), ha un valore di 5731.

  3. Aggiungere un asse slicer per limitare i dati restituiti solo ai valori in budget.

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      CrossJoin (
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]}
      )
    ON ROWS
    FROM Sample.Basic
    WHERE (Budget)
  4. Incollare la query nel client MaxL ed eseguirla.

  5. Si noti che il valore della tupla ([Cola],[East],[Sales],[Qtr1]) è ora 5020.

  6. Salvare la query come qry_slicer_axis.txt.

Funzioni comuni relazione MDX

Le funzioni di relazione MDX restituiscono set o membri in base a relazioni membro gerarchiche nel profilo cubo Essbase.

Le seguenti funzioni di relazione MDX restituiscono i set.

Tabella 28-5 Elenco delle funzioni di relazione MDX che restituiscono le serie

Funzione relazione Descrizione

Figli

Restituisce i figli del membro di input.

Pari livello

Restituisce gli elementi di pari livello del membro di input.

Discendenti

Restituisce i discendenti di un componente, con opzioni variabili.

Le funzioni di relazione MDX riportate di seguito restituiscono un singolo membro anziché un set.

Tabella 28-6 Elenco delle funzioni di relazione MDX che restituiscono un singolo membro

Funzione relazione Descrizione

Predecessore

Restituisce un predecessore al livello specificato.

Cugino

Restituisce un membro figlio nella stessa posizione di un membro di un altro predecessore.

Padre

Restituisce il padre del membro di input.

Primo figlio

Restituisce il primo figlio del membro di input.

Ultimo figlio

Restituisce l'ultimo elemento figlio del membro di input.

Primo livello

Restituisce il primo elemento figlio dell'elemento padre del membro di input.

Ultimo scaglione

Restituisce l'ultimo elemento figlio dell'elemento padre del membro di input.

Esercizio 10: provare alcuni esempi di funzioni di relazione dalla documentazione

Per informazioni sul funzionamento delle funzioni di relazione, effettuare le operazioni riportate di seguito.

  1. Fare clic su un collegamento a una funzione in una delle tabelle precedenti oppure fare clic su Figli.

  2. Leggere l'esempio e copiare la query SELECT negli appunti.

  3. Incollare la query nel client MaxL, aggiungere un punto e virgola di chiusura ed eseguire la query, come descritto nel primo esercizio (in Set MDX e tuple).

Funzioni MDX per Imposta operazioni

È possibile utilizzare queste funzioni MDX con Essbase per confrontare, unire, combinare o ridurre i set: CrossJoin, CrossJoinAttribute, Distinct, Except, Generate, Head, Intersect, Subset, Tail e Union.

Imparare la differenza tra le funzioni Intersect e Union provando gli esercizi.

Le funzioni set riportate di seguito operano sui set di input senza derivare ulteriori informazioni da un cubo.

Tabella 28-7 Elenco delle funzioni Pure Set

Funzione Pure Set Descrizione

CrossJoin, CrossJoinAttribute

Restituisce una sezione incrociata di due set di dimensioni diverse.

Distinto

Elimina le tuple duplicate da un set.

Eccetto

Restituisce un subset contenente le differenze tra due set.

Genera

Una funzione iterativa. Per ogni tupla in set1, restituisce set2.

Intestazione

Restituisce i primi membri o le prime tuple n presenti in un set.

INTERSECT

Restituisce l'intersezione di due set di input.

Subset

Restituisce un subset di un set, in cui il subset è costituito da un intervallo di tuple specificato in formato numerico.

Coda

Restituisce gli ultimi membri o le ultime tuple n presenti in un set.

UNION

Restituisce l'unione di due set di input.

Esercizio 11: Utilizzo della funzione Intersezione

La funzione Intersezione MDX restituisce l'intersezione di due set di input, facoltativamente conservandone i duplicati. Utilizzarlo per confrontare gli insiemi trovando le tuple presenti in entrambi gli insiemi.

La sintassi da seguire è:

Intersect (set, set [,ALL])
  1. Aprire qry_blank.txt, il modello di query creato in Crea un modello di query MDX.

  2. Eliminare le parentesi graffe del set vuoto {} dall'asse e sostituirle con Intersect(). Lasciare un po 'di spazio all'interno delle parentesi graffe Intersect per aggiungere più codice. Ad esempio:

    SELECT
       Intersect (
    
       )
    ON COLUMNS
    FROM Sample.Basic
  3. Aggiungere due coppie di parentesi graffe separate da virgole da utilizzare come segnaposto per i due argomenti set che verranno forniti alla funzione Intersect. Ad esempio:

    SELECT
       Intersect ( 
       { },
       { }
       )
    ON COLUMNS
    FROM Sample.Basic
  4. Specificare i figli di East come primo argomento set. Ad esempio:

    SELECT
       Intersect (
       { [East].children },
       { }
       )
    ON COLUMNS
    FROM Sample.Basic
  5. Per il secondo argomento impostato, specificare tutti i membri della dimensione Mercato che dispongono di un attributo definito dall'utente "Mercato principale". Ad esempio:

    SELECT
       Intersect (
       { [East].children },
       { UDA([Market], "Major Market") }
       )
    ON COLUMNS
    FROM Sample.Basic
  6. Incollare la query nel client MaxL ed eseguirla, come descritto nel primo esercizio (in Set MDX e tuple).

    Vengono restituiti tutti i figli dell'area orientale con un attributo definito dall'utente "Mercato principale". Ad esempio:

    New York   Massachusetts   Florida
    
    8202       6172            5029
  7. Salvare la query come qry_intersect_func.txt.

Esercizio 12: Utilizzo della funzione Unione

La funzione MDX Union unisce due set di input, conservando facoltativamente i duplicati. Usalo per combinare due set in un unico set.

La sintassi da seguire è:

Union (set, set [,ALL])
  1. Aprire qry_intersect_func.txt, la query creata nell'esercizio precedente.

  2. Sostituire Intersect con Union.

  3. Salvare la query come qry_union_func.txt.

  4. Incollare la query nel client MaxL ed eseguirla.

    Mentre Intersect ha restituito un set contenente solo quei bambini di East che hanno un UDA di Major Market, Union restituisce un set più grande. Comprende tutti i bambini dell'Est, e tutti i membri del Mercato che hanno un UDA di Mercato Maggiore.

     (New York)      (Massachusetts) (Florida)       (Connecticut)   (New Hampshire) (East)          (California)    (Texas)         (Central)       (Illinois)      (Ohio)          (Colorado)
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------
                8202            6712            5029            3093            1125           24161           12964    6425           38262           12577            4384            7227
    

Set e membri riutilizzabili: sezione MDX WITH

La definizione di membri e set nella sezione CON della query MDX consente di filtrare i dati senza influire sul cubo. Un membro calcolato è un membro logico che esiste solo all'interno della query. Un set denominato è un set logico che esiste solo all'interno della query. Prova un esercizio di esempio.

I membri calcolati e i set denominati sono entità logiche nella query che possono essere utilizzate più volte durante la durata della query. I membri calcolati e i set denominati possono risparmiare tempo nelle righe di codice scritte e nel tempo di esecuzione. La sezione facoltativa WITH all'inizio di una query MDX consente di definire i membri calcolati e/o i set denominati.

La query seguente utilizza un membro calcolato:

WITH
MEMBER [Measures].[Max Qtr2 Sales] AS
  'Max (
    {[Year].[Qtr2]},
    [Measures].[Sales]
  )'
SELECT
{ [Measures].[Max Qtr2 Sales] } on columns,
{ [Product].children } on rows
FROM Sample.Basic

La query seguente utilizza un set denominato:

WITH SET [NewSet] 
AS 'CrossJoin([Product].Children, [Market].Children)'
SELECT
   Filter([NewSet], NOT IsEmpty([NewSet].CurrentTuple)) 
ON COLUMNS
FROM Sample.Basic
WHERE
   {[Sales]}

Membri calcolati

Un membro calcolato è un membro ipotetico esistente per la durata dell'esecuzione della query. I membri calcolati consentono l'analisi complessa senza la necessità di aggiungere membri fisici al profilo del cubo. I membri calcolati memorizzano i risultati del calcolo eseguiti sui membri fisici.

Utilizzare le linee guida riportate di seguito per i nomi dei membri calcolati.

  • Associare il membro calcolato a una dimensione; ad esempio, per associare il membro MyCalc alla dimensione Misure, denominarlo [Measures].[MyCalc].

  • Non utilizzare i nomi dei membri effettivi per assegnare un nome ai membri calcolati. Ad esempio, non assegnare un nome a un membro calcolato [Measures].[Sales] perché Sales esiste già nella dimensione Misure.

L'impostazione dell'ordine di soluzione per ogni membro calcolato è consigliata quando si utilizzano più membri calcolati per creare rapporti o totali personalizzati.

Set denominati

I SET denominati vengono definiti utilizzando parole chiave WITH SET prima della parte SELECT della query. Questa operazione è utile perché è possibile fare riferimento al set per nome quando si crea la parte SELECT della query.

Ad esempio, il set denominato Best5Prods identifica un set di cinque prodotti più venduti a dicembre:

WITH
SET [Best5Prods]
  AS
  'Topcount (
    [Product].members,
    5,
    ([Measures].[Sales], [Scenario].[Actual], [Year].[Dec])
  )'
SELECT [Best5Prods] ON AXIS(0),
  {[Year].[Dec]} ON AXIS(1)
FROM Sample.Basic

Esercizio 13: Creazione di un membro calcolato

In questo esercizio viene utilizzata la funzione Max, una funzione MDX comune per i calcoli. Restituisce il massimo dei valori trovati nelle tuple di un set.

La sintassi da seguire è:

Max (set, numeric_value)
  1. Aprire qry_blank_2ax.txt, il modello di query creato in Esercizio 3 di Layout query MDX con assi e specifiche cubo.

    SELECT
      {}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  2. Nel set di assi delle righe, specificare i figli del prodotto. Ad esempio:

    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  3. All'inizio della query, aggiungere un segnaposto per la specifica del membro calcolato. Ad esempio:

    WITH MEMBER [].[]
     AS ''
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  4. Per associare il membro calcolato alla dimensione Misure e denominarlo Vendite Qtr2 max, aggiungere queste informazioni alla specifica del membro calcolato. Ad esempio:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
     AS ''
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  5. Dopo la parola chiave AS e all'interno delle singole virgolette, definire la logica per il membro calcolato denominato Max Qtr2 Sales.

    Utilizzare la funzione Max con il set per valutare (Qtr2) come primo argomento e la misura per valutare (Vendite) come secondo argomento. Ad esempio:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
      AS '
      Max (
        {[Year].[Qtr2]},
        [Measures].[Sales]
      )'
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
    
  6. Il membro calcolato Vendite max trim. 2 è definito nella sezione CON. Per utilizzarlo in una query, fare riferimento a esso su uno degli assi nella parte SELECT della query. Ad esempio:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
      AS '
      Max (
        {[Year].[Qtr2]},
        [Measures].[Sales]
      )'
    SELECT
      {[Measures].[Max Qtr2 Sales]}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
    
  7. Salvare la query come gry_calc_member.txt.

  8. Incollare la query nel client MaxL ed eseguirla, come descritto nel primo esercizio (in Set MDX e tuple).

    I risultati della query sono mostrati di seguito:

    Tabella 28-8 Risultati: Creazione di un membro calcolato

    L'immagine di uno spazio viene utilizzata per le celle thead vuote Vendite max trimestre 2

    100

    27.187

    200

    27.401

    300

    25.736

    400

    21.355

    Dieta

    26.787

Nota

Molti altri esempi sono disponibili nella documentazione di riferimento MDX. Vedere MDX With Section.

Funzioni MDX iterative

Le funzioni MDX iterative eseguono il loop attraverso set di dati nel cubo Essbase, eseguendo tutte le condizioni di ricerca specificate per personalizzare i risultati. Vedere un esempio che filtra i dati in base a un test booleano.

Tabella 28-9 Elenco delle funzioni Iterative MDX

Funzione Descrizione

Filtro

Restituisce il subset di tuple in set per cui il valore della condizione di ricerca è TRUE.

IIF

Esegue un test condizionale e restituisce un'espressione numerica o una serie appropriata a seconda che il test restituisca TRUE o FALSE.

Caso

Esegue test condizionali e restituisce i risultati specificati.

Genera

Per ogni tupla in set1, restituisce set2.

Esempio di funzione filtro

La query seguente utilizza la funzione Filtro MDX per restituire tutti i membri dimensione mercato per i quali l'espressione IsChild([Market].CurrentMember,[East]) restituisce TRUE. La query restituisce tutti gli elementi figlio di East.

SELECT
  Filter([Market].Members,
    IsChild([Market].CurrentMember,[East])
  )
ON COLUMNS
FROM Sample.Basic

La funzione Filtro in MDX è paragonabile al comando RESTRICT in Report Writer.

Gestisci dati mancanti con MDX

Quando si esegue una query su un cubo Essbase utilizzando MDX, è possibile utilizzare le parole chiave NON EMPTY sugli assi per eliminare le celle che NON contengono alcun valore. Le funzioni MDX che gestiscono i valori mancanti includono Avg, CoalesceEmpty, IsEmpty, NonEmptyCount e NonEmptySubset. Le proprietà NONEMPTYMEMBER e NONEMPTYTUPLE consentono di filtrare i valori vuoti dai set di dati di grandi dimensioni.

L'inclusione delle parole chiave facoltative NON VUOTO prima della specifica del set in un asse comporta la soppressione delle slice in tale asse che conterrebbero interamente valori #MISSING.

Di seguito è riportata la sintassi della specifica dell'asse con NON EMPTY.

<axis_specification> ::=
  [NON EMPTY] <set> ON
  COLUMNS | ROWS | PAGES | CHAPTERS |
  SECTIONS | AXIS (<unsigned_integer>)

Per una determinata tupla su un asse (ad esempio (Qtr1, Actual)), una slice è costituita dalle celle derivanti dalla combinazione di questa tupla con tutte le tuple di tutti gli altri assi. Se tutti questi valori di cella sono #MISSING, la parola chiave NON EMPTY causa l'eliminazione della tupla.

Ad esempio, se anche un valore in una riga non è vuoto, viene restituita l'intera riga. L'inclusione di NON VUOTO all'inizio della specifica dell'asse riga eliminerebbe la seguente sezione riga dal set restituito da una query:

Una riga di valori #MISSING per Qtr1, Effettivo

Oltre a sopprimere i valori mancanti con NON EMPTY, è possibile utilizzare le seguenti funzioni MDX per gestire i risultati #MISSING:

  • CoalesceEmpty, che cerca le espressioni dei valori numerici per i valori non #MISSING

  • IsEmpty, che restituisce TRUE se il valore di un'espressione con valore numerico di input restituisce #MISSING

  • Media, che omette i valori mancanti dalle medie a meno che non si utilizzi il flag facoltativo IncludiVuoto

La funzione MDX NonEmptyCount restituisce il conteggio del numero di tuple in un set che restituiscono valori diversi da #Missing. Ogni tupla viene valutata e inclusa nel conteggio restituito da questa funzione. Se viene specificata, l'espressione valore numerico viene valutata nel contesto di ogni tupla e viene restituito il conteggio dei valori non #Missing.

Solo nei cubi di memorizzazione di aggregazione, la funzione NonEmptyCount è ottimizzata in modo che il calcolo del conteggio distinto per tutte le celle possa essere eseguito eseguendo la scansione del cubo una sola volta. Senza questa ottimizzazione, il database viene scansionato quante volte il numero di celle corrispondenti al conteggio distinto. L'ottimizzazione NonEmptyCount viene attivata quando una formula membro del profilo ha la seguente sintassi:

NONEMPTYCOUNT(set, measure, exclude_missing)

Il parametro exclude_missing supporta l'ottimizzazione NonEmptyCount nei database di aggregazione migliorando le prestazioni di una query in cui vengono eseguite query sulle metriche che eseguono un calcolo del conteggio distinto.

Le proprietà di ottimizzazione NONEMPTYMEMBER e NONEMPTYTUPLE consentono a MDX di eseguire query su set di membri o tuple di grandi dimensioni saltando l'esecuzione della formula su valori non contributivi che contengono solo dati #MISSING.

  • Utilizzare una singola clausola di proprietà NONEMPTYMEMBER all'inizio di un membro calcolato o di un'espressione formula per indicare a Essbase che il valore della formula o del membro calcolato è vuoto quando uno qualsiasi dei membri specificati in nonempty_member_list è vuoto.

  • Utilizzare una singola clausola di proprietà NONEMPTYTUPLE all'inizio di un membro calcolato o di un'espressione formula per indicare a Essbase che il valore della formula o del membro calcolato è vuoto quando il valore della cella alla tupla specificato in nonempty_member_list è vuoto.

Dato un set di input, la funzione MDX NonEmptySubset restituisce un sottoinsieme di tale set di input in cui tutte le tuple restituiscono un valore non vuoto. È possibile specificare un'espressione di valore facoltativa per il controllo non vuoto. Questa funzione consente di ottimizzare le query basate su un set di grandi dimensioni per il quale è noto che il set di combinazioni non vuote è piccolo. NonEmptySubset riduce le dimensioni del set in presenza di una metrica; ad esempio, è possibile richiedere il sottoinsieme non vuoto dei discendenti per unità specifiche.

Variabili nelle query MDX

È possibile utilizzare variabili di sostituzione predefinite di Essbase in MDX per fare riferimento alle informazioni che cambiano di frequente senza modificare le query. Per fare riferimento a una variabile in una query o espressione MDX, immettere il nome della variabile preceduto da una e commerciale (&).

Le variabili di sostituzione in Essbase fungono da segnaposto per le informazioni che cambiano regolarmente. È possibile impostare le variabili di sostituzione a livello di cubo, applicazione o globale di Essbase e assegnare un valore a ciascuna variabile. È possibile modificare il valore in qualsiasi momento. È necessario disporre del ruolo di almeno Database Manager per impostare le variabili di sostituzione. Vedere Implementare variabili per la modifica delle informazioni.

Per utilizzare una variabile di sostituzione in un'espressione MDX, considerare quanto riportato di seguito.

  • La variabile di sostituzione deve essere accessibile dall'applicazione e dal cubo di cui si sta eseguendo la query.

  • Una variabile di sostituzione ha due componenti: il nome e il valore.

  • Il nome della variabile può essere una combinazione alfanumerica la cui dimensione massima è specificata in Nome e limiti artifact correlati. Non utilizzare spazi, punteggiatura o parentesi quadre ([ ]) nei nomi delle variabili di sostituzione utilizzati in MDX.

  • Nel punto dell'espressione in cui si desidera utilizzare la variabile, immettere il nome della variabile preceduto da una e commerciale (&); ad esempio, dove CurMonth è il nome della variabile di sostituzione impostata sul server, includere &CurMonth nell'espressione MDX.

  • Quando si esegue il recupero, Essbase sostituisce il nome della variabile con il valore di sostituzione e tale valore viene utilizzato dall'espressione MDX.

Ad esempio, l'espressione viene scritta con il nome variabile CurQtr preceduto da &:

SELECT 
  {[&CurQtr]}
ON COLUMNS
FROM Sample.Basic

Quando l'espressione viene valutata, il valore corrente (Qtr1) viene sostituito dal nome della variabile, in modo che l'espressione eseguita sia effettivamente:

SELECT 
  {[Qtr1]}
ON COLUMNS
FROM Sample.Basic

Query per proprietà in MDX

Le proprietà descrivono determinate caratteristiche dei dati e dei metadati di Essbase. MDX consente di scrivere query che recuperano e analizzano i dati in base alle proprietà di Essbase, che possono essere intrinseche o personalizzate. È possibile richiamare le proprietà sugli assi di query MDX o in un'espressione di valore.

Proprietà intrinseche e personalizzate

In MDX, properties descrivono alcune caratteristiche dei dati e dei metadati. MDX consente di scrivere query che utilizzano le proprietà per recuperare e analizzare i dati. Le proprietà possono essere intrinseche o personalizzate.

Proprietà intrinseche

Le proprietà intrinseche vengono definite per membri in tutte le dimensioni. Le proprietà dei membri intrinseci definite per tutti i membri in un profilo di database Essbase sono MEMBER_NAME, MEMBER_ALIAS, LEVEL_NUMBER, GEN_NUMBER, IS_EXPENSE, COMMENTS e MEMBER_UNIQUE_NAME.

Per una descrizione di ciascuna, vedere MDX Intrinsic Properties.

Proprietà personalizzate

MDX in Essbase supporta due tipi di proprietà personalizzate: proprietà degli attributi e proprietà UDA. Le proprietà degli attributi sono definite dalle dimensioni degli attributi in un profilo. Nel database Sample.Basic, la dimensione attributo Tipo di pacchetto descrive le caratteristiche di imballaggio dei membri nella dimensione Prodotto. Queste informazioni possono essere interrogate in MDX utilizzando il nome della proprietà [Pkg Type].

Le proprietà degli attributi vengono definite solo per dimensioni specifiche e solo per un livello specifico in ogni dimensione. Ad esempio, nel profilo Sample.Basic, [Ounces] è una proprietà di attributo definita solo per i membri della dimensione Product e questa proprietà contiene valori validi solo per i membri di livello 0 della dimensione Product. La proprietà [Ounces] non esiste per altre dimensioni, ad esempio Mercato. La proprietà [Ounces] per un membro non di livello 0 nella dimensione Prodotto è un valore NULL. Le proprietà di attributo in un profilo sono identificate dai nomi delle dimensioni di attributo in tale profilo.

Le proprietà personalizzate includono anche ADU. Ad esempio, [Mercato principale] è una proprietà ADU definita nei membri della dimensione Mercato. Restituisce un valore TRUE se l'attributo definito dall'utente [Mercato principale] è definito per un membro e in caso contrario è FALSE.

Vedere anche Proprietà personalizzate MDX.

Richiamo delle proprietà in un asse di query

È possibile elencare le combinazioni di dimensione e proprietà per ogni serie di assi. Quando viene eseguita una query, la proprietà specificata viene valutata per tutti i membri della dimensione specificata e inclusa nel set di risultati.

Ad esempio, sull'asse delle colonne, la query seguente restituisce le informazioni GEN_NUMBER per ogni membro della dimensione Mercato. Nell'asse delle righe, la query restituisce le informazioni MEMBER_ALIAS per ogni membro della dimensione Prodotto.

SELECT
  [Market].Members
    DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
  Filter ([Product].Members, Sales > 5000)
    DIMENSION PROPERTIES [Product].[MEMBER_ALIAS] on rows
FROM Sample.Basic

Quando si esegue una query per le proprietà membro utilizzando la sezione DIMENSION PROPERTIES di un asse, è possibile identificare una proprietà mediante il nome della dimensione e il nome della proprietà oppure utilizzando il nome della proprietà stessa. Quando un nome di proprietà viene utilizzato da solo, tali informazioni vengono restituite per tutti i membri di tutte le dimensioni dell'asse per il quale viene applicata la proprietà.

Nella query seguente, la proprietà MEMBER_ALIAS viene valutata sull'asse delle righe per le dimensioni Anno e Prodotto.

SELECT [Market].Members
  DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
  CrossJoin([Product].Children, Year.Children)
    DIMENSION PROPERTIES [MEMBER_ALIAS] on rows
FROM Sample.Basic

Richiamo delle proprietà in un'espressione di valore

Le proprietà possono essere utilizzate all'interno di espressioni di valore in una query MDX. Ad esempio, è possibile filtrare un set in base a un'espressione di valore che utilizza le proprietà dei membri nel set di input.

La seguente query restituisce tutti i prodotti contenenti caffeina che sono confezionati in lattine.

SELECT
   Filter([Product].levels(0).members,
    [Product].CurrentMember.Caffeinated and
    [Product].CurrentMember.[Pkg Type] = "Can")
       Dimension Properties
       [Caffeinated], [Pkg Type] on columns
FROM Sample.Basic

La seguente query calcola il valore [BudgetedExpenses] in base al fatto che il mercato corrente sia un mercato principale, utilizzando l'ADU [Mercato principale].

WITH
  MEMBER [Measures].[BudgetedExpenses] AS
    'IIF([Market].CurrentMember.[Major Market],
    [Marketing] * 1.2, [Marketing])'

SELECT  {[Measures].[BudgetedExpenses]} ON COLUMNS,
  [Market].Members ON ROWS
FROM Sample.Basic
WHERE ([Budget])

Tipo valore di proprietà

Il valore di una proprietà MDX in Essbase può essere un tipo numerico, booleano o stringa. Le proprietà MEMBER_NAME e MEMBER_ALIAS restituiscono valori stringa. Le proprietà LEVEL_NUMBER e GEN_NUMBER restituiscono valori numerici.

Le proprietà attributo restituiscono valori numerici, booleani o di stringa in base al tipo di dimensione attributo. Ad esempio, in Sample.Basic la proprietà dell'attributo [Ounces] è una proprietà numerica. La proprietà dell'attributo [Pkg Type] è una proprietà stringa. La proprietà attributo [Caffeinated] è una proprietà booleana.

Essbase consente dimensioni attributo con tipi di data. Le proprietà del tipo di data vengono trattate come proprietà numeriche in MDX. Quando si confrontano questi valori di proprietà con le date, utilizzare la funzione Todate per convertire le stringhe di data in numeriche prima del confronto.

La query seguente restituisce tutti i membri della dimensione Prodotto introdotti in data 25/03/2018. Poiché la proprietà [Intro Date] è un tipo di data, è necessario utilizzare la funzione TODATE per convertire la stringa di data "03-25-2018" in un numero prima di confrontarla.

SELECT
  Filter ([Product].Members,
    [Product].CurrentMember.[Intro Date] = 
    TODATE("mm-dd-yyyy","03-25-2018"))ON COLUMNS
FROM Sample.Basic

Quando una proprietà viene utilizzata in un'espressione di valore, è necessario utilizzarla in modo appropriato in base al tipo di valore: stringa, numerico o booleano.

È inoltre possibile eseguire query sulle dimensioni degli attributi con intervalli numerici.

La query seguente recupera i dati di vendita per gli intervalli di popolazione Piccolo, Medio e Grande.

SELECT
  {Sales} ON COLUMNS,
  {Small, Medium, Large} ON ROWS
FROM Sample.Basic

Quando gli attributi vengono utilizzati come proprietà IN un'espressione di valore, è possibile utilizzare i membri intervallo per verificare se il valore di proprietà di un membro rientra IN un determinato intervallo, utilizzando l'operatore IN.

Ad esempio, la seguente query restituisce tutti i membri della dimensione Mercato con l'intervallo di popolazione in Medio:

SELECT
  Filter(
    Market.Members, Market.CurrentMember.Population
    IN "Medium"
  )
ON AXIS(0)
FROM Sample.Basic

Valori proprietà NULL

Non tutti i membri possono avere valori validi per un determinato nome di proprietà. Ad esempio, la proprietà MEMBER_ALIAS restituisce un nome alternativo per un determinato membro come definito nel profilo; tuttavia, non tutti i membri possono avere alias definiti. In questi casi viene restituito un valore NULL per i membri che non dispongono di alias.

Nella seguente interrogazione,

SELECT
  [Year].Members
   DIMENSION PROPERTIES [MEMBER_ALIAS]
ON COLUMNS
FROM Sample.Basic

Per nessuno dei membri della dimensione Anno sono stati definiti alias. Pertanto, la query restituisce valori NULL per la proprietà MEMBER_ALIAS per i membri nella dimensione Anno.

Le proprietà dell'attributo vengono definite per i membri di una dimensione specifica e un livello specifico in tale dimensione. Nel database Sample.Basic, la proprietà [Ounces] è definita solo per i membri di livello 0 della dimensione Product.

Pertanto, se si esegue una query per la proprietà [Ounces] di un membro della dimensione Market, come mostrato nella query seguente, verrà visualizzato un errore di sintassi:

SELECT
  Filter([Market].members,
    [Market].CurrentMember.[Ounces] = 32) ON COLUMNS
FROM Sample.Basic

Inoltre, se si esegue una query per la proprietà [Ounces] di un membro non di livello 0 della dimensione, si otterrà un valore NULL.

Quando si utilizzano valori di proprietà nelle espressioni di valore, è possibile utilizzare la funzione IsValid() per verificare la presenza di valori NULL. La query seguente restituisce tutti i membri della dimensione Prodotto con un valore di proprietà [Ounces] pari a 12, dopo aver eliminato i membri con valori NULL.

SELECT
  Filter([Product].Members,
    IsValid([Product].CurrentMember.[Ounces]) AND
    [Product].CurrentMember.[Ounces] = 12) 
ON COLUMNS
FROM Sample.Basic