Introducción a DAXIntroduction to DAX

Learn how to create and work with DAX, from an established expert.

Aprenderá a...

Introducción a DAXIntroduction to DAX

Bienvenido a la sección Aprendizaje guiado de Power BI, diseñada para presentarle DAX.Welcome to the Power BI Guided Learning section designed to introduce you to DAX.

DAX significa Expresiones de análisis de datos,y es el lenguaje de fórmulas usado en Power BI (Power BI también lo usa en segundo plano).DAX stands for Data Analysis Expressions, and it is the formula language used throughout Power BI (it is also used by Power BI behind the scenes). DAX también se encuentra en otras ofertas de Microsoft, como Power Pivot y SSAS Tabular, pero este conjunto de temas de aprendizaje guiado se centra en cómo se usa DAX, y cómo puede usarlo, en Power BI.DAX is also found in other offerings from Microsoft, such as Power Pivot and SSAS Tabular, but this collection of Guided Learning topics focuses on how DAX is used - and can be used by you - in Power BI.

DAX y esta serie de vídeos de aprendizaje guiadoDAX and this Guided Learning video series

El objetivo de esta sección Aprendizaje guiado es mostrarle los aspectos básicos y los fundamentos de DAX: cómo pensar sobre DAX, cómo funciona y las características más útiles, explicado (y aprendido con mucha experiencia) por un conocido experto en DAX, Alberto Ferrari.The goal of this Guided Learning section is to teach you DAX basics and fundamentals - how to think about DAX, how it works, and the most useful features as explained (and learned with lots of experience) by a renowned DAX expert, Alberto Ferrari.

Foto de Alberto Ferrari

Los vídeos de esta sección Aprendizaje guiado sobre DAX le enseñan los aspectos básicos de DAX desde la perspectiva de cómo funciona el lenguaje de fórmulas de DAX.The videos in this Guided Learning section on DAX teaches you DAX basics from the perspective of how the DAX formula language works. Esto es útil al crear fórmulas de DAX desde cero, pero también para comprender cómo crea Power BI las fórmulas de DAX al crear consultas en el Editor de consultas.This is useful when creating DAX formulas from scratch, but it's also very useful for understanding how Power BI creates those DAX formulas as you create queries in the Query Editor.

En este vídeo: introducción a DAXIn this video - introduction to DAX

Los conceptos de DAX son sencillos a la par que eficaces.DAX concepts are simple and straightforward, but DAX is powerful. Como este lenguaje usa patrones y conceptos de programación únicos, puede que le cueste entenderlos y ponerlos en práctica en su totalidad.DAX uses some unique programming concepts and patterns which can make it difficult to fully use and understand. Es posible que los métodos tradicionales de aprendizaje de lenguajes no sean la forma más adecuada de iniciarse en DAX. Por tanto, el objetivo de este vídeo es enseñarle los conceptos y la teoría que le ayudarán más adelante a trabajar con Power BI.Traditional ways of learning languages may not be the best approach to DAX, so the goal of this video is to teach you concepts and theory that will help later on in your Power BI work.

DAX es un lenguaje funcional, es decir, todo el código que se ejecuta se encuentra dentro de una función.DAX is a functional language, which means the full executed code is contained inside a function.

En DAX, las funciones pueden incluir otras funciones anidadas, instrucciones condicionales y referencias a valores.In DAX, functions can contain other, nested functions, conditional statements, and value references. El proceso de ejecución en DAX se inicia desde la función o el parámetro más interno y se lleva a cabo en un contexto externo.Execution in DAX starts from the innermost function or parameter, and works outward. En Power BI, las fórmulas DAX se escriben en una sola línea, así que es importante dar el formato correcto a las funciones en aras de mejorar la legibilidad.In Power BI, DAX formulas are written in a single line, so formatting your functions correctly is important for readability.

DAX se ha diseñado para usar tablas, por tanto, tiene dos tipos de datos principales: Numérico y Otro.DAX is designed to work with tables, so it has just two primary data types: Numeric and Other. Numérico puede incluir enteros, decimales y divisas.Numeric can include integers, decimals, and currency. Otro puede incluir cadenas y objetos binarios.Other can include strings and binary objects. Es decir, si crea una función DAX para utilizar un tipo de número, puede estar seguro de que funcionará con cualquier otro dato numérico.This means that if you build your DAX function to work on one type of number, you can be assured that it will work on any other Numeric data.

DAX utiliza la sobrecarga de operador, que significa que puede mezclar tipos de datos en los cálculos, de forma que los resultados variarán según el tipo de datos usados en las entradas.DAX uses operator overloading, which means that you can mix data types in your calculations and the results will change based on the type of data used in the inputs. La conversión se realiza automáticamente.Conversion happens automatically. Esto significa que no tiene que conocer los tipos de datos de las columnas que está usando en Power BI, pero también que, a veces, el proceso de conversión puede generar resultados inesperados.This means you don't have to know the data types of the columns you're working with in Power BI, but it also means that sometimes conversion can happen in unexpected ways. Se recomienda comprender los datos que se utilizan para asegurarse de que los operadores funcionan de la forma prevista.It's good practice to understand the data you are using to ensure that your operators are behaving as anticipated.

Hay un tipo de datos en concreto que es probable que use bastante en Power BI: Fecha y hora.There is one data type in particular that you'll likely be working with a lot in Power BI: DateTime. Fecha y hora se almacena como un valor de coma flotante con partes decimales y enteras.DateTime is stored as a floating point value with both integer and decimal parts. Este tipo de datos puede utilizarse para calcular con precisión un periodo posterior al 1 de marzo de 1900.DateTime can be used accurately for calculations of any time period after March 1, 1900.

Contenido del vídeo cortesía de Alberto Ferrari, SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Tipos de cálculos DAXDAX calculation types

Hay dos cálculos principales que puede crear mediante DAX:There are two primary calculations you can create using DAX:

  • columnas calculadascalculated columns
  • medidas calculadascalculated measures

Antes de adentrarnos en la creación de estos tipos, es conveniente tener una idea clara sobre la sintaxis DAX para tablas y columnas, que se usará al crear columnas calculadas o medidas calculadas.Before digging into creating either of those, it's good to have a firm grasp on DAX syntax for tables and columns, which you will use when creating either calculated columns or calculated measures.

Sintaxis de nombres de tabla y columna de DAXDAX table and column name syntax

Si va a crear una nueva columna o medida, es importante conocer el formato general de los nombres de tabla en DAX:Whether you're creating a new column or measure, it's important to know the general format of table names in DAX:

'Table Name'[ColumnName]

Si hay espacios en el nombre de la tabla (como se muestra arriba), es obligatorio usar comillas simples en el nombre de la tabla.If there are spaces in the table name (as shown above), the single quotes around the table name are mandatory. Si el nombre de la tabla no tiene espacios, se pueden omitir las comillas simples, por lo que la sintaxis es similar a la siguiente:If the table name has no spaces, the single quotes can be omitted, so the syntax looks like the following:

TableName[ColumnName]

La siguiente imagen muestra una fórmula de DAX creada en Power BI:The following image shows a DAX formula being created in Power BI:

También puede omitir por completo el nombre de tabla y usar solo el de columna, aunque no recomendamos hacerlo para así escribir funciones claras (y, por tanto, código de DAX claro).You can also omit the table name completely and just use the column name, but this is poor practice for writing clear functions (and thus, for clear DAX code). Los nombres de columna siempre deben incluir los corchetes.Column names must always include the square brackets.

Es recomendable que siempre haga lo siguiente:It's best practice to always do the following:

  • No incluir espacios en nombres de tablaNo spaces in table names
  • Incluir siempre el nombre de tabla en las fórmulas (no lo omita, aunque DAX lo permita)Always include the table name in formulas (don't omit it, even though DAX lets you)

Creación de columnas calculadasCreating calculated columns

Las columnas calculadas son útiles cuando quiera segmentar o filtrar el valor, o bien si quiere realizar un cálculo en cada fila de la tabla.Calculated columns are useful when you want to slice or filter on the value, or if you want a calculation for every row in your table.

Puede crear columnas calculadas en Power BI Desktop seleccionando Nueva columna desde la pestaña Modelado. Es mejor estar en la vista Datos (en lugar de la vista Informe o Relaciones), ya que puede ver la nueva columna creada y la barra de fórmulas se rellena y está lista para la fórmula DAX.You can create calculated columns in Power BI Desktop by selecting New Column from the Modeling tab. It's best to be in Data view (rather than Report or Relationships view), since you can see the new column created and the Formula Bar is populated and ready for your DAX formula.

Después de seleccionar el botón Nueva columna, la barra de fórmulas se rellena con un nombre de columna básico (que por supuesto puede cambiar para adaptarlo a la fórmula) y el operador =, y la nueva columna aparece en la cuadrícula de datos, como se muestra en la siguiente imagen.Once you select the New Column button, the Formula Bar is populated with a basic column name (which you change to suit your formula, of course) and the = operator, and the new column appears in the data grid, as shown in the following image.

Los elementos necesarios para una columna calculada son los siguientes:The required elements for a calculated column are the following:

  • un nuevo nombre de columnaa new column name
  • al menos una función o una expresiónat least one function or expression

Si hace referencia a una tabla o columna en la fórmula de columna calculada, no es necesario especificar una fila de la tabla: Power BI calcula la columna de la fila actual en cada cálculo.If you reference a table or column in your calculated column formula, you do not need to specify a row in the table - Power BI calculates the column for the current row for each calculation.

Creación de medidas calculadasCreating calculated measures

Use una medida calculada para calcular porcentajes o proporciones, o bien si necesita realizar agregaciones complejas.Use a calculated measure when you are calculating percentages or ratios, or you need complex aggregations. Para crear una medida usando una fórmula DAX, seleccione el botón Nueva medida desde la pestaña Modelado. Como antes, es mejor estar en la vista Datos de Power BI Desktop, ya que muestra la barra de fórmulas y facilita la escritura de la fórmula DAX.To create a measure using a DAX formula, select the New Measure button from the Modeling tab. Again, it's best to be in the Data view of Power BI Desktop since it shows the Formula Bar and makes it easy to write your DAX formula.

Con medidas, aparece un nuevo icono de medida en el panel Campos con el nombre de la medida.With measures, you see a new measure icon appear in the Fields pane with the name of the measure. La barra de fórmulas se rellena otra vez con el nombre de la fórmula DAX (esta vez, con la medida).The Formula Bar is again populated with the name of your DAX formula (this time, with your measure).

Los elementos necesarios para una medida calculada son los mismos que para una columna calculada:The required elements for a calculated measure are the same as they are for a calculated column:

  • un nuevo nombre de medidaa new measure name
  • al menos una función o una expresiónat least one function or expression

Contenido del vídeo cortesía de Alberto Ferrari, SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Funciones DAXDAX functions

Con DAX, hay muchas funciones disponibles para dar forma, formar o analizar los datos.With DAX, there are many functions available to shape, form, or otherwise analyze your data. Estas funciones se pueden agrupar en un conjunto de categorías:These functions can be grouped into a handful of categories:

  • Funciones de agregaciónAggregation functions
  • Funciones de recuentoCounting functions
  • Funciones lógicasLogical functions
  • Funciones de informaciónInformation functions
  • Funciones de textoText functions
  • Funciones de fechaDate functions

Similar a Excel, al comenzar a escribir la fórmula en la barra de fórmulas de Power BI Desktop, aparece una lista de funciones disponibles para ayudarle a determinar qué función disponible quiere seleccionar.Similar to Excel, when you start typing your formula into the Power BI Desktop Formula Bar, a list of available functions appears to help you determine which available function you want to select. Y mediante las teclas de dirección arriba y abajo del teclado, puede resaltar cualquiera de las funciones disponibles y se muestra una breve descripción.And by using the up and down arrow keys on your keyboard, you can highlight any of the available functions, and a brief description is displayed.

Power BI muestra las funciones que coinciden con las letras que ha escrito hasta ese momento, por lo que si escribe S solo aparecen en la lista las funciones que empiezan con S.Power BI displays the functions that match the letters you've typed so far, so if you type S only functions that begin with S appear in the list. Si escribe Su, solo aparecen en la lista las funciones que contienen la secuencia de letras Su en el nombre (no tienen que empezar por Su, solo tienen que contener esa secuencia de letras).If you type Su, only functions that contain the letter sequence Su in their name appear in the list (they don't have to start with Su, they just have to contain that letter sequence).

Es fácil experimentar con DAX de esta forma y buscar cada una de las diversas funciones DAX que están disponibles en Power BI.It's easy to experiment with DAX in this way, and to find each of the various DAX functions that are available in Power BI. Todo lo que debe hacer es empezar a escribir y dejar que Power BI le ayude.All you have to do is start typing, and Power BI helps you along.

Ahora que sabemos cómo obtener fórmulas de DAX, veamos cada una de estas categorías de funciones.Now that we know how to get that DAX formula started, let's take a look at each of these function categories in turn.

Funciones de agregaciónAggregation functions

DAX tiene diversas funciones de agregación, incluidas las siguientes usadas habitualmente:DAX has a number of aggregation functions, including the following commonly used functions:

  • SUMSUM
  • AVERAGEAVERAGE
  • MINMIN
  • MAXMAX
  • SUMX (y otras funciones X)SUMX (and other X functions)

Estas funciones solo pueden utilizarse con columnas numéricas y, normalmente, solo pueden agregar una columna a la vez.These functions work only on numeric columns, and generally can aggregate only one column at a time.

Pero las funciones de agregación que terminan en X, como SUMX, pueden trabajar con varias columnas.However, special aggregation functions that end in X, such as SUMX, can work on multiple columns. Estas funciones recorren en iteración la tabla y evalúan la expresión de cada fila.These functions iterate through the table, and evaluate the expression for each row.

Funciones de recuentoCounting functions

Las funciones de recuento usadas habitualmente en DAX incluyen las siguientes:Often-used counting functions in DAX include the following:

  • COUNTCOUNT
  • COUNTACOUNTA
  • COUNTBLANKCOUNTBLANK
  • COUNTROWSCOUNTROWS
  • DISTINCTCOUNTDISTINCTCOUNT

Estas funciones cuentan elementos diferentes, como valores distintos, valores no vacíos y filas de tabla.These functions count different elements, such as distinct values, non-empty values, and table rows.

Funciones lógicasLogical functions

La colección de funciones lógicas de DAX incluye:The collection of logical functions in DAX include:

  • ANDAND
  • OROR
  • NOTNOT
  • IFIF
  • IFERRORIFERROR

También se pueden expresar estas funciones especiales con operadores.These special functions can also be expressed with operators. Por ejemplo, AND se puede escribir como (cambiar por) && en la fórmula DAX.For example, AND can be typed as (replaced with) && in your DAX formula.

Puede usar operadores (como &&) cuando necesite más de dos condiciones en la fórmula, pero de lo contrario es recomendable usar el nombre de la función (como AND) para mejorar la legibilidad del código de DAX.You can use operators (such as &&) when you need more than two conditions in your formula, but otherwise, it's best practice use the function name itself (such as AND) for readability of your DAX code.

Funciones de informaciónInformation functions

Las funciones de información de DAX incluyen:Information functions in DAX include:

  • ISBLANKISBLANK
  • ISNUMBERISNUMBER
  • ISTEXTISTEXT
  • ISNONTEXTISNONTEXT
  • ISERRORISERROR

Aunque estas funciones pueden ser útiles en determinadas situaciones, merece la pena conocer de antemano el tipo de datos de las columnas y no depender de que las funciones lo proporcionen.While these functions can be situationally useful, there is value in knowing the data type of your columns ahead of time, rather than depending on these functions to provide the data type.

DAX usa las funciones MAX y MIN para agregar y para comparar valores.DAX uses the MAX and MIN functions to both aggregate values, and to compare values.

Funciones de texto.Text functions

Las funciones de texto usadas en DAX incluyen las siguientes:The text functions in DAX include the following:

  • CONCATENTATECONCATENTATE
  • REPLACEREPLACE
  • SEARCHSEARCH
  • UPPERUPPER
  • FIXEDFIXED

Estas funciones de texto funcionan de forma muy similar a las de Excel que tienen el mismo nombre, por lo que si está familiarizado con cómo Excel administra las funciones de texto ya está un paso adelante.These text work very similarly to the Excel functions that have the same name, so if you're familiar with how Excel handles text functions, you're already a step ahead. Si no, siempre puede experimentar con estas funciones en Power BI y obtener más información sobre cómo se comportan.If not, you can always experiment with these functions in Power BI, and learn more about how they behave.

