Funciones definidas por el usuario de DAX

Las funciones definidas por el usuario (UDF) de expresiones de análisis de datos (DAX) permiten empaquetar lógica DAX reutilizable y con parámetros en los modelos, lo que facilita la escritura, el mantenimiento y el uso compartido del código DAX. En lugar de repetir fórmulas entre medidas, columnas calculadas y objetos visuales, las UDF proporcionan flexibilidad de estilo de programación a los modelos semánticos, lo que le permite definir funciones una vez y usarlas en todas partes compatibles con DAX.

Las UDF de DAX están disponibles de forma general en Power BI Desktop y Power BI Service a partir de la versión de junio de 2026. Para más información, consulte Funciones definidas por el usuario de DAX.

¿Por qué usar funciones definidas por el usuario?

  • Reutilización y coherencia: defina un cálculo una vez y reutilítelo en todas partes.
  • Mantenimiento: actualice la lógica en un solo lugar para corregir o evolucionar reglas.
  • Creación más segura: las sugerencias de tipo opcionales y los asistentes de comprobación de tipos admiten código predecible y resistente a errores.
  • Objetos de modelo de primera clase: las UDF residen en el modelo y se pueden ver en el Explorador de modelos.

Definición de una función

Puede definir una función definida por el usuario en Power BI Escritorio mediante la vista de consulta DAX (DQV), la vista TMDL o la vista Modelo. También puede ver y editar UDF en el explorador a través del modelado web de Power BI Service.

Sintaxis general

La sintaxis general de una UDF es:

/// Optional description above the function
/// @param {ParameterType} ParameterName - ParameterDescription
/// ...
/// @returns Return description
FUNCTION <FunctionName> = ( [<ParameterName> [: [<ParameterType>] [<ParameterSubtype>] [<ParameterPassingMode>]] [= <DefaultExpression>], ...] ) => <FunctionBody>

Ejemplo: Función fiscal simple

Este es un ejemplo sencillo de DQV que agrega impuestos al importe especificado. También puede evaluar UDF en DQV.

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

EVALUATE
{ AddTax ( 10 ) }
// Returns 11

Una vez definida una UDF, puede actualizar el modelo o usar la lente de código para agregar la función al modelo.

Captura de pantalla de la vista de consulta DAX en Power BI Desktop, resaltando dos ubicaciones donde puede guardar una función definida por el usuario. La primera es el botón Actualizar modelo con cambios en la parte superior de la vista. La segunda es una línea de estado en el editor de código con la etiqueta Update model: Add new function.

El mismo ejemplo se puede crear en la vista TMDL.

createOrReplace
    /// AddTax takes in amount and returns amount including tax
    function AddTax = (amount : NUMERIC) => amount * 1.1

Una vez definida una UDF, puede aplicar cambios para agregar la función al modelo.

Captura de pantalla de la vista TMDL en Power BI Desktop, resaltando el botón Aplicar en la parte superior de la vista. Este botón es la ubicación donde puede guardar una función definida por el usuario.

Administración de funciones definidas por el usuario

Una vez definido y agregado al modelo, puede ver y administrar todas las funciones definidas por el usuario desde el Explorador de modelos en el nodo Funciones .

Captura de pantalla de un panel Explorador de modelos en Power BI Desktop que muestra el nodo Funciones expandido. Se muestran tres funciones definidas por el usuario: AddTax, AverageOrderValue y CustomerLifetimeValue.

En la vista de consulta DAX (DQV), puede usar consultas rápidas a través del Explorador de modelos para definir y evaluar fácilmente las funciones.

Captura de pantalla de un panel del explorador de modelos en Power BI Desktop que muestra el nodo Funciones expandido. Hay dos menús contextuales abiertos: el primero ofrece Consultas rápidas, Cambiar nombre, Eliminar del modelo, Ocultar en la vista de informe, Volver a mostrar todo, Contraer todo y Expandir todo. «Consultas rápidas» está resaltado y seleccionado. El segundo menú está resaltado y ofrece las opciones de Consultas rápidas: Evaluar, Definir y evaluar, Definir nueva función y Definir todas las funciones de este modelo.

En la vista TMDL, puedes arrastrar y soltar funciones en el lienzo o usar Script TMDL para hacerlo a través del Explorador de modelos.

Captura de pantalla de un panel del Explorador de modelos en Power BI Desktop que muestra el nodo Functions expandido. Hay dos menús contextuales abiertos: el primer menú incluye Script to TMDL, Rename, Delete from model, Hide in report view, Unhide all, Collapse all y Expand all. Script to TMDL está resaltado y seleccionado. El segundo menú está resaltado y ofrece las opciones de Script to TMDL: Script tab y Clipboard.

Si usa un Power BI Project, las funciones también se almacenan en functions.tmdl dentro de la carpeta definition.

Captura de pantalla de Visual Studio Code de un proyecto de Power BI. El Explorador está abierto a la carpeta del modelo semántico. 'functions.tmdl' está abierto en el editor de código. Se muestran tres funciones: CustomerLifetimeValue, AverageOrderValue y AddTax.

Uso de funciones definidas por el usuario

Después de agregar una UDF al modelo, puede usarla en cualquier lugar donde se admita DAX. Aquí se usa AddTax como ejemplo.

Use UDF con contexto de filtro completo con medidas.

Total Sales with Tax = AddTax ( [Total Sales] )

Aplique UDF a todas las filas de una tabla con columnas calculadas.

Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )

Use las UDF directamente en los elementos visuales mediante cálculos visuales.

Sales Amount with Tax = AddTax ( [Sales Amount] )

Anidar funciones UDF para escenarios avanzados.

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

	FUNCTION AddTaxAndDiscount = (
			amount : NUMERIC,
			discount : NUMERIC
		) =>
		AddTax ( amount - discount )

EVALUATE
{ AddTaxAndDiscount ( 10, 2 ) }
// Returns 8.8

Parameters

Las UDF DAX admiten cero o más parámetros. Para que las funciones sean más seguras y predecibles, puede especificar opcionalmente sugerencias de tipo de parámetro:

  • Tipo: qué tipo de valor acepta el parámetro (AnyVal, Scalar, TableAnyRef, CalendarRef, , ColumnRef, o MeasureRefTableRef).
  • Subtipo (solo para tipo escalar): el tipo de datos escalar específico (Variant, Int64, Decimal, Double, String, DateTime, Boolean, o Numeric).
  • ParameterMode: cuándo se evalúa el argumento (val para evaluación inmediata o expr para evaluación perezosa).

Las indicaciones de tipo tienen la forma: [type] [subtype] [parameterMode]

Ejemplo: conversión de tipos

DEFINE
    /// returns x cast to an Int64
    FUNCTION CastToInt = (
            x : SCALAR INT64 VAL
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

En este ejemplo se usa el tipo Scalar, el subtipo Int64 y el parameterMode val. También puede lograr el mismo efecto simplemente incluyendo el Int64 subtipo como se muestra en el ejemplo siguiente. Las cadenas no numéricas producen un error.

DEFINE
    /// returns x as an Int64
    FUNCTION CastToInt = (
            x : INT64
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

Comprobación de tipos

Valide los tipos de parámetro dentro de la función mediante funciones integradas de comprobación de tipos de DAX, como:

Para obtener una lista completa de las funciones de comprobación de tipos disponibles, consulte Funciones definidas por el usuario de DAX.

Para obtener más información sobre el uso de funciones definidas por el usuario, consulte los siguientes recursos: