En septiembre de 2025, Power BI introdujo DAX User-Defined Functions (UDFs) en preview: funciones definidas por el usuario que encapsulan lógica DAX con parámetros y permiten reutilizar esa lógica en medidas, columnas calculadas, visual calculations e incluso en otras UDFs. Se definen con la nueva palabra reservada FUNCTION
desde DAX Query View o TMDL View y quedan como objetos de modelo visibles en Model Explorer. Es la primera vez que DAX ofrece reutilización parametrizada, algo que hasta ahora no cubrían los calculation groups.
Este artículo explica de manera clara qué son las DAX UDFs, qué problemas vienen a resolver, cómo funcionan, ejemplos prácticos y lo que debes considerar antes de adoptarlas.
Las DAX UDFs son funciones definidas por el usuario dentro de un modelo Power BI, escritas en DAX, que aceptan parámetros y devuelven un resultado. Funcionan de forma similar a una medida, pero con la diferencia de que pueden reutilizarse en múltiples medidas y expresiones dentro del mismo modelo.
Ejemplo sencillo de definición:
DEFINE
FUNCTION SumTwoNumbers = (A, B) => A + B
Hasta hoy, el patrón era copiar/pegar fragmentos DAX en decenas de medidas casi iguales (márgenes, normalizaciones, divisiones seguras, KPIs, conversiones). Con UDFs, ese patrón se centraliza: escribes la lógica una sola vez, la renombras con un espacio de nombres (p. ej., Finance.MarginPct
), defines parámetros y la invocas donde quieras. Menos deuda técnica, menos errores por divergencias y una base común para tu equipo.
Actualiza a Power BI Desktop Septiembre 2025 o posterior.
Ve a Archivo > Opciones y configuración > Opciones > Preview features y habilita DAX user-defined functions.
Acepta y reinicia Power BI Desktop. learn.microsoft.com
Durante la vista previa no puedes modelar/autorizar UDFs en el Service; la autoría es en Desktop (DAX Query View / TMDL).
Tema | Antes | Ahora (UDFs) |
---|---|---|
Reutilización | Copiar/pegar medidas; divergencias con el tiempo | Función central con parámetros; un solo punto de cambio |
Parámetros | No aplicaba (salvo what-if o selección via slicer) | Escalares, tablas y referencias/expresiones (AnyRef expr ) |
Dónde usarlo | Medidas individualizadas | Medidas, columnas calculadas, visual calculations y otras UDFs |
Autoría | Solo expresiones DAX “planas” | Objeto de modelo; DAX Query View / TMDL; visible en Model Explorer |
Alternativas previas | Calculation groups (sin parámetros) | UDFs parametrizables, complementan a calculation groups |
Ejemplos Prácticos:
1. División segura que ademas convierte los tipos a numericos en caso que no vengan así:
DEFINE
FUNCTION Util.SafeDivide =
( num : numeric, den : numeric, alt : numeric ) =>
DIVIDE(num, den, alt)
Uso:
Ventas %Margen = Util.SafeDivide([Ingresos]-[Coste], [Ingresos], BLANK())
2. Variación Interanual parametrizada
DEFINE
FUNCTION Time.YoY =
( currentMeasure : AnyRef expr, calendar : AnyRef expr ) =>
VAR prev = CALCULATE(currentMeasure, SAMEPERIODLASTYEAR(calendar))
RETURN DIVIDE(currentMeasure - prev, prev)
Espacios de nombres con punto: Finance.
, Util.
, Time.
para agrupar funciones; los nombres pueden incluir puntos pero no empezar/terminar con punto ni tener dos consecutivos; solo alfanuméricos y guión bajo además del punto. learn.microsoft.com
Descripción con ///
arriba de la función; aparece en IntelliSense (mejora DX). learn.microsoft.com
Tipos de parámetros: define hints cuando importe la robustez (p. ej., scalar numeric
). Para lógica contextual, usa AnyRef expr
. learn.microsoft.com
Versionado: autoriza en TMDL View y controla functions.tmdl
en tu repo. learn.microsoft.com
Governance: usa INFO.FUNCTIONS("ORIGIN","2")
para inventario y auditoría de funciones. learn.microsoft.com
No dupliques: migra gradualmente lógica repetida a UDFs y borra medidas antiguas cuando confirmes equivalencia.
Activa la preview y crea un módulo Util.*
con 3–5 funciones base (SafeDivide
, ToPct
, YoY
, Normalize
, TrendSign
).
Refactoriza 1–2 sujetos de medidas (p. ej., Ventas y Costes) reemplazando lógica duplicada por llamadas a UDFs.
Versiona en TMDL, publica PR y añade tests de regresión (tablas pequeñas que comparen viejo/nuevo).
Documenta firmas y ejemplos de uso en tu wiki del proyecto.
Audita periódicamente con INFO.FUNCTIONS
para detectar funciones no usadas y limpiar.
Las DAX UDFs marcan una nueva era en Power BI. Aportan reutilización, estandarización y claridad en el modelado, algo que hasta ahora era una carencia histórica del lenguaje. Aunque todavía en preview, conviene empezar a probarlas y diseñar librerías internas de funciones que aceleren tu trabajo.