Funciones de fechaDate functions

DAX incluye las siguientes funciones de fecha:DAX includes the following Date functions:

  • DATEDATE
  • HOURHOUR
  • NOWNOW
  • EOMONTHEOMONTH
  • WEEKDAYWEEKDAY

Aunque estas funciones son útiles para calcular y extraer información de los valores de fecha, no se aplican a la inteligencia de tiempo, que usa una tabla de fechas.While these functions are useful to calculate and extract information from date values, they do not apply to time intelligence, which uses a date table.

Contenido del vídeo cortesía de Alberto Ferrari, SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Uso de variables en expresiones DAXUsing variables in DAX expressions

El uso de variables constituye un componente muy eficaz de una expresión DAX.Using variables are an extremely powerful part of a DAX expression.

Puede definir una variable en cualquier parte en una expresión DAX usando la siguiente sintaxis:You can define a variable anywhere in a DAX expression, using the following syntax:

VARNAME = RETURNEDVALUE

Las variables pueden ser cualquier tipo de datos, incluidas tablas enteras.Variables can be any data type, including entire tables.

Tenga en cuenta que cada vez que haga referencia a una variable en la expresión DAX, Power BI tendrá que recalcular su valor según la definición.Keep in mind that each time you reference a variable in your DAX expression, Power BI must recalculate its value according to your definition. Por este motivo, se recomienda evitar repetir variables en las funciones.For this reason, it's good practice to avoid repeating variables in your function.

Contenido del vídeo cortesía de Alberto Ferrari, SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Relaciones de tablas y DAXTable relationships and DAX

Power BI le permite crear relaciones entre varias tablas, incluidas tablas que proceden de orígenes de datos completamente diferentes.Power BI lets you create relationships among multiple tables, including tables that come from completely different data sources. Puede ver esas relaciones para cualquier modelo de datos en la vista Relaciones de Power BI Desktop.You can see those relationships for any data model in the Relationships view of Power BI Desktop.

Funciones relacionales de DAXDAX relational functions

DAX tiene funciones relacionales que le permiten interactuar con tablas que tienen establecidas relaciones.DAX has relational functions that enable you to interact with tables that have established relationships.

Puede devolver el valor de una columna, o puede devolver todas las filas en una relación con las funciones de DAX.You can return the value of a column, or you can return all rows in a relationship using DAX functions.

Por ejemplo, la función TABLE sigue las relaciones y devuelve el valor de una columna, mientras que RELATEDTABLE sigue las relaciones y devuelve una tabla completa filtrada para incluir solo las filas relacionadas.For example, the TABLE function follows relationships and returns the value of a column, while RELATEDTABLE follows relationships, and returns an entire table that is filtered to include only related rows.

La función RELATED puede usarse en relaciones de varios a uno, mientras que RELATEDTABLE solo es compatible con relaciones de uno a varios.The RELATED function works on many-to-one relationships, while RELATEDTABLE is for one-to-many relationships.

Puede utilizar funciones relacionales para crear expresiones que incluyan valores en varias tablas.You can use relational functions to build expressions that include values across multiple tables. DAX devolverá un resultado con estas funciones, con independencia de la longitud de la cadena de la relación.DAX will return a result with these functions, regardless of the length of the chain of the relationship.

Contenido del vídeo cortesía de Alberto Ferrari, SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

Filtrado y tablas DAXDAX tables and filtering

Una diferencia significativa entre DAX y el lenguaje de fórmulas de Excel es que DAX le permite pasar tablas enteras entre expresiones en lugar de estar limitado a un único valor.One significant difference between DAX and the Excel formula language is that DAX allows you to pass entire tables between expressions, rather than being constrained to a single value. Un efecto eficaz es que DAX permite filtrar las tablas en sus expresiones y, después, trabajar con el conjunto de valores filtrados.One powerful effect is that DAX allows you to filter tables in its expressions, then work with the filtered set of values.

Con DAX, puede crear tablas calculadas completamente nuevas y, después, tratarlas como cualquier otra tabla, incluida la creación de relaciones entre ellas y otras tablas del modelo de datos.With DAX, you can create entirely new calculated tables and then treat them like any other table - including creating relationships between them and other tables in your data model.

Funciones de tabla DAXDAX table functions

DAX tiene un amplio conjunto de funciones de tabla, incluidas las siguientes:DAX has a rich set of table functions, including the following:

  • FILTERFILTER
  • ALLALL
  • VALUESVALUES
  • DISTINCTDISTINCT
  • RELATEDTABLERELATEDTABLE

Estas funciones devuelven una tabla completa en lugar de un valor.These functions return a full table rather, rather than a value. Normalmente, usaría los resultados de una función de tabla en análisis posteriores como parte de una expresión mayor, en lugar de un valor final en la tabla devuelta.Typically you'll use the results of a table function in further analysis as part of a greater expression, rather than using that returned table a final value. Es importante recordar que, al usar una función de tabla, los resultados heredan las relaciones de sus columnas.It's important to note that When you use a table function, the results inherit the relationships of their columns.

Puede combinar funciones de tabla en la expresión, siempre y cuando cada una de ellas use y devuelva una tabla.You can mix table functions in your expression, as long as each function uses a table and returns a table. Por ejemplo, considere la siguiente expresión de DAX:For example, consider the following DAX expression:

FILTER (ALL (Table), Condition)

Esta expresión aplicaría un filtro en toda la tabla, con lo que omitiría el contenido de filtro actual.That expression would put a filter over the entirety of Table, ignoring any current filter content.

La función DISTINCT devuelve los distintos valores de una columna que también están visibles en el contexto actual.The DISTINCT function returns the distinct values of a column that are also visible in the current context. Por tanto, para usar el anterior ejemplo de expresión de DAX, el uso de ALL en esa expresión omite los filtros, mientras que cambiar ALL por DISTINCT los observaría.So touse the above DAX expression example, using ALL in that expression ignores filters, while replacing ALL with DISTINCT would observe them.

Recuento de valores con DAXCounting values with DAX

Los generadores de informes de Power BI se suelen hacer esta pregunta:One common question that Power BI report builders want to answer is the following:

  • ¿Cuántos valores tengo para esta columna?How many values do I have for this column?

Se trata de una pregunta sencilla de responder si se tiene delante una tabla, pero con DAX es diferente, sobre todo cuando existe una relación entre las tablas.That may be a simple question to answer with a table displayed in front of you, but DAX approaches in a different way in a different way, particularly when there's a relationship between tables.

Por ejemplo, Power BI y DAX incluyen valores que no se han indexado correctamente con referencias cruzadas.For example, Power BI and DAX includes values that are not properly cross-indexed. Si se interrumpe la relación entrante, DAX agrega una nueva fila a la tabla relacionada que tiene espacios en blanco en cada campo y la vincula a la fila sin indexar para garantizar la integridad referencial.If the incoming relationship is broken, DAX adds a new row to the related table that has blanks in every field, and links that new row to the unindexed row to guarantee referential integrity. Si la función incluye filas en blanco, como suele pasar al usar ALL, se incluirán en el número de valores devueltos para esa columna.If your function includes blank rows, such as is often the case when using ALL, those blank rows will then be included in the number of values returned for that column.

También puede crear tablas calculadas completas mediante funciones DAX.You can also create entire calculated tables using DAX functions. Las tablas calculadas creadas con DAX requieren una función NAME y una función TABLE.Calculated tables created using DAX require a NAME and a TABLE function. Las tablas calculadas se pueden usar como cualquier otra tabla; por ejemplo, también pueden establecerse relaciones.Calculated tables can be used like any other table, including establishing relationships.

Contenido del vídeo cortesía de Alberto Ferrari, SQLBIVideo content courtesy of Alberto Ferrari, SQLBI

¡Enhorabuena!

You've completed the Introduction to DAX section of Power BI Guided Learning. What a journey! If you've done these tutorials in sequence, then you've finished all the sections of Guided Learning. Way to go! Now go use Power BI to create compelling reports and dashboards that tell your story.

Ha aprendido a...

Colaboradores

  • Davidiseminger
  • olprod
  • Alisha-Acharya