Use nombres compuestos para las funciones definidas por el usuario
Descripción general
Esta regla de buenas prácticas identifica funciones definidas por el usuario (UDFs) cuyos nombres no contienen un carácter separador (. o _). Los nombres compuestos evitan conflictos de nombres si Microsoft introduce una función de DAX integrada con el mismo nombre.
Categoría: Prevención de errores
Gravedad: Baja (1)
Se aplica a
- Funciones definidas por el usuario
Por qué es importante
Las UDFs sin caracteres separadores en sus nombres corren el riesgo de dejar de funcionar en el futuro:
- Conflictos de nombres: Si Microsoft agrega una nueva función DAX integrada con el mismo nombre que su UDF, la función integrada tiene prioridad y su UDF dejará de funcionar
- Ambigüedad: Sin un espacio de nombres o un prefijo, no queda claro si una llamada a una función hace referencia a una función de DAX integrada o a una UDF personalizada
- Carga de mantenimiento: Cambiar el nombre de las UDFs tras producirse un conflicto requiere actualizar todas las referencias en todo el modelo
Usar nombres compuestos (por ejemplo, Finance.CalcProfit o My_CalcProfit) permite distinguir sus UDFs de las funciones DAX integradas.
Cuándo se activa esta regla
La regla se activa cuando el nombre de una UDF no contiene ni un punto ni un guion bajo:
not Name.Contains(".") and not Name.Contains("_")
Cómo corregir
Corrección manual
- En el Explorador TOM, localice la función definida por el usuario
- Cambie el nombre para incluir un separador de espacio de nombres (
.) o un guion bajo (_) - Tabular Editor actualiza automáticamente todas las referencias del modelo
Causas comunes
Causa 1: Nomenclatura sencilla
Se le dio a la función un nombre simple sin considerar posibles conflictos futuros.
Causa 2: Importada desde una consulta
Se aplicó una UDF desde la sección DEFINE de una consulta DAX, donde no se respetaron las convenciones de espacios de nombres.
Ejemplo
Antes de la corrección
// Función nombrada sin separador
FUNCTION CalcProfit =
(
revenue: DOUBLE,
cost: DOUBLE
)
=> revenue - cost
Después de la corrección
// Función nombrada con separador de espacios de nombres
FUNCTION Finance.CalcProfit =
(
revenue: DOUBLE,
cost: DOUBLE
)
=> revenue - cost
Nivel de compatibilidad
Esta regla se aplica a modelos con nivel de compatibilidad 1702 y superior.