Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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.
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 .
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.
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.
Si usa un Power BI Project, las funciones también se almacenan en functions.tmdl dentro de la carpeta definition.
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, oMeasureRefTableRef). -
Subtipo (solo para tipo escalar): el tipo de datos escalar específico (
Variant,Int64,Decimal,Double,String,DateTime,Boolean, oNumeric). -
ParameterMode: cuándo se evalúa el argumento (
valpara evaluación inmediata oexprpara 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.
Contenido relacionado
Para obtener más información sobre el uso de funciones definidas por el usuario, consulte los siguientes recursos: