Expresii multidimensionale - MultiDimensional eXpressions

Multidimensional Expressions (MDX) este un limbaj de interogare pentru procesarea analitică online (OLAP) utilizând un sistem de gestionare a bazelor de date . La fel ca SQL , este un limbaj de interogare pentru cuburile OLAP . Este, de asemenea, un limbaj de calcul, cu sintaxă similară cu formulele foii de calcul.

fundal

Limbajul MultiDimensional eXpressions (MDX) oferă o sintaxă specializată pentru interogarea și manipularea datelor multidimensionale stocate în cuburi OLAP . Deși este posibil să se traducă unele dintre acestea în SQL tradițional, ar necesita frecvent sinteza unor expresii SQL stângace chiar și pentru expresii MDX foarte simple. MDX a fost îmbrățișat de o largă majoritate de furnizori OLAP și a devenit standardul pentru sistemele OLAP.

Istorie

MDX a fost introdus pentru prima dată ca parte a specificației OLE DB pentru OLAP în 1997 de la Microsoft . A fost inventat de grupul de ingineri SQL Server , inclusiv Mosha Pasumansky . Specificația a fost rapid urmată de lansarea comercială a Microsoft OLAP Services 7.0 în 1998 și ulterior de Microsoft Analysis Services . Cea mai recentă versiune a specificației OLE DB pentru OLAP a fost publicată de Microsoft în 1999.

Deși nu era un standard deschis, ci mai degrabă o specificație deținută de Microsoft, a fost adoptată de o gamă largă de furnizori OLAP.

Specificația XML pentru analiză s-a referit înapoi la specificația OLE DB pentru OLAP pentru detalii despre limbajul de interogare MDX. În Analysis Services 2005, Microsoft a adăugat câteva extensii MDX Query Language precum subselecții. Produse precum Microsoft Excel 2007 au început să utilizeze aceste noi extensii MDX Query Language. Unii se referă la această nouă versiune a MDX ca MDX 2005.

mdXML

În 2001, Consiliul XMLA a lansat standardul XML for Analysis (XMLA), care includea mdXML ca limbaj de interogare. În specificația XMLA 1.1, mdXML este în esență MDX înfășurat în <Statement> eticheta XML .

Tipuri de date MDX

Există șase tipuri de date primare în MDX

  • Scalar . Scalar este fie un număr, fie un șir . Poate fi specificat ca literal, de ex. Numărul 5 sau șirul „OLAP” sau poate fi returnat de o funcție MDX, de ex. Aggregate (Număr), UniqueName (șir), .Value (număr sau șir) etc.
  • Dimensiune / Ierarhie . Dimensiunea este o dimensiune a unui cub . O dimensiune este un organizator principal al informațiilor de măsurare și atribut într-un cub. MDX nu cunoaște și nici nu își asumă dependențe între dimensiuni - se presupune că sunt reciproc independente. O dimensiune va conține unii membri (a se vedea mai jos) organizați în unele ierarhii sau ierarhii care conțin niveluri. Poate fi specificat prin numele său unic, de exemplu [Time] sau poate fi returnat de o funcție MDX, de ex .Dimension . Ierarhia este o ierarhie de dimensiuni a unui cub . Poate fi specificat prin numele său unic, de exemplu sau poate fi returnat de o funcție MDX, de ex . Ierarhiile sunt cuprinse în dimensiuni. ( Specificația OLEDB pentru OLAP MDX nu face distincție între tipurile de date de dimensiune și ierarhie. Unele implementări, cum ar fi Microsoft Analysis Services, le tratează diferit. ) [Time].[Fiscal].Hierarchy
  • Nivel . Nivelul este un nivel dintr-o ierarhie de dimensiuni. Poate fi specificat prin numele său unic, de exemplu [Time].[Fiscal].[Month] sau poate fi returnat de o funcție MDX, de ex .Level .
  • Membru . Membru este membru într-o ierarhie de dimensiuni. Acesta poate fi specificat prin numele său unic, de exemplu [Time].[Fiscal].[Month].[August 2006] , prin nume calificat, de exemplu , [Time].[Fiscal].[2006].[Q3].[August 2006] sau returnat de o funcție MDX, de exemplu .PrevMember , .Parent , .FirstChild etc. Rețineți că toți membrii sunt specifice unei ierarhii. Dacă același produs este membru al a două ierarhii diferite ( [Product].[ByManufacturer] și [Product].[ByCategory] ), vor fi vizibili doi membri diferiți care ar putea fi necesari să fie coordonați în seturi și tupluri (vezi mai jos).
  • Tuple . Tuple este o colecție comandată de unul sau mai mulți membri de diferite dimensiuni. Tuplurile pot fi specificate prin enumerarea membrilor, de exemplu ([Time].[Fiscal].[Month].[August], [Customer].[By Geography].[All Customers].[USA], [Measures].[Sales]) sau returnate de o funcție MDX, de ex .Item .
  • Set . Setul este o colecție ordonată de tupluri cu aceeași dimensionalitate sau ierarhitate în cazul implementării Microsoft. Acesta poate fi specificat enumerând tupluri, de ex {([Measures].[Sales], [Time].[Fiscal].[2006]), ([Measures].[Sales], [Time].[Fiscal].[2007])} sau returnate de funcția MDX sau a operatorului, de exemplu Crossjoin , Filter , Order , Descendants etc.
  • Alte tipuri de date. Proprietățile membrilor sunt echivalente cu atributele în sensul depozitului de date. Acestea pot fi recuperate după nume într-o interogare printr-o clauză axa PROPERTIES a unei interogări. Valoarea de date scalare a unei proprietăți de membru pentru un anumit membru poate fi accesată într-o expresie prin MDX, fie prin denumirea proprietății (de exemplu, [Product].CurrentMember.[Sales Price] ) , fie utilizând o funcție specială de acces (de exemplu, [Product].CurrentMember.Properties("Sales Price") ). În contexte limitate, MDX permite și alte tipuri de date - de exemplu, matricea poate fi utilizată în interiorul SetToArray funcției pentru a specifica o matrice care nu este procesată de MDX, ci transmisă unei funcții definite de utilizator într-o bibliotecă ActiveX. Obiectele altor tipuri de date sunt reprezentate ca șiruri scalare care indică numele obiectelor, cum ar fi numele grupului de măsură în MeasureGroupMeasures funcția Microsoft sau numele KPI în, de exemplu, Microsoft KPIValue sau KPIGoal funcțiile.

Exemplu de interogare

Următorul exemplu, adaptat din SQL Server 2000 Books Online, arată o interogare MDX de bază care utilizează instrucțiunea SELECT. Această interogare returnează un set de rezultate care conține sumele vânzărilor din magazinele din 2002 și 2003 pentru magazinele din statul California.

SELECT
   { [Measures].[Store Sales] } ON COLUMNS,
   { [Date].[2002], [Date].[2003] } ON ROWS
FROM Sales
WHERE ( [Store].[USA].[CA] )

În acest exemplu, interogarea definește următoarele informații despre setul de rezultate

  • Clauza SELECT stabilește axele de interogare ca membru Vânzări magazin din dimensiunea Măsuri și membrii 2002 și 2003 din dimensiunea Data.
  • Clauza FROM indică faptul că sursa de date este cubul de vânzări.
  • Clauza WHERE definește „axa slicer” ca membru California al dimensiunii Magazin.

Notă: Puteți specifica până la 128 de axe de interogare într-o interogare MDX.

Dacă creați două axe, una trebuie să fie axa coloanei și una trebuie să fie axa rândului, deși nu contează în ce ordine apar în interogare. Dacă creați o interogare care are o singură axă, aceasta trebuie să fie axa coloanei. Parantezele pătrate din jurul identificatorului de obiect particular sunt opționale, atâta timp cât identificatorul de obiect nu este unul dintre cuvintele rezervate și nu conține altfel caractere în afară de litere, cifre sau puncte de subliniere.

SELECT
    [Measures].[Store Sales] ON COLUMNS,
    [Date].Members ON ROWS
FROM Sales
WHERE ( [Store].[USA].[CA] )

Referințe

Lecturi suplimentare

  • George Spofford, Sivakumar Harinath, Chris Webb, Dylan Hai Huang, Francesco Civardi: MDX-Solutions: With Microsoft SQL Server Analysis Services 2005 and Hyperion Essbase . Wiley, 2006, ISBN   0-471-74808-0
  • Mosha Pasumansky , Mark Whitehorn, Rob Zare: Fast Track to MDX . ISBN   1-84628-174-1
  • Larry Sackett: MDX Reporting and Analytics cu SAP NetWeaver BW . SAP Press, 2008, 978-1-59229-249-3

linkuri externe