Entre más vamos utilizando DAX en Power BI, una de las peticiones más repetidas por la comunidad ha sido la posibilidad de definir funciones reutilizables, como en otros lenguajes de programación, para evitar repetir lógica, facilitar el mantenimiento del modelo y mejorar la calidad del código.
Pues bien: con la actualización de Power BI en septiembre de 2025, Microsoft ha introducido la capacidad de crear User-Defined Functions (UDF) en DAX, una funcionalidad que marca un nuevo paradigma de cómo crear y gestionar tus medidas y modelos de datos.
En este blog veremos qué son las UDFs en DAX, por qué son importantes, cómo activarlas y definirlas, casos de uso y buenas prácticas.
🔹 ¿Qué son las User Defined Functions (UDFs) en DAX?
Las User Defined Functions (UDFs) son funciones creadas por el propio usuario dentro del modelo semántico de Power BI. Permiten encapsular lógica DAX reutilizable dentro de una definición con nombre, parámetros y un cuerpo de expresión.
En otras palabras: en lugar de repetir la misma fórmula en múltiples medidas, ahora puedes definir la lógica una vez y reutilizarla en cualquier parte del modelo.
Esto trae beneficios muy importantes:
Reutilización de lógica y menor duplicación de código.
Modelos más limpios y fáciles de mantener.
Mayor consistencia en los cálculos.
Potencial mejora de rendimiento al evitar fórmulas redundantes.
Los parámetros son los argumentos que recibe una función y se definen entre paréntesis. Cada parámetro puede tener un tipo y un subtipo, lo que ayuda a DAX a entender qué tipo de valor o referencia esperará durante la ejecución.
Nota: No es obligatorio definir el tipo de parámetro, es solamente una ayuda semántica.
Incluso agregando un tipo de parámetro, la función puede aceptar otros tipos de datos. Por ejemplo, si se agrega un tipo de parámetro como decimal, DAX podría aceptar un int64.
Modos de paso de parámetros (Parameter-Passing Modes)
Uno de los conceptos más importantes al crear UDFs es entender los modos de paso de parámetros. Estos definen cuándo y cómo se evalúan los parámetros dentro de la función, y pueden cambiar completamente el resultado de tus cálculos.
En DAX existen dos modos principales:
VAL (Value)
El parámetro se evalúa antes de ejecutar la función, en el contexto de la medida o cálculo que la invoca. Esto significa que dentro del cuerpo de la función ya recibes un valor fijo, no una expresión.
Si el parámetro se usa varias veces, siempre devolverá el mismo resultado durante la ejecución, porque su valor no depende del contexto interno de la función.
Aquí, [Total Sales] se evalúa antes de entrar a la función. Por lo tanto, dentro del CALCULATE, la función ya no puede volver a evaluar [Total Sales] en el contexto modificado por ALL('Date'). El resultado será incorrecto: no obtendrás un acumulado real, sino un único valor repetido.
👉 Por eso, VAL no es adecuado para medidas que dependen del contexto, como las de tipo acumulado o con filtros dinámicos.
EXPR (Expression)
El parámetro se interpreta como una expresión DAX, que se evaluará dentro del cuerpo de la función cada vez que se necesite, usando el contexto de evaluación actual.
Esto permite que la medida cambie según el contexto de filtro y fila, lo que es esencial para cálculos como acumulados, totales dinámicos o cálculos con CALCULATE.
Usa VAL cuando el parámetro es un valor escalar simple (como una cantidad fija o resultado independiente del contexto).
Usa EXPR cuando el parámetro sea una medida o expresión DAX que deba evaluarse según el contexto del filtro actual.
El ejemplo Acumulado es uno de los mejores casos para entender esto: si usas VAL, obtendrás el mismo número en todas las filas; si usas EXPR, obtendrás el comportamiento esperado de un cálculo acumulado.
🔹 Cuándo usar UDFs en tus modelos DAX
Usa UDFs cuando quieras:
✅ Reutilizar lógica compleja entre múltiples medidas o columnas. ✅ Centralizar cálculos estándar, como márgenes, tasas o conversiones. ✅ Facilitar mantenimiento y actualización: cambia la función y todas las medidas se actualizan. ✅ Mejorar la legibilidad del código DAX, evitando fórmulas largas o repetidas. ✅ Crear librerías internas de funciones que puedes reutilizar entre proyectos o equipos.
🔹 Buenas prácticas al definir UDFs
Usa nombres descriptivos: sigue una convención clara
Documenta tus funciones: puedes incluir comentarios arriba con /// para describir qué hace la función.
Valida con EVALUATE { } antes de incorporarla a medidas reales.
Evita funciones excesivamente genéricas: un poco de especificidad ayuda a mantener claridad.
Revisa dependencias: si una función usa otra, asegúrate de que el orden y el contexto estén bien definidos.
Cuida el rendimiento: aunque las UDFs ayudan a organizar, no eliminan las reglas de eficiencia de DAX (contextos, iteradores, relaciones, etc.).
Las User Defined Functions en DAX son uno de los avances más importantes en la evolución del lenguaje dentro de Power BI. Por primera vez, los desarrolladores y analistas pueden escribir código DAX más limpio, modular y reutilizable, acercándose a las mejores prácticas de ingeniería de software.
Si trabajas con DAX y modelado de datos profesional, las UDFs se convertirán en una herramienta indispensable que debes conocer.