Computing">
Nothing Special   »   [go: up one dir, main page]

Dax 1

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 17

¿Qué es DAX?

El lenguaje DAX fue creado específicamente para el manejo de modelos de datos,


mediante el uso de fórmulas y expresiones.

Expresiones de análisis de datos (DAX) es un lenguaje de expresiones de fórmulas


que se usa en Analysis Services, Power BI y Power Pivot en Excel. Las fórmulas DAX
abarcan funciones, operadores y valores para realizar cálculos avanzados y
consultas en los datos de las tablas y columnas relacionadas de los modelos de
datos tabulares.

Este artículo sirve de introducción básica a los conceptos más importantes de DAX.
En él se describe DAX y es aplicable a todos los productos que lo usan. Puede que
algunas funciones no sean válidas en determinados productos o casos de uso.
Consulte la documentación del producto en la que se especifique su
implementación de DAX específica.

Tipos de Datos
Tipos de datos DAX: Numéricos

Todos ellos tienen en común que su almacenamiento ocupa 8 bytes.

Número Decimal (Decimal Number): son números de punto flotante. Puede


almacenar valores de hasta 15 dígitos, positivos y negativos, en los que el
separador decimal puede colocarse en cualquier parte del número

Número Decimal Fijo (Fixed Decimal Number): el separador decimal tiene una
ubicación fija. Puede almacenar valores de hasta 19 dígitos, almacenando
«siempre» 4 decimales

Número Entero (Whole Number): Permite hasta 19 dígitos en la parte entera,


pero no admite decimales

Está claro que en el caso de no tener que almacenar decimales utilizaremos el tipo
Entero (Whole Number). Ahora, donde debemos evaluar con detalle el tipo de
datos a utilizar es cuando tenemos que almacenar decimales y no dejarnos llevar
por los asistentes y los valores que se asignan por defecto al importar datos desde
el origen porque nos pueden causar problemas. Siempre debemos realizar una
revisión exhaustiva del tipo de datos asignado a cada columna de todas las tablas
de nuestro modelo de datos (data model).

Siempre que estemos almacenando valores de transacciones financieras y de


gestión que necesiten almacenar números con decimales, la mejor opción es
Número Decimal Fijo (Whole Number), cuya única excepción es que necesitemos
almacenar más de 4 decimales, en cuyo caso no nos queda otra alternativa que
utilizar Número Decimal.

Y ¿Por qué esta decisión? Porque al trabajar datos almacenados con punto flotante,
se pueden producir pequeñas variaciones en los cálculos debido a la precisión, que
si bien para unas decenas de filas las consecuencias son inapreciables, lo habitual
es que tengamos miles o millones de filas, con lo que cuando utilizamos funciones
de agregación (algo que ocurre en la práctica totalidad de nuestros modelos de
datos), se van produciendo esas variaciones, esos descuadres que no nos podemos
permitir a la hora de presentar resultados y que, en este caso, no son debidos al
error en las fórmulas DAX, sino al error cometido por no asignar el tipo de datos
adecuado a las columnas que intervienen en los cálculos.

En resumen, basándonos en lo anterior, esta es mi recomendación en cuanto a los


tipos de datos numéricos a utilizar en las columnas de las tablas del modelo:

Si no hay decimales -> Número Entero (Whole Number)

Si hay hasta 4 decimales -> Número Decimal Fijo (Fixed Decimal Number). Para


gran parte de las transacciones financieras es suficiente con 2 decimales, así que no
será habitual que se produzca un overflow por usar este tipo de datos
habitualmente.

Si hay 5 decimales o más -> Número Decimal (Decimal Number). No es que nos


parezca la opción más adecuada, pero al no disponer de un tipo de datos que sin
usar punto flotante nos permita almacenar más de 4 decimales, es la única
alternativa viable.

Finalmente os dejo este enlace a un artículo en inglés que aborda este tema en
más profundidad: Choosing Numeric Data Types in DAX.

Tipos de datos DAX: Fecha y Hora


