Funciones DAX

Funciones DAX P á g i n a 1 | 55 INDICE Funciones de Fecha y Hora ..................................................

Views 171 Downloads 4 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Funciones

DAX P á g i n a 1 | 55

INDICE

Funciones de Fecha y Hora .................................................................................................. 4 Función DATE .................................................................................................................. 5 Funciones DAY, MONTH, YEAR, HOUR, MINUTE, SECOND .......................................... 6 Función EDATE ................................................................................................................ 9 Función NOW y TODAY .................................................................................................. 9 Función WEEKDAY .......................................................................................................... 10 Función WEEKNUM ........................................................................................................ 11 Funciones de texto ............................................................................................................... 13 Función BLANK................................................................................................................ 14 Función CONCATENATE ................................................................................................. 14 Función EXACT ................................................................................................................ 15 Función FIND................................................................................................................... 16 Funciones LEFT, RIGHT y MID ........................................................................................ 17 Función LEN .................................................................................................................... 18 Funciones LOWER y UPPER ............................................................................................ 18 Función REPT .................................................................................................................. 19 Función SUBSTITUTE ...................................................................................................... 19 Función TRIM .................................................................................................................. 20 Función VALUE ................................................................................................................ 21 Funciones Matemáticas ....................................................................................................... 22 Función CURRENCY......................................................................................................... 23 Función DIVIDE ............................................................................................................... 23 Funciones INT y TRUNC .................................................................................................. 24 Función ROUND .............................................................................................................. 25 Función SUM ................................................................................................................... 25 Funciones Lógicas ........................................................................................................... 27 Función AND y OR........................................................................................................... 28 Función IF ........................................................................................................................ 28 Función IFERROR ............................................................................................................ 29 Función SWITCH ............................................................................................................. 30 Funciones de Filtro ......................................................................................................... 31 Introducción al Contexto .................................................................................................... 32 Contexto de la fila ........................................................................................................... 32 Contexto de filtro............................................................................................................ 33 Interacciones y el contexto de filtro .............................................................................. 33 Funciones “X”.................................................................................................................. 34 Funciones RELATED / RELATEDTABLE ........................................................................... 38 Función COUNTROWS .................................................................................................... 41 Función FILTER ................................................................................................................ 44 Función DISTINCT ........................................................................................................... 46 P á g i n a 2 | 55

Contexto de Fila y Contexto de Filtro ............................................................................ 48 Contexto de Fila .............................................................................................................. 48 Contexto de Filtro ........................................................................................................... 48 Función CALCULATE ....................................................................................................... 49 Función VALUES .............................................................................................................. 54

P á g i n a 3 | 55

FUNCIONES DE FECHA Y HORA. Muchas de las funciones de fecha y hora en DAX son muy similares a las funciones de fecha y hora de Excel. No obstante, las funciones DAX pueden usar los valores de una columna como argumento. DAX también incluye un conjunto de funciones de inteligencia de tiempo que nos permiten manipular datos mediante períodos de tiempo, incluidos días, meses, trimestres y años y, a continuación, compilar y comparar cálculos durante esos períodos. En éste video se estudiarán las siguientes funciones:            

DATE DAY MONTH YEAR HOUR MINUTE SECOND EDATE NOW TODAY WEEKDAY WEEKNUM

P á g i n a 4 | 55

Función DATE Devuelve la fecha especificada pasados como argumentos el año, el mes y el día como números enteros. =DATE(año;mes;día) año

Número que representa el año. Puede incluir de uno a cuatro dígitos. Siempre que sea posible, debe usar cuatro dígitos para evitar resultados no deseados. Por ejemplo, al usar 07 se devuelve 1907 como el valor de año. Se admiten las fechas que comienzan con el 1 de marzo de 1900.

mes

Número que representa el mes o un cálculo según las siguientes reglas: Si escribe un entero mayor que 12, se produce el siguiente cálculo: la fecha se calcula sumando el valor de mes al año. Por ejemplo, si tiene DATE(2014, 18, 1), la función devuelve un equivalente del valor del 1 junio de 2015, porque se suman 18 meses al principio de 2014, lo que da como resultado el valor de junio de 2015. Si escribe un entero negativo, se produce el siguiente cálculo: se calcula la fecha restando el valor de mes al año. Por ejemplo, si tiene DATE(2014, -6, 15), la función devuelve el equivalente del valor del 15 de junio de 2013, porque cuando se restan seis meses de principios de 2014, el resultado es junio de 2013.

día

Número que representa el día o un cálculo según las siguientes reglas: Si escribe un entero mayor que el último día del mes dado, se produce el siguiente cálculo: la fecha se calcula sumando el valor de día al mes. Por ejemplo, en la fórmula DATE( 2014, 3, 32), devuelve un valor equivalente al 1 de abril de 2014, porque se suman 32 días al primero de marzo, lo que da como resultado el 1 de abril. Si escribe un entero negativo, se produce el siguiente cálculo: se calcula la fecha restando el valor de dia al mes. Por ejemplo, en la fórmula DATE( 2014, 5, -15), the DATE function devuelve un valor equivalente al 15 de abril de 2014, porque se resta 15 días del primero de mayo de 2014, lo que da como resultado abril de 2014.

P á g i n a 5 | 55

Funciones DAY, MONTH, YEAR, HOUR, MINUTE, SECOND Devuelven el día, mes, año, hora, minutos y segundos de una fecha. DAY(fecha) MONTH(fecha) YEAR(fecha) HOUR(fecha) MINUTE(fecha) SECOND(fecha)

P á g i n a 6 | 55

P á g i n a 7 | 55

Evidentemente todas estas funciones se pueden utilizar como argumento de funciones lógicas, se verán más adelante, como por ejemplo en un IF:

P á g i n a 8 | 55

Función EDATE Devuelve la fecha, que corresponde al número indicado de meses antes o después de la fecha de inicio. Use EDATE para calcular las fechas de vencimiento que tienen lugar el mismo día del mes que la fecha de emisión. =EDATE(fecha_inicio; meses) fecha_inicio Fecha que representa la fecha de inicio. meses

Entero que representa el número de meses antes o después de fecha_inicio.

En el ejemplo siguiente se devuelve la fecha tres meses posterior a la fecha de actualización del pedido, que está almacenada en la columna [UpdateDate] de la tabla [DimProduct]:

Funciones NOW y TODAY Devuelven la fecha y hora actuales. La función NOW devuelve la hora exacta mientras que TODAY devuelve el valor de hora 00:00:00 para todas las fechas.

P á g i n a 9 | 55

Si sabe que una persona nació en 1963, puede usar la fórmula siguiente para buscar la edad de dicha persona a partir del cumpleaños de este año: =YEAR(TODAY()) - 1963

Función WEEKDAY Devuelve un número de 1 a 7 para identificar el día de la semana de una fecha. De forma predeterminada, los días están comprendidos entre 1 (domingo) y 7 (sábado). WEEKDAY(fecha; tipo) P á g i n a 10 | 55

fecha

Fecha.

tipo

Un número que determina el valor devuelto: 1 La semana comienza en domingo (1) y termina el sábado (7). Es el valor predeterminado. 2 La semana comienza en lunes (1) y termina el domingo (7). 3 La semana comienza en lunes (0) y termina el domingo (6).

El ejemplo siguiente obtiene el número del día de la semana de la columna [UpdateDate] de la tabla [DimProduct], comenzando en Lunes: =WEEKDAY([UpdateDate];2)

Función WEEKNUM Devuelve el número de semana de una fecha según el valor de tipo. WEEKNUM(fecha; tipo) fecha

Fecha.

tipo

Un número que determina el valor devuelto: 1 La semana comienza el domingo. Valor predeterminado. 2 La semana comienza el lunes.

De forma predeterminada, la función WEEKNUM usa una convención de calendario en la que la semana que contiene el 1 de enero se considera que es la primera del año. No obstante, el estándar de calendario ISO 8601, que se usa ampliamente en Europa, define P á g i n a 11 | 55

que la primera semana es aquella en la que la mayoría de los días (cuatro o más) están en el nuevo año. Esto significa que en los años en los que hay tres o menos días en la primera semana de enero, la función WEEKNUM devuelve números de semana que son diferentes de la definición ISO 8601. En el ejemplo siguiente se devuelve el número de semana de la fecha almacenada en la columna [UpdateDate] de la tabla [DimProduct], empezando en Lunes. =WEEKNUM([UpdateDate];2)

P á g i n a 12 | 55

FUNCIONES DE TEXTO. Las Expresiones de análisis de datos (DAX) incluyen un conjunto de funciones de texto que está basado en la biblioteca de funciones de cadenas de Excel, pero modificadas para trabajar con tablas y columnas. En éste video se estudiarán las siguientes funciones:           

BLANK CONCATENATE / & EXACT FIND LEFT / RIGHT / MID LEN LOWER / UPPER REPT SUBSTITUTE TRIM VALUE

P á g i n a 13 | 55

Función BLANK Devuelve un valor en blanco. =BLANK() Los valores en blanco no equivalen a valores nulos. Algunas funciones DAX tratan las celdas en blanco de un modo algo distinto a como lo hace Microsoft Excel. Los valores en blanco y lo cadenas vacías ("") no siempre son equivalentes, pero algunas operaciones pueden tratarlos como tales. Por ejemplo, si el campo [TotalSalesAmount] de la tabla [DimStore[ > 22.000.000, devolvemos “OK”, en caso contrario, devolvemos un valor en blanco. =IF([TotalSalesAmount]>22000000;"OK";BLANK())

Función CONCATENATE Combina dos cadenas de texto en una sola. =CONCATENATE(texto1; texto2) texto1; Cadenas de texto que se van a combinar en una única cadena de texto2 texto. Las cadenas pueden incluir texto o números. También puede utilizar referencias de columna.

P á g i n a 14 | 55

La función CONCATENATE de DAX acepta solo dos argumentos, mientras que la función CONCATENATE de Excel acepta hasta 255 argumentos. Si necesita concatenar varias columnas, puede crear una serie de cálculos o, mejor, utilizar el operador de concatenación (&) para unir todos ellos en una expresión más sencilla. Si desea usar cadenas de texto directamente, en lugar de usar una referencia de columna, cada cadena se debe escribir entre comillas dobles.

Función EXACT Compara dos cadenas de texto y devuelve TRUE si son exactamente iguales y FALSE si no es así. EXACT distingue entre mayúsculas y minúsculas, pero omite las diferencias de formato. =EXACT(texto1; texto2)

P á g i n a 15 | 55

Función FIND Devuelve la posición inicial de una cadena de texto dentro de otra. FIND distingue mayúsculas de minúsculas. =FIND(texto_a_buscar; texto_destino; comienzo; no_encuentra) texto_a_buscar Texto que desea buscar. Use las comillas dobles (el texto vacío) para hacer coincidir el primer carácter de texto_destino. Puede usar caracteres comodín, el signo de interrogación (?) y asterisco (*), en texto_a_buscar. Un signo de interrogación devuelve cualquier carácter individual; un asterisco devuelve cualquier secuencia de caracteres. Si desea buscar un signo de interrogación o un asterisco real, escriba la tilde (~) antes del carácter. texto_destino

Texto que contiene el texto que desea buscar.

comienzo

(Opcional) Carácter en el que se iniciará la búsqueda; si se omite, comienzo = 1. El primer carácter de texto_destino es el número de carácter 1.

no_encuentra

(Opcional) el valor que se devuelve cuando la operación no encuentra una subcadena coincidente, normalmente 0, -1 o BLANK().

Por ejemplo: vamos a devolver la posición del texto “line” dentro de la columna [ChannelName] de la tabla [DimChannel]: =FIND("line";[ChannelName];1;blank())

P á g i n a 16 | 55

Funciones LEFT, RIGHT y MID Devuelven el número de caracteres especificado desde el inicio de una cadena de texto, el último carácter o caracteres en una cadena de texto o una cadena de caracteres de la zona media de una cadena de texto, dada la posición inicial y la longitud, según el número de caracteres que especifique, respectivamente =LEFT(texto; caracteres) =RIGHT(texto; caracteres) =MID(texto; posición; caracteres) Por ejemplo, de la tabla [DimStore] vamos a sacar información parcial sobre la columna [StorePhone]:

P á g i n a 17 | 55

Función LEN Devuelve el número de caracteres de una cadena de texto. =LEN(texto) texto

Texto cuya longitud desea encontrar o una columna que lo contiene. Los espacios cuentan como caracteres.

Funciones LOWER y UPPER Convierten en minúsculas y mayúsculas, respectivamente todas las letras de una cadena de texto. =LOWER(texto) =UPPER(texto)

P á g i n a 18 | 55

Función REPT Repite el texto un número determinado de veces. Utilice REPT para llenar una celda con varias instancias de una cadena de texto. =REPT(texto; número) texto

Texto que desea repetir.

número

Número positivo que especifica el número de veces que repetir el texto.

Función SUBSTITUTE Reemplaza el texto existente por otro en una cadena de texto. =SUBSTITUTE(texto; texto_antiguo; texto_nuevo; veces) texto

Texto en el que desea sustituir caracteres o una referencia a una columna que contenga texto.

texto_antiguo Es el texto existente que desea reemplazar. texto_nuevo

Texto con el que desea reemplazar texto_antiguo.

veces

(Opcional) La aparición de texto_antiguo que desea reemplazar. Si se omite, se reemplaza cada aparición de texto_antiguo.

P á g i n a 19 | 55

Por ejemplo, crear una columna que sobre la columna [ProductName] de la tabla [DimProduct], reemplace “MP3” por “MP4”:

Función TRIM Quita todos los espacios del texto salvo el espacio entre una palabra y otra. =TRIM(texto) Utilice TRIM en el texto que ha recibido de otra aplicación que puede tener un espaciado irregular.

P á g i n a 20 | 55

Función VALUE Convierte en un número una cadena de texto que representa un número. =VALUE(texto)

P á g i n a 21 | 55

FUNCIONES MATEMÁTICAS Las funciones matemáticas de las Expresiones de análisis de datos (DAX) son muy parecidas a las funciones matemáticas y trigonométricas de Excel. En éste video se estudiarán las siguientes funciones:     

CURRENCY DIVIDE INT / TRUNC ROUND SUM

P á g i n a 22 | 55

Función CURRENCY Evalúa el argumento y devuelve el resultado como tipo de datos de moneda. =CURRENCY(valor)

Función DIVIDE Realiza la división y devuelve un resultado alternativo o BLANK() al dividirlo entre 0. =DIVIDE(numerador; denominador; alternativa) numerador

Dividendo o número que se divide.

denominador Divisor o número por el que se divide. alternativa

(Opcional) El valor devuelto cuando la división entre cero da como resultado un error. Cuando no se proporciona, el valor predeterminado es BLANK().

P á g i n a 23 | 55

Funciones INT y TRUNC INT redondea un número al entero más cercano mientras que TRUNC trunca un número en un entero al quitar la parte decimal, o fraccionaria, del número. =INT(número) =TRUNC(número) TRUNC e INT son parecidos porque ambos devuelven enteros. TRUNC quita la parte fraccionaria del número. INT redondea los números al entero más cercano basado en el valor de la parte fraccionaria del número. INT y TRUNC solo son diferentes cuando se utilizan números negativos: TRUNC(-4.3) devuelve -4, pero INT(-4.3) devuelve -5 porque -5 es el valor más bajo.

P á g i n a 24 | 55

Función ROUND Redondea un número al número de dígitos especificado. =ROUND(número; dígitos) número

Número que desea redondear.

dígitos

Número de dígitos a los que desea redondear. Un valor negativo redondea los dígitos a la izquierda del separador decimal; un valor de cero redondea al entero más cercano. Si dígitos es mayor que 0 (cero), el número se redondea al número especificado de posiciones decimales. Si dígitos es 0, el número se redondea al entero más cercano. Si dígitos es menor que 0, entonces se redondea a la izquierda del separador decimal.

Función SUM Suma todos los números de una columna. =SUM(columna) columna

Columna que contiene los números que se suman.

Si desea filtrar los valores que está sumando, puede usar la función SUMX y especificar una expresión para sumar. P á g i n a 25 | 55

P á g i n a 26 | 55

FUNCIONES LÓGICAS Las funciones lógicas actúan sobre una expresión para devolver información acerca de los valores o conjuntos de la expresión. Por ejemplo, puede utilizar la función IF para comprobar el resultado de una expresión y crear resultados condicionales. En éste video se estudiarán las siguientes funciones:    

AND / OR IF IFERROR SWITCH

P á g i n a 27 | 55

Funciones AND y OR AND comprueba si ambos argumentos son TRUE y devuelve TRUE en ese caso. OR comprueba si uno de los argumentos es TRUE para devolver TRUE. La función devuelve FALSE si ambos argumentos son FALSE. =AND(expresion1; expresion2) =OR(expresion1; expresion2) Ambas funciones sólo aceptan dos argumentos. Si necesitamos realizar operaciones con varias expresiones, utilizaremos el operador AND (&&) o el operador OR (||) para unirlos todos en una expresión más sencilla. Por ejemplo, en la tabla [DimPromotion] creamos una columna calculada que devuelva TRUE o FALSE cuando el año de la columna [StartDate] está comprendida entre los años 2003 y 2006:

Función IF Comprueba si se cumple la condición proporcionada como primer argumento. Devuelve un valor si la condición es TRUE y devuelve otro valor si la condición es FALSE. =IF(condición; verdadero; falso) Por ejemplo si el valor de la columna [TotalSalesAmount] de la tabla [DimProduct] es menor que 300.000 devolverá “BAJO”. Si es menor que 500.000 devolverá “MEDIO” y “ALTO” para todos los demás valores. P á g i n a 28 | 55

Función IFERROR Evalúa una expresión y devuelve un valor especificado si la expresión devuelve un error; en caso contrario devuelve el valor de la expresión. =IFERROR(valor; valor_si_error) Por ejemplo, en la tabla [DimPromotion] dividimos la columna [ETLLoadID] entre [DiscountPercent]. Como al dividir por 0, devuelve un error, devolvemos 0.

P á g i n a 29 | 55

Función SWITCH Evalúa una expresión con lista de valores y devuelve una de las varias expresiones de resultado posibles. =SWITCH(expresión; valor; resultado [; valor; resultado]) Por ejemplo, crear una columna en la tabla [DimStore] que devuelva el nombre del día de la semana de la columna [UpdateDate]:

P á g i n a 30 | 55

FUNCIONES DE FILTRO. Las funciones del filtro y valor en DAX son las más complejas y eficaces, y difieren mucho de las funciones de Excel. Las funciones de búsqueda usan tablas y relaciones, como una base de datos. Las funciones de filtrado permiten manipular el contexto de los datos para crear cálculos dinámicos. En éste video se estudiarán las siguientes funciones:       

Funciones de agregado – funciones “X” RELATED / RELATEDTABLE COUNTROWS FILTER DISTINCT CALCULATE VALUES

P á g i n a 31 | 55

Introducción al contexto – contexto de fila y contexto de filtro Uno de los conceptos DAX que es importante entender es el concepto de "contexto" en que se evalúa cada expresión de DAX. Este tema será examinado en más detalle más adelante en este documento (después se describen algunas funciones DAX, así que pueden ser demostrados significativos ejemplos), pero por ahora, basta con tener en cuenta que cada fórmula puede evaluarse en el contexto de una fila determinada de datos de la tabla (un "contexto de la fila") o en el contexto de un conjunto específico de filtros (un "contexto de filtro"). Por ejemplo, se evaluará la fórmula para una columna calculada para cada fila de una tabla, utilizando el "contexto de la fila". Asimismo, un campo calculado que se introduce en una tabla dinámica se evaluará para cada celda en el área de valores, y cada una de esas celdas tiene su propio "contexto de filtro" que es la combinación de las etiquetas de fila de la celda, etiquetas de columna y filtros de informe. Contexto de la fila

P á g i n a 32 | 55

Contexto de filtro

Por ejemplo, la celda señalada tiene un contexto de filtro con dos filtros: País = Dinamarca y Año = 2008. Es decir para calcular Sales se utilizan dos filtros. De ahí el viene el nombre de contexto de filtro.

Las interrelaciones y el contexto de filtro Las interrelaciones entre tablas son del tipo uno a muchos. En el lado muchos está la clave foránea y en el lado del uno, la clave primaria. Cuando hay una interrelación y se aplica un filtro a una tabla en el lado uno, también se filtrará la tabla del lado muchos. FactSales

FactInventory

SalesKey DateKey

DimChannel

channelKey StoreKey

DimDate

DateKey

DimStore

CurrencyKey

PromotionKey CurrencyKey

StoreKey ProductKey

ProductKey

DimPromotion

InventoryKey

DimGeography

OnHandQuantity

UnitCost

OnOrderQuantity

UnitPrice

SafetyStockQuantity

SalesQuantity

DimProduct

UnitCost

ReturnQuantity

DaysInStock

ReturnAmount

MinDayInStock

DiscountQuantity DiscountAmount

DimProductSubcategory

ETLLoadID LoadDate UpdateDate

Aging ETLLoadID

TotalCost SalesAmount

MaxDayInStock

DimProductCategory

LoadDate

P á g UpdateDate i n a 33 | 55

Así si filtramos [DimProducts] para un único producto, entonces [FactSales] también se filtrará para que aparezcan sólo las transacciones de ese producto. Sin embargo, aplicar un filtro a la tabla [FactSAles] no tendría ningún impacto sobre la tabla [DimProducts]. Funciones de agregado – Funciones “X” Como ya sabemos, las consultas con totales son la base teórica de las tablas dinámicas y estas, a su vez, utilizan funciones de agregado. Estas funciones ya existen en Excel. Son, entre otras, SUM, AVG, MIN, MAX, COUNT. A diferencia de Excel, en DAX se han añadido algunas nuevas funciones de agregación que admiten como argumento la tabla y una expresión:     

SUMX (tabla, expresión) AVERAGEX (tabla, expresión) COUNTAX (tabla, expresión) MINX (tabla, expresión) MAXX (tabla, expresión)

Así SUMX permite realizar la suma de un campo numérico aplicándole diferentes filtros que vendrán dados por la expresión especificada en el segundo argumento. Por ejemplo: =SUMX (FactSales; [UnitPrice] * [SalesQuantity]) Esta fórmula dice que deberíamos empezar con la tabla FactSales, y para cada fila de la tabla deberíamos evaluar la expresión [UnitPrice] * [SalesQuantity]. A continuación, los resultados deben todos ser sumados porque estamos usando la función SUMX. Si hubiéramos usado AVERAGEX, nos tomaría el promedio de todos los resultados.

P á g i n a 34 | 55

La tabla FactSales está relacionada con DimChannel a través del campo ChannelKey (Tienda)

Si en la tabla dinámica “Ventas relativas a tiendas”, creamos el campo anterior:

P á g i n a 35 | 55

La función anterior cogerá cada una de las tiendas (Channelkey) de la tabla DimChannel, y en la tabla FactSales calculará la suma de UnitPrice * SalesQuantity. Obtendremos el subtotal para las ventas pertenecientes a un determinado año y tienda ya que la tabla dinámica tiene en filas la tienda y en columnas el año. El campo calculado, en la tabla DimChannel se muestra:

P á g i n a 36 | 55

Que coincide con el total de la tabla dinámica:

P á g i n a 37 | 55

Funciones RELATED / RELATEDTABLE DAX introduce las funciones RELATED y RELATEDTABLE para seguir las relaciones y recuperar datos relacionados de otra tabla. Esto es más poderoso que BUSCARV en Excel por dos motivos. En primer lugar, BUSCARV devuelve sólo la primera ocurrencia – no hay ninguna promesa de integridad referencial y no hay garantía de que no había otra fila que también habría igualado la búsqueda. En segundo lugar, no depende de la colocación de las columnas en la tabla de búsqueda, ya que la función BUSCARV no permite devolver hacia la izquierda. =RELATED(columna) RELATED sigue una relación de uno_a_muchos y devuelve el valor relacionado de la otra tabla. En la tabla FactSales, vamos a añadir dos columnas calculadas usando estas fórmulas: =RELATED(DimStore[StoreName]) =RELATED(DimGeography[ContinentName]) Estas fórmulas agregará dos columnas a la tabla FactSales, la primera que contiene el nombre de cada tienda y el segundo que contiene el nombre del continente. El primero de estos ejemplos sigue una sola relación FactSales a DimStore, mientras que la segunda fórmula debe navegar dos relaciones: de FactSales a DimStore y luego de DimStore a DimGeography. Estas fórmulas sólo requieren conocer el nombre de la columna que desea devolver el valor.

P á g i n a 38 | 55

P á g i n a 39 | 55

=RELATEDTABLE(tabla) RELATEDTABLE (tabla) sigue una relación en ambos sentidos (uno_a_muchos y muchos_a_uno) y devuelve una tabla que contiene todas las filas que están relacionadas con la fila actual de la tabla especificada. Esto es muy útil cuando necesitamos encontrar todas las transacciones asociadas con una fila determinada de una tabla relacionada. Tenga en cuenta que esta función devuelve una tabla y no un valor escalar. Esto significa que esta función no puede utilizarse por sí misma para definir una columna calculada. En cambio esta función puede utilizarse para proporcionar un resultado intermedio que a su vez es un argumento para otra función, como una función de agregación. Por ejemplo: =SUMX(RELATEDTABLE(FactSales); FactSales[SalesAmount]) Esta fórmula dice que queremos construir primero una tabla que contiene las filas de FactSales que se relacionan con la fila actual. RELATEDTABLE(FactSales) asume que tenemos una fila actual y que existe una relación entre la tabla y la tabla FactSales. Una vez tenemos la tabla que contiene las filas relacionadas de las transacciones de ventas, se coge la cantidad de ventas de cada fila [SalesAmount] y luego suma todas estas cantidades. Por ejemplo, si ponemos esta fórmula en las tablas [DimProduct] y [DimStore] podemos conocer el total de las transacciones de ventas desglosadas por cada producto y por cada tienda. P á g i n a 40 | 55

NOTA IMPORTANTE.- Recordamos que en la versión 2010, los parámetros se separan por comas, mientras que en la versión 2013 se separan por puntos y comas.

Función COUNTROWS La función COUNTROWS cuenta el número de filas de la tabla especificada o de una tabla definida por una expresión. P á g i n a 41 | 55

=COUNTROWS(tabla) Esta función se puede utilizar para contar el número de filas de una tabla base, pero se suele usar con más frecuencia para contar el número de filas que es el resultado de filtrar una tabla o de aplicar contexto a una tabla. En los ejemplos siguientes se demuestra cómo utilizar COUNTROWS con un contexto de fila. En este escenario, la tabla [DimProduct] está relacionada con la tabla [FactSales] a través de la columna [ProductKey]:

P á g i n a 42 | 55

Esta expresión nos devuelve el número de registros de la tabla [FactSales] pero no nos devuelve el número de registros relacionados de cada producto.

Esta expresión nos devuelve el número de registros relacionados de cada fila a través del campo relacionado [ProductKey]. Para comprobar la primera línea, el [ProductKey] es el código 1. Si filtramos manualmente la tabla [FactSAles] por el [ProductKey] = 1 y observamos el resultado:

Hay 1.819 registros que coincide con lo que nos dice la expresión:

P á g i n a 43 | 55

Función FILTER FILTER es una función DAX que devuelve una tabla de resultados, dependiendo de una condición. =FILTER (tabla; condición) Dado que devuelve una tabla, no puede introducirse directamente en un campo calculado. En su lugar se utilizará como argumento de otras funciones, normalmente las funciones de agregación. Por ejemplo, la expresión: =FILTER(FactSales;RELATED(DimGeography[CityName])="Baltimore") devolverá una tabla que contiene todas las filas de FactSales que tuvo lugar en la ciudad de Baltimore. Para obtener las ventas totales de la ciudad de Baltimore, simplemente la usaríamos como primer parámetro de la función SUMX: =SUMX (FILTER(FactSales;RELATED(DimGeography[CityName])="Baltimore");[SalesAmount])

La tabla [DimChannel] está relacionada con la tabla [FactSales]. Si creamos una columna calculada en la tabla [DimChannel] obtendremos el mismo valor para todos los registros ya que está utilizando el contexto de fila, pero si creamos un campo calculado y una tabla dinámica, observaremos la diferencia de resultados:

P á g i n a 44 | 55

Por motivo de los datos de las tablas implicadas y relacionadas, observamos que solo hay ventas en el canal “Store”, pero tenemos las ventas segmentadas por años y el total general coincide con la columna calculada de la tabla [DimChannel].

P á g i n a 45 | 55

Función DISTINCT Devuelve una tabla de una columna que contiene los valores distintos de la columna especificada. Se trata pues, de otro filtro que nos permite obtener una columna con valores únicos. =DISTINCT(columna) Por ejemplo si queremos saber cuántas tiendas distintas intervienen en las transacciones, haríamos: =COUNTROWS(DISTINCT(FactSales[StoreKey]))

P á g i n a 46 | 55

P á g i n a 47 | 55

Contexto de Fila y Contexto de Filtro Ahora que muchas de las funciones básicas de DAX se han descrito, echemos un vistazo a algunos ejemplos de lo que entendemos por "Contexto de Fila" y "Contexto de Filtro" porque representan conceptos que debemos entender para poder trabajar con algunas de las funciones más avanzadas de DAX como CALCULATE, descrito más adelante.

Contexto de Fila Contexto de Fila es considerado como la "fila actual". Esto es más evidente en los casos donde una fórmula está siendo introducida en una columna calculada. Por ejemplo, dentro de la tabla FactSales, podemos crear una fórmula para una columna calculada: = [SalesQuantity] * [UnitCost]

En este escenario, estamos tomando los valores de la [SalesQuantity] y el [UnitCost] las columnas de la fila actual y multiplicar los dos números juntos. Esto parece tanto obvio e intuitivo porque el mismo enfoque funciona en Excel. Pero es importante observar que DAX toma el nombre de una columna ([UnitCost]) y lo interpreta como un valor único cuando hay un contexto de fila.

Contexto de Filtro El contexto de filtro es más complejo que el contexto de fila y puede describirse más fácilmente como el conjunto de filtros asociados con una de las celdas en el área de los valores de una tabla dinámica. Considere la siguiente tabla dinámica:

P á g i n a 48 | 55

Esta tabla dinámica tiene solamente un campo calculado Sales, con la fórmula =SUM(FactSales[SalesAmount]). Esta fórmula única está siendo evaluado 72 veces distintas (número de etiquetas de fila x número de etiquetas de columna), con 72 resultados diferentes, y cada uno de esos 72 resultados tiene un distinto Contexto de filtro. La celda que está resaltada tiene el siguiente contexto de filtro: [RegionCountryName] = "Spain" [CalendarYear] = 2009 [ChannelName] = "Store" [ContinentName] = "Europa" Esto puede ser pensado como aplicar cuatro filtros a la tabla FactSales antes de evaluar la fórmula que es simplemente la suma de los valores de [SalesAmount] para las filas que quedan después de aplicar esos cuatro filtros. Esto es de donde viene el nombre "Contexto de Filtro". Función CALCULATE La función CALCULATE es muy potente y muy útil, pero es un poco más difícil que cualquiera de las funciones DAX descritas anteriormente. =CALCULATE(expresión; filtro1; filtro2;……)

P á g i n a 49 | 55

CALCULATE permite cualquier expresión de DAX a evaluarse en un contexto de filtro especificado. Esto es equivalente a definir un campo calculado en una tabla dinámica. CALCULATE hace lo siguiente:  Usando los argumentos de filtro, modifica el contexto de filtro.  Si hay un contexto de fila, lo utiliza como contexto de filtro.  Evalúa la expresión en el contexto de filtro recién modificado. Estos son algunos ejemplos que ilustran cómo funciona. Ejemplo 1.- CALCULATE sin argumentos de filtro Como primer ejemplo de utilización, escriba una fórmula en una columna calculada de DimStore la fórmula: =COUNTROWS(DimGeography)

Esto nos dará el mismo valor en todas las filas de 674 registros que son los registros que tiene la tabla DimGeography.

P á g i n a 50 | 55

Sin embargo, si ahora escribimos en otra columna calculada: =CALCULATE(COUNTROWS(DimGeography))

Encontrará que en todas las filas aparece un 1. La consecuencia es el contexto de filtro que se ha aplicado debido a la interrelación entre las dos tablas: solo un registro de la tabla DimGeography está relacionado con el registro de la tabla DimStore. Otro ejemplo: Las ventas del libro que estamos tratando se pueden realizar de cuatro canales distintos: por catálogo, online, por distribuidos y por tienda (Store).

P á g i n a 51 | 55

Mediante el campo ChannelKey en la tabla FactSales se identifica el canal utilizado en la transacción.

Supongamos que necesitamos realizar el análisis de ventas pero solo utilizando el canal de tienda (Store). La expresión: =CALCULATE([Sales]; DimChannel[ChannelName] = “Store”) hará que en la tabla dinámica “Ventas por país” solo se tengan en cuenta las ventas que se han hecho por tienda. La expresión anterior se podría haber escrito también: =CALCULATE([Sales]; DimChannel[ChannelKey] = “1”)

P á g i n a 52 | 55

Observe el resultado ya que según los datos almacenados, las ventas en Dinamarca o Alemania son diferentes en función del canal que analicemos. Luego observe la diferencia que hay entre [Sales] y [Ventas por tienda].

P á g i n a 53 | 55

Función VALUES La función VALUES devuelve todos los valores válidos para esta columna en el actual contexto de filtro. =VALUES(columna) Aunque la tabla devuelta tenga un solo valor (o incluso ningún valor), seguirá siendo una tabla. Con esta función podremos conocer fácilmente el contexto de filtro actual. Esta función se utilizará a menudo dentro de una función IF. Imaginemos un escenario donde necesitamos hacer un cálculo cuando el país es España y un cálculo diferente cuando el país no es España. Esto puede lograrse mediante: =VALUES(DimGeography[RegionCountryName]) = "Spain" Por supuesto puede haber una tabla dinámica donde no se especifica el país, o una situación donde varios países han sido seleccionados y sólo podemos comparar una tabla a un solo valor cuando la tabla tiene un solo valor. Esto nos obliga a escribir algo como esto para determinar lo que es el país actual: = IF (COUNTROWS(VALUES(DimGeography[RegionCountryName])) = 1; VALUES(DimGeography[RegionCountryName]); "Ningún país seleccionado") Esta fórmula dice que si hay sólo un país seleccionado en el contexto actual, devuelva el nombre de ese país, y, en otro caso, devuelva la cadena "Ningún país seleccionado". El resultado de la colocación de este campo calculado en una tabla dinámica donde el país está en las etiquetas de fila se ve así:

P á g i n a 54 | 55

P á g i n a 55 | 55