¿Qué son las funciones definidas por el usuario (UDF)?
Las funciones definidas por el usuario (UDF, por sus siglas en inglés User Defined Functions) son una nueva funcionalidad de DAX que nos permite empaquetar lógica en código DAX reutilizable dentro del modelo.
Hasta ahora, cuando queríamos reutilizar lógica, teníamos que copiar y pegar partes de medidas o campos calculados en distintos sitios, o construir medidas base sobre las que luego creábamos otras medidas dependientes. El ámbito de esa lógica quedaba siempre “encerrado” en la propia medida o columna calculada.
Con las UDF esto cambia:
Ahora podemos definir una función DAX una sola vez y reutilizarla en múltiples medidas, columnas calculadas o tablas calculadas, igual que haríamos en un lenguaje de programación tradicional.
Esta funcionalidad está en versión preliminar, por lo que puede haber cambios en su comportamiento o en la interfaz. Es recomendable revisar la documentación oficial antes de usarla en producción.
¿Por qué son tan importantes?
Las UDF suponen un salto importante en cómo diseñamos nuestros modelos semánticos y la lógica de negocio en Power BI:
Reutilización real de código
- Escribes una lógica compleja una sola vez (por ejemplo, un cálculo de variación porcentual, lógica de periodos móviles, filtros específicos, etc.)
- La reutilizas tantas veces como necesites en tu modelo.
- Se reduce el típico “copiar y pegar DAX” que luego es difícil de mantener.
Mantenimiento mucho más sencillo
- Si necesitas cambiar la lógica, solo la modificas en la función.
- Todas las medidas que la usan se benefician del cambio automáticamente.
- Esto reduce errores y hace que tu modelo sea mucho más fácil de evolucionar.
Consistencia en los cálculos
- Te aseguras de que la lógica de negocio es exactamente la misma en todos los informes, páginas y visualizaciones.
- Muy útil para métricas clave como márgenes, crecimiento, KPI, periodos comparativos, etc.
Mejor colaboración y estandarización
- Puedes crear un “catálogo de funciones DAX” dentro de tu modelo (o de tu organización).
- Otros modeladores pueden usar las mismas funciones sin necesidad de conocer todo el detalle de la lógica interna.
- Esto abre la puerta a librerías internas de la empresa (y también a librerías compartidas con la comunidad).
Preparación para un desarrollo más profesional
- Las UDF acercan Power BI a prácticas habituales en desarrollo de software: modularidad, reutilización, separación de responsabilidades…
- Si combinas UDF con buenas prácticas de modelado, naming, documentación y control de versiones, tus modelos ganan en calidad y escalabilidad.
Ejemplos de usos de las funciones
Algunas ideas de dónde pueden brillar las UDF en Power BI:
- Cálculos de time intelligence personalizado
- Por ejemplo, una función CalcularCrecimientoPeriodoAnterior( [MedidaBase] ) que te devuelva el crecimiento vs. periodo anterior, y que puedas reutilizar con diferentes medidas (Ventas, Unidades, Coste…).
- Normalización de filtros complejos
- Una función que aplique siempre el mismo conjunto de filtros (por ejemplo, excluir ciertas categorías, filtrar solo productos activos, limitar a un rango de fechas concreto, etc.) y que puedas reutilizar en varias medidas.
- Cálculo de KPI con umbrales
- Una función que reciba como parámetros el valor real, el objetivo y el umbral, y devuelva un resultado que puedas usar para colorear indicadores, banderas, etc.
- Conversión de unidades o tipos de cambio
- Funciones que centralicen la lógica de conversión de divisas, unidades o formatos, reutilizables en cualquier medida que necesite esa transformación.
- Formateos lógicos reutilizables
- Por ejemplo, una función que devuelva un valor ya “limpio” según ciertas reglas (sustituir valores negativos por 0, tratar nulos, etc.) y usarla en varias medidas o columnas.
¿Cómo se usan las funciones en la práctica?
Sin entrar en todos los detalles técnicos, el flujo general sería:
- Definir la función DAX
- Se crea una función con su nombre, parámetros de entrada y expresión DAX interna.
- Esa función encapsula una lógica que, de otra forma, escribirías dentro de una medida.
- Invocar la función desde tus medidas o columnas
- En lugar de repetir la lógica, simplemente llamas a la función pasando los parámetros correspondientes.
- Por ejemplo:
- VentasCrecimientoYA = MiFunc_Crecimiento( [Ventas] )
- Refinar y documentar tu “librería” de funciones
- Con el tiempo, puedes construir un pequeño catálogo de funciones reutilizables, bien documentadas, que formen parte de la “caja de herramientas” de tu modelo
Demo
Definimos la función DAX que queremos incluir, en este caso generaremos una función que nos devuelva el % de variación entre dos valores.
DEFINE
// Returns the % growth vs previous month
// baseMeasure : any measure or numeric expression
// dateColumn : date column from your Date table
FUNCTION TimeInt.PreviousMonthGrowth = (
baseMeasure : anyref expr,
dateColumn : anyref expr
) =>
VAR CurrentValue =
baseMeasure
VAR PreviousMonthValue =
CALCULATE(
baseMeasure,
DATEADD( dateColumn, -1, MONTH )
)
RETURN
DIVIDE(
CurrentValue - PreviousMonthValue,
PreviousMonthValue
)
EVALUATE
ROW ( "OK", 1 )
Abrimos el editor de DAX, pegamos el código y hacemos clic en “Run”

Una vez validada la función procederemos a crearla, haciendo clic en “Update model with changes(0)” o “Upste model: Add new function”


Hacemos clic en “Update model” y podremos comprobar que la función ya se ha creado y la podemos usar

Crearemos ahora una medida que la use
Previous Month Sales Growth % =
TimeInt.PreviousMonthGrowth(
[Sum of Sales_Amount], -- base measure from Metrics
dim_date[Date] -- date column from DimFecha
)
Y comprobamos que efectivamente funciona

Si ahora queremos crear el % de variación de otra métrica, será tan fácil como reutilizar la función
Previous Month Quantity Sold Growth % =
TimeInt.PreviousMonthGrowth(
[Sum of Quantity_Sold], -- base measure from Metrics
dim_date[Date] -- date column from DimFecha
)
Referencias
Uso de funciones definidas por el usuario de DAX (versión preliminar) – Power BI | Microsoft Learn