Un detalle importante que debes tener en cuenta es, que aunque no es visible,
internamente se almacenan como un tipo de número decimal, que almacena la
diferencia de tiempo entre la fecha indicada y al 1/1/1900. Almacena la fecha en la
parte entera del número interno y la hora en la parte decimal.

Disponemos de tres tipos de datos para almacenar fechas y horas:

Fecha/Hora (Date/Time): almacena valores de fechas y horas

Fecha (Date): almacena sólo la parte de la fecha, siendo siempre ceros los valores
de la hora (parte decimal)

Hora (Time): almacena sólo la parte de la hora, siendo siempre ceros la pare de la
fecha (parte entera, que por tanto equivale a 1/1/1900)

Por supuesto, no es necesario conocer estos detalles de almacenamiento numérico


que te he comentado, pero en un momento dado, si algo no está dando el
resultado que esperas, el entender estos detalles internos te puede ser de mucha
ayuda para solucionar problemas concretos.

 Otros tipos de datos DAX (Texto, Booleano, Binario)

Para almacenar valores de texto, disponemos de un único tipo de datos: Texto


(Text). Almacena cadenas de caracteres Unicode de hasta 512 MB. Por tanto, sin
entrar a más detalles técnicos, se pueden almacenar cadenas de caracteres
muuuuuuy largas :), de hasta 256 millones de caracteres Unicode. No distingue
entre mayúsculas y minúsculas (case-insensitive), es decir, hola = Hola = HOLA.

Disponemos también de un tipo de datos Booleano llamado Verdadero/Falso


(True/False), que admite únicamente esos dos valores, almacenándose
internamente el valor ‘falso’ con un 0 (cero) y el valor ‘verdadero’ con un 1.

Finalmente, disponemos del tipo Binario (Binary), que nos permite almacenar


diversos objetos y se utiliza principalmente para almacenar fotos. Pensarás ¿Y para
que quiero una foto en un modelo analítico? Pues principalmente para mejorar la
interfaz de usuario y la usabilidad. Puedes utilizarlo, por ejemplo, para filtrar en
base a la foto en lugar de una descripción o para mostrar dichas fotos en un
informe o cuadro de mando.

Te dejo un enlace a la web oficial de Power BI donde puedes ampliar


información: Tipos de datos en Power BI Desktop.
 

Tipos de datos DAX y Relaciones entre tablas

Es muy importante entender todas las características y comportamientos de cada


uno de los tipos de datos DAX, ya que además de aplicar el tipo de datos idóneo a
cada columna y evitar posibles problemas citados anteriormente, es necesario que
para establecer una relación entre dos tabla, las columnas que intervienen en dicha
relación han de ser del mismo tipo de datos.

Tipos de datos y formato

Los tipos de datos afectan al almacenamiento interno y al resultado de los cálculos.


Es fundamental, como hemos comentado, utilizar los tipos de datos adecuados
para obtener los resultados deseados y correctos. El formato afecta a la
visualización exclusivamente.

Es muy importante también utilizar el formato adecuado, que además sea


coherente con el tipo de datos utilizado y el número de decimales obtenidos en los
cálculos. Por ejemplo, si utilizado el tipo de datos entero, no tiene sentido que
pongamos 4 decimales en el formato. El que no tenga sentido no quiere decir que
no se pueda hacer, evidentemente, sí que se puede, lo que ocurrirá es que en la
parte decimal, siempre aparecerán cinco ceros.

Si por el contrario, ponemos un formato con menos decimales de los que almacena
ese tipo de datos ocurrirá que sólo se mostrarán esos, realizando un redondeo
implícito. Por ejemplo, si tenemos una columna que tiene números enteros fijos y
un formato de dos decimales, hará un redondeo implícito. Aunque en este caso es
recomendable hacer en el momento de la carga un redondeo explícito mediante
las funciones de cálculo de Query y almacenarlo ya redondeado a dos decimales.

Find Actual Questions For power bi | ITExams.com

Optimización de un modelo para rendimiento en Power  BI  - Learn | Microsoft Docs

Cálculos
Las fórmulas DAX se usan en medidas, columnas calculadas, tablas calculadas y
seguridad de nivel de fila.

Columnas Calculadas
Con las columnas calculadas, se pueden agregar nuevos datos a una tabla ya
existente en el modelo. Pero en lugar de consultar y cargar los valores en la nueva
columna desde un origen de datos, se crea una fórmula de expresiones de análisis
de datos (DAX) que define los valores de columna. En Power BI Desktop, las
columnas calculadas se crean mediante la característica nueva columna en la
vista Informes.

A diferencia de las columnas personalizadas creadas como parte de una consulta


con la opción Agregar columnas personalizadas en el Editor de consultas, las
columnas calculadas creadas en las vistas Informes o Datos se basan en datos que
ya se han cargado en el modelo. Por ejemplo, tal vez elija concatenar los valores de
dos columnas diferentes en dos tablas diferentes pero relacionadas, hacer sumas o
extraer subcadenas.

Las columnas calculadas que cree aparecerán en la lista Campos como cualquier


otro campo, pero tendrán un icono especial para indicar que sus valores son
resultado de una fórmula. Puede asignar el nombre que desee a las columnas y
agregarlas a la visualización de un informe, igual que cualquier otro campo.
Las columnas calculadas calculan los resultados usando DAX, un lenguaje de
fórmulas diseñado para trabajar con datos relacionales como en Power BI Desktop.
DAX incluye una biblioteca de más de 200 funciones, operadores y construcciones.
Ofrece una gran flexibilidad en la creación de fórmulas para calcular los resultados
ante casi cualquier necesidad de análisis de datos. Para más información acerca de
DAX, consulte Conceptos básicos de DAX en Power BI Desktop.

Las fórmulas DAX son muy similares a las fórmulas de Excel. De hecho, DAX tiene
muchas de las mismas funciones que Excel. Las funciones de DAX, sin embargo,
están diseñadas para trabajar con datos segmentados de forma interactiva o
filtrados en un informe, como en Power BI Desktop. En Excel, puede tener una
fórmula diferente para cada fila de una tabla. En Power BI, al crear una fórmula DAX
para una nueva columna, calculará un resultado para cada fila de la tabla. Los
valores de columna se calculan varias veces, según sea necesario, como cuando se
actualizan los datos subyacentes y los valores cambian.

Ahora se verá un ejemplo.


Juan es administrador de envíos en Contoso y quiere crear un informe que muestre
el número de envíos a diferentes ciudades. Juan tiene una tabla Geography con
campos independientes para las ciudades y los estados. Sin embargo, Juan quiere
que en sus informes se muestren los valores de ciudad y estado como un valor
único en la misma fila. En este momento la tabla Geography de Juan no tiene el
campo que necesita.

Pero con una columna calculada, Juan puede reunir las ciudades de la
columna City con los estados de la columna State.
Juan hace clic con el botón derecho en la tabla Geography y, después,
selecciona Nueva columna. Después, Juan especifica la siguiente fórmula DAX en
la barra de fórmulas:

Esta fórmula simplemente crea una nueva columna denominada CityState. Para


cada fila de la tabla Geography, toma los valores de la columna City, agrega una
coma y un espacio y, después, concatena los valores de la columna State.

Ahora Juan tiene el campo que quiere.

Puede agregarlo al lienzo de su informe junto con el número de envíos. Con el


mínimo esfuerzo, Juan tiene un campo CityState, que puede agregar a casi
cualquier tipo de visualización. Cuando Juan crea un mapa nuevo, Power BI
Desktop sabe cómo leer los valores de ciudad y estado de la nueva columna.
Medidas

Las medidas son fórmulas de cálculo dinámico en las que los resultados cambian
en función del contexto. Las medidas se usan en informes en los que se pueden
combinar y filtrar datos del modelo mediante varios atributos, como un informe de
Power BI o una tabla dinámica o un gráfico dinámico de Excel. Las medidas se
crean con la barra de fórmulas DAX del diseñador de modelos.

