Introducción a DAX, problema vs solución Ana María Bisbé York Consultora BI #sqlsatMadrid #sqlsat459 anabisbe@amby.net @ambynet
3 Sponsor Sessions at 11:30 Don’t miss them, they might be getting distributing some awesome prizes! HP SolidQ Pyramid Analytics Also Raffle prizes at the end of the event provided by HP, SolidQ, Pyramid Analytics, Altran & Microsoft
Our Main Sponsors:
Introducción a DAX, problema vs solución Agenda Modelos tabulares DAX vs Excel DAX vs T-SQL DAX vs MDX Solucionando problemas Columnas calculadas vs medidas Contextos Patrones BI de tiempos
Modelos tabulares… dax
DAX … algo nuevo Modelo tabular Orígenes de datos Tablas Columnas No olvidar Power Query Tablas Columnas Relaciones Jerarquías Otras funcionalidades
Modelos tabulares DEMO
Demo Modelo tabular
Lenguaje de expresiones DAX Encontramos DAX en PowerPivot para Excel y Sharepoint BISM – Modelo tabular PowerBI http://amby.net/2012/07/02/resumen-serie-ssas-2012-con-modelo-tabular/ http://amby.net/2012/05/04/serie-powerpivot-con-sql-server-2008r2-y-2012/
Lenguaje de expresiones DAX DAX – Data Analysis Expressions DAX - colección de funciones, operadores, referencias y valores constantes que se pueden utilizar en una fórmula o expresión, para calcular y devolver uno o más valores. Las expresiones DAX brindan capacidades de cálculo, de integración de datos y más.
Comparación DAX vs Excel, SQL y MDX Resumen comparativo DAX, lenguaje funcional, todo en DAX es una expresión, como Excel DAX usa modelo tabular relacional, como T-SQL DAX usa concepto de contexto actual, como MDX
Dax vs Excel
DAX vs MS Office Excel Creado a partir del lenguaje de fórmulas Excel PowerPivot es una herramienta para usuarios expertos de Excel Muchas funciones existen igual en Excel Ambos son lenguajes funcionales, todo en Excel y DAX es una expresión Reduce la curva de aprendizaje En poco tiempo se crean las primeras columnas calculadas y medidas
DAX vs MS Office Excel DAX es diferente a Excel, Celdas vs tablas y columnas No se puede copiar y pegar una fórmula de uno en otro Hay un conjunto de funcionalidades que no existen en Excel BI de tiempos
DAX vs MS Office Excel DAX es diferente a Excel, Diferencia de sintaxis en Excel, no existente en DAX =SUMA([Importe]) vs =SUMA([@Importe]) Uso de iteradores en DAX, no existen en Excel =SUMX(Ventas, Ventas[Cantidad]*Ventas[Precio]) Excel exige la columna para poder crear agregado
DAX vs Excel
Dax vs T-SQL
DAX vs SQL Consultas al modelo como si de una base de datos relacional se tratara EVALUATE vs SELECT FROM Selección de columnas WHERE ORDER BY GROUP BY, con y sin agregados
Consultar DAX - Recurso https://daxstudio.codeplex.com/
DAX vs SQL
DAX vs SQL
DAX vs TSQL DEMO
DAX vs SQL
Recurso – DAXFormatter.com http://www.sqlbi.com/articles/rules-for-dax-code-formatting/ http://www.sqlbi.com/articles/rules-for-dax-code-formatting/
DAX vs SQL Trabajo con relaciones entre tablas: igual y a la vez diferente En DAX, no hay que expresar la condición del JOIN Sólo LEFT JOIN Subconsultas SQL = funciones anidadas DAX
DAX vs SQL - JOIN
DAX vs SQL – JOIN más agregado
DAX vs SQL – Subconsultas
DAX vs MDX
DAX vs MDX Saber MDX no ayuda demasiado para aprender DAX Dos tipos de modelos, dos sabores, funcionalidades compartidas,… o no Ambos son lenguajes de programación En MDX, repositorio para código, para crear miembros y conjuntos y además, existe SCOPE En DAX, nada de esto; pero a su favor Creación de columnas calculadas Ambos son lenguajes de consulta En MDX, para consultar: SELECT En DAX, para consultar: EVALUATE
DAX vs MDX Otras razones para cambiar de forma de pensar Diferente trabajo con jerarquías MDX se apoya en las jerarquías, digamos… (PrevMember(CurrentMember)) DAX filtra tablas, no usa las jerarquías más que para visualizar Función de agregación MDX utiliza la función de agregación definida en el modelo multidimensional DAX necesita que se especifique en la expresión, no existe definición de función de agregado en el modelo tabular
Columnas calculadas vs medidas en DAX
Columnas calculadas vs medidas… algo nuevo Dos tipos de cálculos: Columnas calculadas Se evalúa cada fila Consume más recursos, calcula para cada fila de la tabla Cálculo inmediato, en columnas, dentro del modelo Tabular Medidas Nuevo campo en la tabla PowerPivot – se evalúa en el momento que se agrega a la tabla/gráfico Consume menos recursos, sólo se calcula para las celdas que se utilizan en tablas y gráficos dinámicos Cálculo dinámico, en medidas o cálculos, al vuelo para cada celda de la tabla dinámica
Columnas calculadas DEMO
DEMO Columnas calculadas con DAX Ya teníamos de las jerarquías: -- Sentido relación M:1 En Productos =RELATED(Categorias[EnglishProductCategoryName]) =RELATED(Subcategorias[EnglishProductSubcategoryName]) En Clientes =RELATED(Geografia[EnglishCountryRegionName]) Ventas Margen:=Ventas[Venta]-Ventas[Coste] VentasNegativas=IF(Ventas[SalesTerritoryKey]=1;-1*Ventas[Venta];Ventas[Venta]) Productos LíneaProductos=SWITCH(Productos[Línea];"T";"Turismo";"M";"Montaña";"R";"Ruta";"S";"Sencilla";"Sin Asignar") Clientes: =IF(Clientes[Ingresos]>50000;"Alto";IF(Clientes[Ingresos]>30000;"Medio";"Bajo")) Fechas: Semestre:=ROUNDUP(MONTH(Fechas[FullDateAlternateKey])/6;0) Territorios: -- Calcular agregado en tabla relacionada -- Sentido relación 1:M =SUMX(RELATEDTABLE(Ventas);Ventas[Venta])
Medidas DEMO
DEMO Medidas con DAX 3.- Trabajo con Medidas Columnas vs Medidas %Margen -- Primero como columna calculada Margen%=Ventas[Margen]/Ventas[Venta] -- Luego, lo mismo; pero como Medida %Margen_M %Margen_M=SUM(Ventas[Margen])/SUM(Ventas[Venta]) -- Correcto Medidas y agregados simples y complejos SumaVentas:=SUM(Ventas[Venta]) SumaXVentas:=SUMX(Ventas;Ventas[Venta]) -- Uso de SUMX para sumar varias columnas SumaXCantidadPrecio:=SUMX(Ventas;Ventas[Cantidad]*Ventas[Precio]) SumaXVentasIVA:=SUMX(Ventas;Ventas[Venta]+Ventas[IVA])
Columna calculada vs Medida En filas y/o columnas de tabla dinámica En segmentadores En agrupaciones o categorizaciones de elementos, para discretizar datos Medida Examinar el resultado como valor, en el panel central de tabla dinámica Utilizar este valor como origen de datos para KPI Su valor dependerá del contexto definido por el usuario en la tabla dinámica Está afectado por filtros de tabla dinámica y segmentadores
Contextos en DAX
Contextos de evaluación Cada consulta se resuelve dentro de un contexto específico Contexto de filtro Siempre existe y define a un conjunto de filas activas en un cálculo Contexto de filas Existe sólo durante la iteración de una tabla y es la fila actual de la tabla en el momento de su iteración
Manipular el contexto de filtro Función CALCULATE Para manipular el contexto de filtro con filtros diferentes El argumento expresión es el único obligatorio La expresión del filtro es la que al ser evaluada modifica el contexto de filtro Pueden ser de dos tipos: Expresión lógica que contenga una sola columna, en ese caso, cualquier contexto de filtro sobre esta columna se sustituye por la nueva condición Una expresión de tabla que devuelve una o más columnas, en este caso, todos los filtros sobre las columnas devueltas por la expresión de tabla se sustituyen por la nueva condición de filtro
Propagación del contexto de filtros Cuando se aplica contexto de filtro sobre una tabla el filtro se propaga a las otras tablas relacionadas para cada relación uno a muchos (1:M) Si se aplica un filtro a una columna de la tabla Categoría, se propaga a Productos y también a Ventas No se propaga a Fechas
Contextos DEMO
Manipular el contexto de filtro
Manipular el contexto de filtro
Manipular el contexto de filtro
Manipular el contexto de filtro
Recurso http://www.amazon.es/dp/073569835X/?tag=wwwsqlbicom0f-21
BI de tiempos con DAX
Inteligencia de tiempos Comparar valores en períodos de tiempo equivalentes Requerimientos del modelo: Tabla de tiempos independiente, que contiene exclusivamente fechas y columnas derivadas sobre fechas La tabla de tiempos no puede contener saltos en fechas, de inicio a fin sin interrupciones El mínimo nivel de granularidad para el día, no puede incluir rangos de horas, el día es la mínima unidad. Al menos una columna tiene que ser de tipo fecha (Date) Utilizan funciones de inteligencia de tiempo para definir el comportamiento del negocio a través del tiempo Comparación de resultados entre años, donde el objetivo es un tanto porciento de crecimiento sobre el valor del período anterior
BI de tiempos DEMO
Períodos anteriores y posteriores TrimestreAnterior:= CALCULATE(SUM(Ventas[Ventas]); PREVIOUSQUARTER(Fechas[Fecha])) AñoAnterior:= CALCULATE(SUM(Ventas[Ventas]); PREVIOUSYEAR(Fechas[Fecha])) MismoPeríodoAñoPasado:= CALCULATE(SUM(Ventas[Ventas]); SAMEPERIODLASTYEAR(Fechas[Fecha]))
Períodos paralelos
Inteligencia de tiempos – Desde / Hasta
Agregar y comparar en el tiempo Obtener los totales desde inicios de año, trimestre, mes hasta día actual Conocidas como YTD (Year to date) Comparar estos agregados con los de años anteriores Ambos, agregados y comparativas cambian según el filtro de fecha y el nivel que se esté analizando
Acumulados
patrones
Clasificación ABC
Clasificación ABC
Clientes nuevos y recuperados
Clientes nuevos y recuperados
Recursos http://www.daxpatterns.com/ http://www.daxpatterns.com/usecases/
Resumen de recursos http://www.amazon.es/dp/073569835X/?tag=wwwsqlbicom0f-21 https://daxstudio.codeplex.com/ http://www.sqlbi.com/articles/rules-for-dax-code-formatting/ http://www.daxpatterns.com/
¿Preguntas? Ana María Bisbé York anabisbe@amby.net http://amby.net/ ¡¡ Gracias !!