24 hop edición español - introduccion a multidimensional expressions (mdx) en analysis services...
Post on 06-Jul-2015
107 Views
Preview:
TRANSCRIPT
Introducción a Multidimensional
Expressions (MDX)
Libera el poder total de Analysis Services Multidimensional
Alan Koo Labrín
Senior Consultant | Nagnoi, LLC.
MVP | MCSE Business Intelligence
www.alankoo.com | @alan_koo | Facebook.com/MicrosoftBIyMas
Gracias a nuestros auspiciadores
Database Security as Easy as A-B-C
http://www.greensql.com
Hardcore Developer and IT Training
http://www.pluralsight.com
SQL Server PerformanceTry PlanExplorer today!
http://www.sqlsentry.com
Próximos SQL Saturday
24 de Enero de 2015 https://www.sqlsaturday.com/346/register.aspx
18 de Abril de 2015 https://www.sqlsaturday.com/368/register.aspx
9 de Mayo de 2015 https://www.sqlsaturday.com/373/register.aspx
6 de Diciembre de 2014 https://www.sqlsaturday.com/351/register.aspx
4
Capítulo Global PASS en Español
4
Reuniones semanales todos los miércoles a
las 12PM UTC-5 (Hora de Colombia)
https://www.facebook.com/SpanishPASSVC
5
Asistencia Técnica
Si requiere asistenciadurante la sesión debe usar la sección de preguntas que esta en el menú de la derecha.
Use el botón de Zoom para ajustar su pantalla al tamaño deseado
Escriba sus preguntas en la sección de preguntas que esta en el menú de la derecha
6
Alan Koo
Alan Koo cuenta con más de 13 años de experiencia, diseñando y
desarrollando soluciones orientadas a incrementar el desempeño de los
negocios, tanto en sector público y privado. Debido sus contribuciones y
liderazgo en la comunidad técnica, fue reconocido como Microsoft MVP en el
2014 ya por 5ta vez. Actualmente se desempeña como Consultor Sénior y líder
técnico de la Práctica de Performance Management y Business Intelligence en
Nagnoi, LLC. Co-fundador de PRPASS y actual PASS LATAM Regional Mentor,
mantiene su blog "Microsoft Business Intelligence y más..."
(http://www.alankoo.com).
6
7
Agenda
Multidimensional Expressions (MDX)
Escenarios de uso
Fundamentos: ¿Dónde estamos?
Sintaxis y ejemplos
Demos, demos, demos,… y más demos!
7
8
Mi experiencia
Senior Consultant en Nagnoi, LLC.
14+ años en SQL Server
9+ years en BI & OLAP
Microsoft MVP (5th year)
Miembro del equipo Microsoft BI Advisors
MCT Regional Lead – Puerto Rico
MCT Alumni BI / SQL Server / .NET
Co-Founder de Puerto Rico PASS
PASS Regional Mentor - LATAM
Blogger: www.alankoo.com
8
9
Qué es MDX (Muldimensional Expressions)
• Una base de datos multidimensional (Cubos OLAP), es un método para almacenar datos de
forma multidimensional, generalmente para propósitos de reporte.
• MDX es un lenguaje de consultas para bases de datos OLAP, análogo a SQL como lenguaje
de consulta para bases de datos relacionales.
• Use consultas MDX para obtener datos almacenados en un cubo de SQL Server Analysis
Services.
• Devuelve un conjunto de resultados (dataset) multidimensional que consiste de data de
celdas y data de ejes.
• Originalmente desarrollado por Microsoft (finales de los 90’s).
• Adoptado por muchos otros fabricantes de bases de datos multidimensionales.
9
10
Escenarios de uso
• Herramientas de inteligencia de negocios
• Excel Pivot Tables
• Reporting Services
• PerformancePoint Services (Sharepoint)
• Power View
• Power Query
• Herramientas de terceros
• Tableau
• Business Objects
• Integración con aplicaciones Web o Windows
• ADOMD.NET
10
Conceptos FundamentalesIntroducción a MDX
11
12
Adventure Works Sample Database
13
Adventure Works Cube
• Dimensiones (dimensiones)
• Medidas (measures)
• Grupo de Medidas (measure groups)
• 11 Measure Groups
• 21Dimensions
13
14
¿Dónde estamos?
14
• Dimensiones• Date• Product• Customer
• Jerarquías• Calendar (Date)• Product Line (Product)• Country (Customer)
3 niveles:Year, Semester, Quarter
2 niveles:All, Country
2 niveles:All, Product Line
15
¿Dónde estamos? Members
15
• Los items contenidos dentro de cada jerarquía de una dimension
• Ej. Jerarquía Calendar:• 2004
• H1 CY 2004• Q1 CY 2004• Q2 CY 2004• Q3 CY 2004• Q4 CY 2004
• H2 CY 2004• Ej. Nivel Calendar Quarter:
• Q1 CY 2004• Q2 CY 2004• Q3 CY 2004• Q4 CY 2004
16
Identificadores
• El nombre de un objeto en Analysis Services
• Cubos, dimensiones, jerarquías (hierarchies), niveles (levels), etc.
• Por defecto:
• [Nombre de Dimensión].[Nombre de Jerarquía].[Nombre de Nivel].[Nombre de Miembro]
• Usando la llave (key) del miembro:
• [Nombre de Dimensión].[Nombre de Jerarquía].&[Llave del Miembro]
16
17
¿Dónde estamos? Members
17
• Ej. Jerarquía Calendar:• 2004
• H1 CY 2004• Q1 CY 2004• Q2 CY 2004• Q3 CY 2004• Q4 CY 2004
• H2 CY 2004
[Date].[Calendar].[Calendar Quarter].[Q1 CY 2004]
[Date].[Calendar].[CY 2004].[H1 CY 2004].][Q1 CY 2004]
[Date].[Calendar].[Calendar Quarter].&[2004]&[1]
[Date].[Calendar].[Q1 CY 2004]
18
¿Dónde estamos? Celdas
18
Un lugar en el cubo
Data pertinente a una intersección
de miembros
Contiene medidas
Identificada por los miembros de
una dimensión
Celda
Cantidad 1,134
4 * 4 * 6 = 96 celdas
X * Y * ZProduct * Quarter * Country
19
¿Dónde estamos? Tuplas
19
Identifica una cela o sección
de un cubo
Representada por un miembro
de cada dimensión
Separados por comas,
delimitados por paréntesis
Celda
Cantidad 1,134
([Product].[Product Line].[Accesories], [Date].[Calendar].[Calendar Quarter].&[2003].&[4],[Customer].[Country].[Australia])
20
¿Dónde estamos? Tuplas
20
No tiene tener que
explícitamente tener miembros
de todas las dimensiones
Tuple
1. ([Customer].[Country].[Australia])
2. ([Date].[Calendar].[2004].[H1 CY 2004].[Q1 CY 2004], [Customer].[Country].[Australia])
3. ([Date].[Calendar].[2004].[H1 CY 2004].[Q1 CY 2004],([Product].[Product Line].[Mountain],[Customer].[Country].[Australia])
Tuple
Tuple
21
¿Dónde estamos? Conjuntos (Sets)
21
• Colección de tuplasdefinidas usando las misma dimensiones (en tipo y número)
• Delimitada por llaves {}
{(Customer.Country.Australia), (Customer.Country.Canada)}
{([Date].[Calendar].[2004].[H1 CY 2004]. [Q1 CY 2002], [Product].[Product Line].[Mountain],[Customer].[Country].[Australia]),
([Customer].[Country].[Australia],[Date].[Calendar].[2004].[H1 CY 2004]. [Q1 CY 2003], [Product].[Product Line].[Mountain]),
([Customer].[Country].[Australia],[Date].[Calendar].[2004].[H1 CY 2004]. [Q1 CY 2004], [Product].[Product Line].[Mountain])}
{ }
{Customer.Country.Australia, [Product].[Product Line].[Mountain]}{Customer.Country.Australia, [Product].[Product Line].[Mountain]}
Consultas MDXMás allá de los Pivot Tables
22
23
Sintaxis básica de una consulta
• Se usa para devolver un subconjunto de la data multidimensional de un
servidor OLAP
[ WITH <formula_expression> [ , <formula_expression> ... ] ]
SELECT [<axis_expression>, [<axis_expression> ... ]]
FROM [<cube_expression>]
[WHERE [slicer_expression]]
• Ejes (Axis): Hasta 128 ejes, los 5 primeros tienen alias (COLUMN, ROWS,
PAGES, SECTIONS, CHAPTERS)
23
24
Miembros Calculados
• Cálculos especificados por expresiones MDX
• Resuelto después de la evaluación de la expresión (en lugar de traer la data
original de las tablas de hechos)
24
WITH MEMBER [Measures].[Profit] AS'[Measures].[Internet Sales Amount] - [Measures].[Internet Total Product Cost]'SELECT …
WITH MEMBER Measures.[Cumulative Sales] AS'SUM(YTD(), [Measures].[Internet Sales Amount]) 'SELECT …
25
Expresiones
• Sentencias parciales de MDX que se evalúan a un valor
• Combinación de identificadores, valores y operadores que Analysis Services
puede evaluar para obtener un resultado
• Usamos las expresiones como parte de los datos a ser devueltos por una
consulta o como una condición de búsqueda de acuerdo a un criterio
25
26
Expresiones a nivel de Dimensión
Typically used when passing parameters to functions in Multidimensional
Expressions (MDX) to return members, sets, or tuples from a hierarchy.
26
WITH MEMBER [Measures].[MeasureCount] AS
COUNT([Measures].MEMBERS) …
27
Expresiones a nivel de Jerarquía (dimensión)
hierarchy expression contains either a hierarchy identifier or a hierarchy function
• WITH MEMBER [Measures].[CalendarLevelCount] AS [Date].[Calendar].Levels.Count
SELECT [Measures].[CalendarLevelCount] ON 0
FROM [Adventure Works]
• SELECT [Measures].[Internet Sales Amount] ON 0, [Date].[Calendar].MEMBERS ON 1
FROM [Adventure Works]
27
28
Expresiones a nivel de Tupla (1/2)
• Made up of one member from every dimension that is contained within a cube
• Uniquely identifies a single cell within the cube
(Member_expression [ ,Member_expression ... ] )
• Can be fully qualified, can contain implicit members, or can contain a single member
• Any dimension not explicitly referenced within a tuple is implicitly referenced
• Tuplas de un solo miembro
• [Measures].[TestMeasure] Miembro
• ( [Measures].[TestMeasure] ) Tupla
28
29
Expresiones a nivel de Tupla (2/2)
• Conjuntos (Sets): Lista ordenada de cero o más tuplas
• Conjuntos vacios (Empty Set): No contiene tuplas
{ [ { Tuple_expression | Member_expression } [ , { Tuple_expression | Member_expression } ] ... ] }
• SELECT {[Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount]}
ON COLUMNS,
{
([Product].[Product Categories].[Category].&[4], [Date].[Calendar].[Calendar Year].&[2004]),
([Product].[Product Categories].[Category].&[1], [Date].[Calendar].[Calendar Year].&[2003]),
([Product].[Product Categories].[Category].&[3], [Date].[Calendar].[Calendar Year].&[2004])
} ON ROWS
FROM [Adventure Works]
29
30
Expresiones a nivel de Sub-Cubo
Puede contener un identificador de sub-cubo o una sentencia MDX que
devuelva un sub-cubo.
30
SELECT [Measures].MEMBERS ON COLUMNS, [Date].[Calendar Year].MEMBERS ON ROWS
FROM (SELECT [Measures].[Internet Sales Amount] ON COLUMNS, [Date].[Calendar Year].&[2012] ON ROWSFROM [Adventure Works])
31
Funciones
• Usadas para operar programáticamente sobre bases de datos
multidimensionales
31
WITH MEMBER Measures.LocationName AS
[Customer].[Country].CurrentMember.Name…
WITH MEMBER Measures.User AS USERNAME…
CROSSJOIN ([Product].[Product Line].[Product Line].MEMBERS,Customer.Country.Members) ON ROWS…
32
Trabajando con valores Vacíos (empty)
32
WITHMEMBER [Product].[Category].[All Products].ReturnZero AS 0 MEMBER MEASURES.ISEMPTYDemo AS
ISEMPTY([Measures].[Internet Tax Amount]) //Will true for any null or zero value MEMBER MEASURES.IsZero AS
[Measures].[Internet Tax Amount]=0 SELECT {[Measures].[Internet Tax Amount],
MEASURES.ISEMPTYDemo, MEASURES.IsZero} ON COLUMNS, [Product].[Category].[Category].ALLMEMBERS ON ROWS
FROM [Adventure Works] WHERE [Date].[Calendar].[Calendar Year].&[2012]
33
NON EMPTY
33
SELECT {[Measures].[Internet Tax Amount]} ON COLUMNS, NON EMPTY [Product].[Category].[Category].MEMBERS ON ROWSFROM [Adventure Works] WHERE([Date].[Calendar].[Calendar Year].&[2012])
34
Fundamentos: NonEmpty
34
WITH MEMBER MEASURES.CategoryCount ASCOUNT([Product].[Category].[Category].MEMBERS) MEMBER MEASURES.NonEmptyCategoryCountFor2012 ASCOUNT(
NONEMPTY( [Product].[Category].[Category].MEMBERS ,([Date].[Calendar].[Calendar Year].&[2012], [Measures].[Internet Tax Amount]) )
) SELECT {MEASURES.CategoryCount, MEASURES.NonEmptyCategoryCountFor2012 } ON COLUMNSFROM [Adventure Works];
Funciones y más funcionesMás allá de los Pivot Tables
35
36
Funciones (Sintaxis MDX)
36
Categoría Descripción
Array functions Provide arrays for use in stored procedures
Dimension functions Return a reference to a dimension from a hierarchy, level, or member.
Hierarchy functions Return a reference to a hierarchy from a level or member.
Level functions Return a reference to a level from a member, dimension, hierarchy, or from a string expression.
Logical functions Perform logical operations and comparisons on objects and expressions.
Member functions Return a reference to a member from other objects or from a string expression.
Numeric functions Perform mathematical and statistical functions on objects and expressions.
Set functions Return a reference to a set from other objects or from a string expression.
String functions Return string values from other objects or from the server.
Tuple functions Return a reference to a tuple from a set or from a string expression.
37
Funciones de Cadena (String)
37
WITHMEMBER [Measures].[ProductName] AS
[Product].[Product].CurrentMember.NameMEMBER [Measures].[ProductUniqueName] AS
[Product].[Product].CurrentMember.UniquenameMEMBER [Measures].[ProductDimensionName] AS
[Product].NameSELECT {[Measures].[ProductName], [Measures].[ProductUniqueName],
[Measures].[ProductDimensionName]} ON COLUMNS, [Product].[Product].MEMBERS ON ROWS
FROM [Adventure Works] ;
38
Funciones de Cadena (String)
38
SELECT {STRTOMEMBER("[Measures].[Inter" + "net Sales Amount]")} ON COLUMNS, STRTOSET("{
[Product].[Product Categories].[Category].&[3], [Product].[Product Categories].[Product].&[477], [Product].[Product Categories].[Product].&[788], [Product].[Product Categories].[Product].&[708], [Product].[Product Categories].[Product].&[711] }") ON ROWS
FROM [Adventure Works];
39
Funciones Lógicas
39
WITHMEMBER MEASURES.[IsLeafDemo] AS
IsLeaf([Date].[Calendar].CurrentMember)
MEMBER MEASURES.[IsAncestorDemo] ASIsAncestor([Date].[Calendar].CurrentMember, [Date].[Calendar].[Date].&[1])
SELECT {MEASURES.[IsLeafDemo], MEASURES.[IsAncestorDemo] } ON 0, [Date].[Calendar].MEMBERS ON 1
FROM [Adventure Works];
40
Funciones a nivel de Miembro
40
WITHMEMBER MEASURES.[CurrentMemberDemo] AS
[Date].[Calendar].CurrentMember.NameMEMBER MEASURES.[ParentDemo] AS
[Date].[Calendar].CurrentMember.Parent.NameMEMBER MEASURES.[AncestorDemo] AS
ANCESTOR([Date].[Calendar].CurrentMember, [Date].[Calendar].[Calendar Year]).NameMEMBER MEASURES.[PrevMemberDemo] AS
[Date].[Calendar].CurrentMember.Prevmember.NameSELECT {MEASURES.[CurrentMemberDemo], MEASURES.[ParentDemo],
MEASURES.[AncestorDemo], MEASURES.[PrevMemberDemo] } ON 0, [Date].[Calendar].MEMBERS ON 1
FROM [Adventure Works];
41
Funciones a nivel de Miembro: ParallelPeriod
41
january
february
march
april
may
june
july
august
september
october
november
december
Quarter 1
Quarter 2
Quarter 3
Quarter 4
Semester 1
Semester 2
ParallelPeriod([Quarter, 1, April])
ParallelPeriod([Quarter, -2, April])
42
Funciones a nivel de Conjunto (Set): Descendants
42
SELECT [Measures].[Internet Sales Amount] ON Columns, DESCENDANTS( [Date].[Calendar].[Calendar Year].&[2011] ,
[Date].[Calendar].[Date]) ON RowsFROM [Adventure Works];
43
Funciones a nivel de Conjunto (Set): Order
43
SELECT [Measures].[Internet Sales Amount] ON Columns, ORDER(
DESCENDANTS( [Date].[Calendar].[Calendar Year].&[2012] ,
[Date].[Calendar].[Date]) , [Measures].[Internet Sales Amount], BDESC
) ON ROWSFROM [Adventure Works] ;
44
Funciones a nivel de Conjunto (Set): Filter
44
SELECT [Measures].[Internet Sales Amount] ON Columns, FILTER(
DESCENDANTS( [Date].[Calendar].[Calendar Year].&[2010] , [Date].[Calendar].[Date])
, [Measures].[Internet Sales Amount]>10000) ON Rows
FROM [Adventure Works]
Preguntas?
Referencias
¡Gracias!
Alan KooSenior Consultant | Nagnoi, LLC.
Blog: www.alankoo.com
Twitter: @alan_koo
facebook.com/MicrosofBIyMas
Gracias por participar
top related