Una fórmula en una medida puede usar las funciones de agregación estándar
creadas automáticamente con la característica de Autosuma (como COUNT o
SUM), aunque también podemos definir nuestra propia fórmula con la barra de
fórmulas DAX. Las medidas con nombre se pueden pasar como argumento a otras
medidas.

Al definir una fórmula para una medida en la barra de fórmulas, una característica
de información sobre herramientas muestra una vista previa de cuáles serían los
resultados para total en el contexto actual, pero de lo contrario no se generan los
resultados inmediatamente en ninguna parte. La razón por la que no se pueden ver
los resultados (filtrados) del cálculo inmediatamente es que el resultado de una
medida no se puede determinar sin el contexto. Evaluar una medida requiere una
aplicación cliente de informes que pueda proporcionar el contexto necesario para
recuperar los datos pertinentes de cada celda y, a continuación, evaluar la
expresión para cada celda. Ese cliente podría ser una tabla dinámica o un gráfico
dinámico de Excel, un informe de Power BI o una expresión de tabla en una
consulta DAX en SQL Server Management Studio (SSMS).
Independientemente del cliente, se ejecuta una consulta distinta por cada celda de
los resultados. Es decir, cada combinación de encabezados de fila y de columna de
una tabla dinámica, o cada selección de segmentación de datos y filtros de un
informe de Power BI, genera un subconjunto de datos diferente sobre el que se
calcula la medida. Por ejemplo, con esta fórmula de medida muy sencilla:

DAX
Total Sales = SUM([Sales Amount])

Cuando un usuario coloca la medida TotalSales en un informe y, después, coloca la


columna Product Category de una tabla Product en Filters, la suma de Sales
Amount se calcula y se muestra en cada categoría de producto.

A diferencia de las columnas calculadas, la sintaxis de una medida incluye el


nombre de la medida antes de la fórmula. En el ejemplo que acabamos de
proporcionar, el nombre Total Sales aparece delante de la fórmula. Después de
crear una medida, el nombre y su definición aparecen en la lista de campos de la
aplicación cliente de informes y, en función de las perspectivas y roles, estarán
disponibles para todos los usuarios del modelo.

Funciones de Agregación
Las agregaciones son una forma de contraer, resumir o agrupar datos. Las
agregaciones más comunes, como las que usan PROMEDIO, DISTINCTCOUNT,
MAX, MIN, SUM, pueden crearse automáticamente en una medida mediante
autosuma.

Funciones de Conteo
COUNT, COUNTX, COUNTROWS, COUNTBLANK

Funciones Lógicas
Las funciones lógicas actúan sobre una expresión para devolver información sobre
los valores o los conjuntos de la expresión. Por ejemplo, puede usar la función IF
para comprobar el resultado de una expresión y crear resultados condicionales.
Función Descripción

AND Comprueba si los dos argumentos son TRUE y devuelve TRUE si todos
lo son.

COALESCE Devuelve la primera expresión que no se evalúe como BLANK.

FALSE Devuelve el valor lógico FALSE.

IF Comprueba una condición y devuelve un valor cuando es "TRUE"; en


caso contrario, devuelve un segundo valor.

IF.EAGER Comprueba una condición y devuelve un valor cuando es "TRUE"; en


caso contrario, devuelve un segundo valor. Utiliza un plan de ejecución diligente
que siempre ejecuta las expresiones de bifurcación independientemente de la
expresión de condición.

NOT Cambia FALSE por TRUE o TRUE por FALSE.

OR Comprueba si uno de los argumentos es TRUE para devolver TRUE.

SWITCH Evalúa una expresión en una lista de valores y devuelve una de varias
expresiones de resultado posibles.

TRUE Devuelve el valor lógico TRUE.

DAX: Uso de variables para mejorar las


fórmulas
 23/11/2019
 Tiempo de lectura: 3 minutos

o
o

Como modelador de datos, escribir y depurar algunos cálculos DAX puede ser
complejo. Es habitual que los requisitos de cálculos complejos impliquen a menudo
la escritura de expresiones compuestas o complejas. Las expresiones compuestas
pueden implicar el uso de muchas funciones anidadas y, posiblemente, la
reutilización de la lógica de expresión.

El uso de variables en las fórmulas DAX le permite escribir cálculos complejos y


eficaces. Las variables pueden:

 Mejorar el rendimiento
 Mejorar la legibilidad
 Simplificar la depuración
 Reducir la complejidad

En este artículo se mostrarán las tres primeras ventajas con una medida de ejemplo
para el crecimiento de ventas de año a año (YoY). La fórmula del crecimiento de
ventas YoY es la siguiente: ventas por período _menos ventas para el mismo
período del año pasado, dividido por las ventas del mismo período del año pasado.

Comencemos con la siguiente definición de medida.


DAXCopiar
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)

La medida genera el resultado correcto, pero veamos cómo se puede mejorar.

Mejorar el rendimiento
Observe que la fórmula repite la expresión que calcula "el mismo período del año
pasado". Esta fórmula es ineficaz, ya que fuerza a Power BI a evaluar la misma
expresión dos veces. La definición de la medida se puede hacer más eficaz usando
una variable.

La siguiente definición de medida representa una mejora. Usa una expresión para
asignar el resultado "del mismo período del año pasado" a una variable
denominada SalesPriorYear. Entonces, la variable se usa dos veces en la expresión
RETURN.

DAXCopiar
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)

La medida sigue generando el resultado correcto y lo hace en más o menos la


mitad del tiempo de consulta.

Mejorar la legibilidad
En la definición de medida anterior, observe cómo la elección del nombre de la
variable hace que la expresión RETURN sea más fácil de entender. La expresión es
breve y autodescriptiva.

Simplificar la depuración
Las variables también pueden ayudarle a depurar una fórmula. Para probar una
expresión asignada a una variable, debe reescribir temporalmente la expresión
RETURN para generar la variable.
La siguiente definición de medida solo devuelve la variable SalesPriorYear.
Observe cómo quita la marca de comentario de la expresión RETURN deseada. Con
esta técnica puede revertirla fácilmente una vez concluida la depuración.

DAXCopiar
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear

Reducir la complejidad
En versiones anteriores de DAX, las variables aún no eran compatibles. Las
expresiones complejas que incorporaban nuevos contextos de filtro eran necesarias
para usar las funciones DAX EARLIER o EARLIEST para hacer referencia a contextos
de filtro externos. Desafortunadamente, para los modeladores de datos estas
funciones eran difíciles de comprender y de usar.

Las variables siempre se evalúan fuera de los filtros a los que se aplica la expresión
RETURN. Por este motivo, a la hora de usar una variable dentro de un contexto de
filtro modificado, se obtiene el mismo resultado que con la función EARLIEST. Por
lo tanto, se puede evitar el uso de las funciones EARLIER o EARLIEST. Es decir, ahora
puede escribir fórmulas menos complejas y más fáciles de entender.

Observe la siguiente definición de columna calculada que se ha agregado a la


tabla Subcategoría. Evalúa un rango para cada subcategoría de producto en
función de los valores de la columna Subcategory Sales (Ventas por subcategoría).

DAXCopiar
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1

La función EARLIER sirve para hacer referencia al valor de la columna Subcategory


Salesen el contexto de fila actual.

La definición de la columna calculada se puede mejorar usando una variable en


lugar de la función EARLIER. La variable CurrentSubcategorySales almacena el
valor de la columna Subcategory Salesen el contexto de fila actual y la expresión
RETURN la usa en un contexto de filtro modificado.

DAXCopiar
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1

Uso de variables en expresiones


DAX
Se describen a continuación varios ejemplos en los que se utilizan variables dentro de
expresiones DAX:

Definición de una medida concatenando textos y


números
Sales txt = 
    VAR TotalSales = SUM(Sales[SalesAmount])
    VAR Text1 = "Este mes hemos vendido "
    VAR Text2 = "Este mes no hemos vendido nada"
    RETURN
        IF(
            TotalSales > 0;                 -- IF
            CONCATENATE(Text1; TotalSales); -- THEN
            Text2                           -- ELSE
        )
En este ejemplo se define una primera variable, TotalSales, conteniendo la suma
(contextualizada) de la columna SalesAmount de la tabla Sales, columna que contiene
los importes de cada venta. A continuación se definen dos variables conteniendo
textos que serán usadas en la salida de la medida.

El valor devuelto es el resultado de un IF: Si las ventas (recordemos nuevamente,


contextualizadas) son mayores que cero, se devuelve un mensaje indicando las
ventas: "Este mes hemos vendido XXXX". En caso contrario, se devuelve
directamente la cadena de texto Text2: "Este mes no hemos vendido nada". A pesar
de los textos usados, la medida así definida no es capaz de distinguir si el contexto ha
reducido las fechas a un mes o no.

Para la concatenación de los textos se ha usado la función CONCATENATE.

Medida con SWITCH


Greetings = 
    VAR CurrentTime = HOUR(NOW())
    VAR Period =
        SWITCH(
            TRUE();
            CurrentTime < 12; "morning";
            CurrentTime < 17; "afternoon";
            "evening"
        )
    RETURN "Good" & " " & Period
Se desea devolver en esta medida un mensaje de buenos días, tardes o noches en
función de la hora de que se trate. Para ello extraemos hora con la función HOUR a
partir de la fecha y hora actual que devuelve la función NOW.

A continuación, asignamos a la variable Period una cadena de texto en función de la


hora calculada: Si la hora es anterior a las 12 del mediodía le asignamos el texto
"morning", si es anterior a las 5 de la tarde le asignamos el texto "afternoon" y, si no
se cumple ninguna de estas dos condiciones, le asignamos el texto por defecto
"evening".

Por último, devolvemos la concatenación de la palabra "Good" y el contenido de la


variable Period, resultando "Good morning", "Good afternoon" o "Good evening".

Creación de una columna calculada


State & Country =
    VAR State = Geography[StateProvinceName]
    VAR Country = Geography[Country]
    RETURN State & ", " & Country
En este ejemplo estamos añadiendo a la tabla Geography un campo al que
denominamos State & Country conteniendo la concatenación del estado y del país.
Para ello extraemos ambos campos y los almacenamos en sendas variables, y
devolvemos la concatenación:
Medida que devuelve el número de elementos de una
tabla filtrada
Bikes sales =
    VAR Bikes = FILTER(Sales; RELATED(Category[Category]) =
"Bikes")
    RETURN
        COUNTROWS(Bikes)
En este ejemplo partimos de una tabla de ventas, Sales, y una tabla conteniendo las
posibles categorías a las que pertenecen los productos que se venden, Category, y
deseamos saber cuántas ventas han sido de productos de la categoría Bikes.

Comenzamos extrayendo el subconjunto de la tabla Sales conteniendo las ventas de


productos cuya categoría es la buscada, para lo que filtramos la tabla
con FILTER especificando como filtro que la categoría sea Bikes. Al encontrarse esta
información (la categoría de cada producto) en una tabla de dimensiones, se
necesario usar la función RELATED para acceder a ella.

Por último, devolvemos el recuento de las filas de esta tabla usando la


función COUNTROWS.

Funciones matemáticas y
trigonométricas
Las funciones matemáticas de las expresiones de análisis de datos (DAX) son muy
similares a las funciones matemáticas y trigonométricas de Excel. En esta sección se
enumeran las funciones matemáticas que proporciona DAX.

Funciones matemáticas y trigonométricas (DAX) - DAX | Microsoft Docs


Funciones de relación
Las funciones de esta categoría sirven para administrar y usar las relaciones entre
las tablas.

Funciones de relación (DAX) - DAX | Microsoft Docs

También podría gustarte