Este documento proporciona una referencia completa de todas las funciones disponibles en la función de campos calculados de PyQueryHub. El motor de fórmulas es compatible con la sintaxis de Mode Analytics y admite más de 70 funciones en múltiples categorías.
[nombre_campo]
'texto'
o "texto"
123
o 45.67
+
, -
, *
, /
, ==
, !=
, >
, <
, >=
, <=
SUM([campo])
([a] + [b]) * [c]
-- Cálculo simple
[ingresos] - [costo]
-- Lógica condicional
CASE [estado] WHEN 'activo' THEN 1 ELSE 0 END
-- Agregación con condición
SUM(CASE [region] WHEN 'Norte' THEN [ventas] ELSE 0 END)
-- Manipulación de cadenas
UPPER(LEFT([nombre_cliente], 5))
-- Cálculo de fechas
DATEDIFF('day', [fecha_pedido], TODAY())
Devuelve el valor absoluto de un número.
Sintaxis: ABS(expresion)
Ejemplos:
ABS(-25) -- Devuelve: 25
ABS([ganancia]) -- Devuelve el valor absoluto del campo de ganancia
ABS([ventas] - [objetivo]) -- Devuelve la diferencia absoluta
Casos de Uso:
Redondea un número hacia arriba al entero más cercano.
Sintaxis: CEILING(expresion)
Ejemplos:
CEILING(3.2) -- Devuelve: 4
CEILING(-2.8) -- Devuelve: -2
CEILING([precio] / 10) -- Redondea hacia arriba el precio dividido por 10
Casos de Uso:
Devuelve e (número de Euler) elevado a la potencia del número especificado.
Sintaxis: EXP(expresion)
Ejemplos:
EXP(1) -- Devuelve: 2.718281828...
EXP(2) -- Devuelve: 7.389...
EXP([tasa_crecimiento]) -- Cálculo de crecimiento exponencial
Casos de Uso:
Redondea un número hacia abajo al entero más cercano.
Sintaxis: FLOOR(expresion)
Ejemplos:
FLOOR(3.8) -- Devuelve: 3
FLOOR(-2.2) -- Devuelve: -3
FLOOR([ingresos] / 1000) -- Redondea hacia abajo a miles
Casos de Uso:
Devuelve el logaritmo en base 10 de un número.
Sintaxis: LOG10(expresion)
Ejemplos:
LOG10(100) -- Devuelve: 2
LOG10(1000) -- Devuelve: 3
LOG10([poblacion]) -- Escala logarítmica para números grandes
Casos de Uso:
Devuelve el logaritmo natural (base e) de un número.
Sintaxis: LN(expresion)
Ejemplos:
LN(2.718281828) -- Devuelve: 1 (aproximadamente)
LN([valor]) -- Logaritmo natural del valor
Casos de Uso:
Devuelve el resto después de la división.
Sintaxis: MOD(dividendo, divisor)
Ejemplos:
MOD(10, 3) -- Devuelve: 1
MOD([id_pedido], 2) -- Devuelve 0 para IDs pares, 1 para impares
MOD([numero_dia], 7) -- Día de la semana (0-6)
Casos de Uso:
Devuelve un número elevado a una potencia especificada.
Sintaxis: POWER(base, exponente)
Ejemplos:
POWER(2, 3) -- Devuelve: 8
POWER([base], [exp]) -- Base elevada a la potencia exp
POWER([ventas], 2) -- Cuadrado de los valores de ventas
Casos de Uso:
Redondea un número a un número especificado de decimales.
Sintaxis: ROUND(expresion, lugares_decimales)
Ejemplos:
ROUND(3.14159, 2) -- Devuelve: 3.14
ROUND([precio], 0) -- Redondea al número entero más cercano
ROUND([porcentaje] * 100, 1) -- Redondea el porcentaje a 1 decimal
Casos de Uso:
Devuelve la raíz cuadrada de un número.
Sintaxis: SQRT(expresion)
Ejemplos:
SQRT(9) -- Devuelve: 3
SQRT(25) -- Devuelve: 5
SQRT([area]) -- Calcula la longitud del lado a partir del área
Casos de Uso:
Trunca un número a un número especificado de decimales.
Sintaxis: TRUNC(expresion, lugares_decimales)
Ejemplos:
TRUNC(3.14159, 2) -- Devuelve: 3.14
TRUNC([valor], 0) -- Elimina la porción decimal
TRUNC([precio] * 1.1, 2) -- Trunca el precio calculado
Casos de Uso:
Devuelve la expresión si no es nula, de lo contrario devuelve 0.
Sintaxis: ZN(expresion)
Ejemplos:
ZN([comision]) -- Devuelve 0 si la comisión es nula
ZN([bono]) + [salario] -- Suma el bono o 0 al salario
Casos de Uso:
Prueba si una cadena contiene una subcadena especificada.
Sintaxis: CONTAINS(cadena, subcadena)
Ejemplos:
CONTAINS([nombre_producto], 'Pro') -- Devuelve verdadero si el nombre contiene 'Pro'
CONTAINS([email], '@gmail.com') -- Comprueba si hay direcciones de Gmail
Casos de Uso:
Devuelve la posición de una subcadena dentro de una cadena (indexación basada en 1).
Sintaxis: FIND(cadena, subcadena)
Ejemplos:
FIND([email], '@') -- Posición del símbolo @
FIND([descripcion], 'error') -- Encuentra menciones de error
Casos de Uso:
Devuelve los caracteres más a la izquierda de una cadena.
Sintaxis: LEFT(cadena, numero_de_caracteres)
Ejemplos:
LEFT([id_cliente], 3) -- Primeros 3 caracteres
LEFT([codigo_producto], 2) -- Prefijo de categoría de producto
LEFT([telefono], 3) -- Código de área
Casos de Uso:
Convierte una cadena a minúsculas.
Sintaxis: LOWER(cadena)
Ejemplos:
LOWER([nombre_cliente]) -- Convierte el nombre a minúsculas
LOWER([email]) -- Normaliza las direcciones de correo electrónico
Casos de Uso:
Elimina los espacios en blanco del lado izquierdo de una cadena.
Sintaxis: LTRIM(cadena)
Ejemplos:
LTRIM([descripcion]) -- Elimina espacios iniciales
LTRIM([entrada_usuario]) -- Limpia la entrada del usuario
Casos de Uso:
Divide una cadena por un delimitador y devuelve el token en la posición especificada.
Sintaxis: PLUCK(cadena, delimitador, posicion)
Ejemplos:
PLUCK([nombre_completo], ' ', 1) -- Primer nombre
PLUCK([nombre_completo], ' ', 2) -- Apellido
PLUCK([ruta_archivo], '/', 3) -- Tercer segmento de la ruta
PLUCK([datos_csv], ',', 2) -- Segunda columna CSV
Casos de Uso:
Reemplaza todas las ocurrencias de una subcadena por otra subcadena.
Sintaxis: REPLACE(cadena, subcadena_antigua, subcadena_nueva)
Ejemplos:
REPLACE([telefono], '-', '') -- Elimina guiones del teléfono
REPLACE([descripcion], 'antiguo', 'nuevo') -- Reemplaza texto
REPLACE([nombre_producto], '&', 'y') -- Reemplaza el ampersand
Casos de Uso:
Devuelve los caracteres más a la derecha de una cadena.
Sintaxis: RIGHT(cadena, numero_de_caracteres)
Ejemplos:
RIGHT([id_pedido], 4) -- Últimos 4 caracteres
RIGHT([nombre_archivo], 3) -- Extensión del archivo
RIGHT([cuenta], 2) -- Sufijo de la cuenta
Casos de Uso:
Elimina los espacios en blanco del lado derecho de una cadena.
Sintaxis: RTRIM(cadena)
Ejemplos:
RTRIM([descripcion]) -- Elimina espacios finales
RTRIM([comentario_usuario]) -- Limpia la entrada del usuario
Casos de Uso:
Extrae una subcadena de una cadena comenzando en una posición especificada.
Sintaxis: SUBSTR(cadena, posicion_inicio, longitud)
Ejemplos:
SUBSTR([codigo_producto], 2, 3) -- Caracteres 2-4
SUBSTR([descripcion], 1, 50) -- Primeros 50 caracteres
SUBSTR([cadena_fecha], 1, 4) -- Extrae el año
Casos de Uso:
Elimina los espacios en blanco de ambos lados de una cadena.
Sintaxis: TRIM(cadena)
Ejemplos:
TRIM([entrada_cliente]) -- Elimina espacios iniciales/finales
TRIM([descripcion]) -- Limpia el campo de descripción
Casos de Uso:
Convierte una cadena a mayúsculas.
Sintaxis: UPPER(cadena)
Ejemplos:
UPPER([codigo_producto]) -- Estandariza los códigos de producto
UPPER([estado]) -- Estandariza las abreviaturas de estado
Casos de Uso:
Agrega un intervalo de tiempo especificado a una fecha.
Sintaxis: DATEADD(parte_fecha, numero, fecha)
Partes de Fecha: 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second'
Ejemplos:
DATEADD('day', 30, [fecha_pedido]) -- 30 días después del pedido
DATEADD('month', -1, TODAY()) -- Hace un mes
DATEADD('year', 1, [fecha_inicio]) -- Un año después
Casos de Uso:
Calcula la diferencia entre dos fechas.
Sintaxis: DATEDIFF(parte_fecha, fecha_inicio, fecha_fin)
Ejemplos:
DATEDIFF('day', [fecha_pedido], [fecha_envio]) -- Días para enviar
DATEDIFF('month', [fecha_contratacion], TODAY()) -- Meses empleado
DATEDIFF('year', [fecha_nacimiento], TODAY()) -- Edad en años
Casos de Uso:
Extrae una parte específica de una fecha.
Sintaxis: DATEPART(parte_fecha, fecha)
Ejemplos:
DATEPART('year', [fecha_pedido]) -- Extrae el año
DATEPART('month', [fecha_transaccion]) -- Extrae el mes (1-12)
DATEPART('dow', [fecha]) -- Día de la semana (1-7)
DATEPART('quarter', [fecha_ventas]) -- Trimestre (1-4)
Casos de Uso:
Trunca una fecha a la precisión especificada.
Sintaxis: DATETRUNC(parte_fecha, fecha)
Ejemplos:
DATETRUNC('month', [fecha_pedido]) -- Primer día del mes
DATETRUNC('year', [fecha_transaccion]) -- Primer día del año
DATETRUNC('week', [fecha_evento]) -- Primer día de la semana
Casos de Uso:
Devuelve la fecha y hora actuales.
Sintaxis: NOW()
Ejemplos:
NOW() -- Marca de tiempo actual
DATEDIFF('hour', [creado_en], NOW()) -- Horas desde la creación
Casos de Uso:
Devuelve la fecha actual (sin hora).
Sintaxis: TODAY()
Ejemplos:
TODAY() -- Fecha actual
DATEDIFF('day', [fecha_vencimiento], TODAY()) -- Días vencidos
Casos de Uso:
Convierte una expresión a formato de fecha.
Sintaxis: DATE(expresion)
Ejemplos:
DATE([campo_timestamp]) -- Extrae la fecha de un timestamp
DATE('2023-12-25') -- Convierte una cadena a fecha
Casos de Uso:
Convierte una expresión a formato de fecha y hora.
Sintaxis: DATETIME(expresion)
Ejemplos:
DATETIME([cadena_fecha]) -- Convierte una cadena a fecha y hora
DATETIME([timestamp_unix]) -- Convierte un timestamp
Casos de Uso:
Convierte una expresión a un entero.
Sintaxis: INT(expresion)
Ejemplos:
INT([campo_decimal]) -- Convierte a entero
INT([cadena_numero]) -- Analiza una cadena numérica
INT([precio] / 100) -- Convierte centavos a dólares
Casos de Uso:
Convierte una expresión a un número de punto flotante.
Sintaxis: FLOAT(expresion)
Ejemplos:
FLOAT([campo_entero]) -- Convierte a decimal
FLOAT([cadena_porcentaje]) -- Analiza un porcentaje
Casos de Uso:
Operación lógica AND - devuelve verdadero si ambas condiciones son verdaderas.
Sintaxis: condicion1 AND condicion2
Ejemplos:
[edad] >= 18 AND [estado] == 'activo' -- Adulto y activo
[ingresos] > 1000 AND [region] == 'Norte' -- Altos ingresos en el Norte
[fecha] >= '2023-01-01' AND [fecha] <= '2023-12-31' -- Rango de fechas
Casos de Uso:
Operación lógica OR - devuelve verdadero si alguna de las condiciones es verdadera.
Sintaxis: condicion1 OR condicion2
Ejemplos:
[estado] == 'pendiente' OR [estado] == 'revision' -- Cualquiera de los dos estados
[prioridad] == 'alta' OR [valor] > 10000 -- Alta prioridad o valor
[region] == 'Norte' OR [region] == 'Sur' -- Múltiples regiones
Casos de Uso:
Lógica condicional con operadores de comparación.
Sintaxis: IF condicion THEN valor1 ELSE valor2 END
Ejemplos:
IF [ganancia] > 0 THEN 'Rentable' ELSE 'Pérdida' END
IF [edad] >= 65 THEN 'Senior' ELSE 'Regular' END
IF [puntuacion] >= 90 THEN 'A' ELSE IF [puntuacion] >= 80 THEN 'B' ELSE 'C' END
Casos de Uso:
Lógica condicional para comparaciones de igualdad.
Sintaxis: CASE campo WHEN valor THEN resultado ELSE alternativa END
Ejemplos:
CASE [estado] WHEN 'activo' THEN 1 ELSE 0 END
CASE [calificacion] WHEN 'A' THEN 4 WHEN 'B' THEN 3 WHEN 'C' THEN 2 ELSE 1 END
CASE [region] WHEN 'Norte' THEN 'N' WHEN 'Sur' THEN 'S' ELSE 'Otro' END
Casos de Uso:
Prueba si una expresión es nula.
Sintaxis: ISNULL(expresion)
Ejemplos:
ISNULL([campo_opcional]) -- Comprueba si el campo es nulo
SUM(CASE WHEN ISNULL([valor]) THEN 0 ELSE 1 END) -- Cuenta valores no nulos
Casos de Uso:
Devuelve la expresión si no es nula, de lo contrario devuelve la alternativa.
Sintaxis: IFNULL(expresion, valor_alternativo)
Ejemplos:
IFNULL([comision], 0) -- Usa 0 si la comisión es nula
IFNULL([apodo], [nombre_completo]) -- Usa el apodo o el nombre completo
IFNULL([descuento], 0.0) -- Descuento por defecto a 0
Casos de Uso:
Calcula el promedio de todos los valores.
Sintaxis: AVG(campo_o_expresion)
Ejemplos:
AVG([ventas]) -- Promedio de ventas
AVG([precio] * [cantidad]) -- Valor promedio del pedido
AVG(CASE [region] WHEN 'Norte' THEN [ventas] ELSE NULL END) -- Promedio regional
Casos de Uso:
Cuenta valores no nulos.
Sintaxis: COUNT(campo_o_expresion)
Ejemplos:
COUNT([id_pedido]) -- Conteo de pedidos
COUNT(CASE [estado] WHEN 'completo' THEN 1 ELSE NULL END) -- Pedidos completados
COUNT(1) -- Cuenta todas las filas
Casos de Uso:
Cuenta valores distintos (únicos).
Sintaxis: COUNTD(campo_o_expresion)
Ejemplos:
COUNTD([id_cliente]) -- Clientes únicos
COUNTD([categoria_producto]) -- Número de categorías
COUNTD([region]) -- Número de regiones
Casos de Uso:
Devuelve el valor máximo.
Sintaxis: MAX(campo_o_expresion)
Ejemplos:
MAX([fecha_pedido]) -- Pedido más reciente
MAX([precio]) -- Precio más alto
MAX([puntuacion]) -- Mejor puntuación
Casos de Uso:
Devuelve el valor mediano (central).
Sintaxis: MEDIAN(campo_o_expresion)
Ejemplos:
MEDIAN([salario]) -- Salario medio
MEDIAN([tiempo_respuesta]) -- Tiempo de respuesta típico
MEDIAN([edad]) -- Edad mediana
Casos de Uso:
Devuelve el valor mínimo.
Sintaxis: MIN(campo_o_expresion)
Ejemplos:
MIN([fecha_pedido]) -- Pedido más antiguo
MIN([precio]) -- Precio más bajo
MIN([tiempo_respuesta]) -- Respuesta más rápida
Casos de Uso:
Devuelve el valor que ocurre con más frecuencia.
Sintaxis: MODE(campo_o_expresion)
Ejemplos:
MODE([categoria_producto]) -- Categoría más común
MODE([segmento_cliente]) -- Segmento más frecuente
MODE([dia_de_semana]) -- Día más común
Casos de Uso:
Devuelve el N-ésimo percentil de los valores.
Funciones Disponibles: PERCENTILE_1
, PERCENTILE_5
, PERCENTILE_25
, PERCENTILE_75
, PERCENTILE_95
, PERCENTILE_99
Ejemplos:
PERCENTILE_25([ingresos]) -- Percentil 25 (Q1)
PERCENTILE_75([ingresos]) -- Percentil 75 (Q3)
PERCENTILE_95([tiempo_respuesta]) -- Percentil 95
PERCENTILE_99([valor_transaccion]) -- Percentil 99
Casos de Uso:
Calcula la desviación estándar de la muestra.
Sintaxis: STDEV(campo_o_expresion)
Ejemplos:
STDEV([ventas]) -- Variabilidad de las ventas
STDEV([tiempo_respuesta]) -- Consistencia del tiempo de respuesta
STDEV([puntuaciones]) -- Distribución de puntuaciones
Casos de Uso:
Calcula la desviación estándar de la población.
Sintaxis: STDEVP(campo_o_expresion)
Ejemplos:
STDEVP([puntuaciones_examen]) -- Desviación estándar de la población
STDEVP([mediciones]) -- Variabilidad de la población completa
Casos de Uso:
Calcula la suma de todos los valores.
Sintaxis: SUM(campo_o_expresion)
Ejemplos:
SUM([ventas]) -- Ventas totales
SUM([cantidad] * [precio]) -- Ingresos totales
SUM(CASE [estado] WHEN 'completo' THEN 1 ELSE 0 END) -- Cuenta completados
Casos de Uso:
Calcula la varianza de la muestra.
Sintaxis: VAR(campo_o_expresion)
Ejemplos:
VAR([devoluciones]) -- Variabilidad de las devoluciones
VAR([rendimiento]) -- Varianza del rendimiento
Casos de Uso:
Calcula la varianza de la población.
Sintaxis: VARP(campo_o_expresion)
Ejemplos:
VARP([datos_poblacion]) -- Varianza de la población
VARP([conjunto_datos_completo]) -- Varianza del conjunto de datos completo
Casos de Uso:
Devuelve el número de filas desde la fila actual hasta la primera fila de la partición.
Sintaxis: FIRST()
Ejemplos:
FIRST() -- Distancia a la primera fila
[ventas] - LOOKUP([ventas], FIRST()) -- Diferencia con el primer valor
Casos de Uso:
Devuelve el índice (posición) de la fila actual.
Sintaxis: INDEX()
Ejemplos:
INDEX() -- Número de fila (basado en 1)
INDEX() / COUNT([id]) -- Posición relativa como porcentaje
Casos de Uso:
Devuelve el número de filas desde la fila actual hasta la última fila de la partición.
Sintaxis: LAST()
Ejemplos:
LAST() -- Distancia a la última fila
[ventas] - LOOKUP([ventas], LAST()) -- Diferencia con el último valor
Casos de Uso:
Devuelve el valor de una expresión en un desplazamiento de fila especificado.
Sintaxis: LOOKUP(expresion, offset)
Ejemplos:
LOOKUP([ventas], -1) -- Ventas de la fila anterior
LOOKUP([precio], 1) -- Precio de la fila siguiente
LOOKUP([valor], 0) -- Valor de la fila actual
[ventas] - LOOKUP([ventas], -1) -- Cambio desde el período anterior
Casos de Uso:
Distribuye las filas en un número especificado de grupos (tiles).
Sintaxis: NTILE(expresion, numero_de_tiles)
Ejemplos:
NTILE([ventas], 4) -- Cuartiles (1-4)
NTILE([rendimiento], 10) -- Deciles (1-10)
NTILE([puntuacion], 5) -- Quintiles (1-5)
Casos de Uso:
Devuelve el rango de cada fila con huecos para valores empatados.
Sintaxis: RANK(expresion)
Ejemplos:
RANK([ventas]) -- Clasificación de ventas con huecos
RANK([puntuacion]) -- Clasificación de puntuaciones
21 - RANK([puntuacion]) -- Clasificación inversa
Casos de Uso:
Devuelve el rango de cada fila sin huecos para valores empatados.
Sintaxis: RANK_DENSE(expresion)
Ejemplos:
RANK_DENSE([ingresos]) -- Clasificación densa de ingresos
RANK_DENSE([rendimiento]) -- Clasificación de rendimiento sin huecos
Casos de Uso:
Calcula un promedio móvil desde la primera fila hasta la fila actual.
Sintaxis: RUNNING_AVG(expresion)
Ejemplos:
RUNNING_AVG([ventas_diarias]) -- Promedio acumulado de ventas
RUNNING_AVG([tiempo_respuesta]) -- Promedio móvil del tiempo de respuesta
Casos de Uso:
Calcula un conteo móvil desde la primera fila hasta la fila actual.
Sintaxis: RUNNING_COUNT(expresion)
Ejemplos:
RUNNING_COUNT([id_pedido]) -- Conteo acumulado de pedidos
RUNNING_COUNT([cliente]) -- Conteo móvil de clientes
Casos de Uso:
Calcula una suma móvil desde la primera fila hasta la fila actual.
Sintaxis: RUNNING_SUM(expresion)
Ejemplos:
RUNNING_SUM([ingresos_diarios]) -- Ingresos acumulados
RUNNING_SUM([unidades_vendidas]) -- Total de unidades móviles
RUNNING_SUM([costos]) -- Costos acumulados
Casos de Uso:
Calcula el total para toda la partición.
Sintaxis: TOTAL(expresion)
Ejemplos:
[ventas] / TOTAL([ventas]) -- Porcentaje del total
TOTAL([ingresos]) -- Ingresos totales de la partición
Casos de Uso:
Calcula un promedio sobre una ventana móvil de filas.
Sintaxis: WINDOW_AVG(expresion, offset_inicio, offset_fin)
Ejemplos:
WINDOW_AVG([ventas], -2, 2) -- Promedio móvil de 5 días
WINDOW_AVG([precio], -6, 0) -- Promedio móvil de 7 períodos
WINDOW_AVG([rendimiento], -1, 1) -- Promedio centrado de 3 períodos
Casos de Uso:
Cuenta valores sobre una ventana móvil de filas.
Sintaxis: WINDOW_COUNT(expresion, offset_inicio, offset_fin)
Ejemplos:
WINDOW_COUNT([pedidos], -6, 0) -- Pedidos en los últimos 7 períodos
WINDOW_COUNT([eventos], -1, 1) -- Eventos en una ventana de 3 períodos
Casos de Uso:
Calcula una suma sobre una ventana móvil de filas.
Sintaxis: WINDOW_SUM(expresion, offset_inicio, offset_fin)
Ejemplos:
WINDOW_SUM([ventas], -6, 0) -- Suma móvil de 7 días
WINDOW_SUM([ingresos], -3, 3) -- Suma centrada de 7 períodos
WINDOW_SUM([cantidad], -11, 0) -- Total móvil de 12 meses
Casos de Uso:
-- Cálculo de la puntuación RFM
CASE
WHEN [dias_recencia] <= 30 AND [frecuencia] >= 5 AND [monetario] >= 1000 THEN 'Campeones'
WHEN [dias_recencia] <= 60 AND [frecuencia] >= 3 AND [monetario] >= 500 THEN 'Leales'
WHEN [dias_recencia] <= 90 AND [frecuencia] >= 2 THEN 'Potenciales'
ELSE 'En Riesgo'
END
-- Calcular el porcentaje de margen de beneficio
ROUND(([ingresos] - [costo]) / [ingresos] * 100, 2)
-- Categorizar los niveles de beneficio
CASE
WHEN ([ingresos] - [costo]) / [ingresos] > 0.30 THEN 'Margen Alto'
WHEN ([ingresos] - [costo]) / [ingresos] > 0.15 THEN 'Margen Medio'
WHEN ([ingresos] - [costo]) / [ingresos] > 0 THEN 'Margen Bajo'
ELSE 'Pérdida'
END
-- Tasa de crecimiento de las ventas
([ventas_actuales] - [ventas_anteriores]) / [ventas_anteriores] * 100
-- Alcance de la cuota
[ventas_reales] / [cuota] * 100
-- Rango de ventas dentro del equipo
RANK([ventas_totales])
-- Edad del cliente
DATEDIFF('year', [fecha_nacimiento], TODAY())
-- Antigüedad de la cuenta en meses
DATEDIFF('month', [cuenta_creada], TODAY())
-- Días desde la última compra
DATEDIFF('day', [fecha_ultima_compra], TODAY())
-- Trimestre del año
DATEPART('quarter', [fecha_transaccion])
-- Nombre del mes
CASE DATEPART('month', [fecha])
WHEN 1 THEN 'Enero'
WHEN 2 THEN 'Febrero'
WHEN 3 THEN 'Marzo'
-- ... continuar para todos los meses
ELSE 'Desconocido'
END
-- ¿Es fin de semana?
CASE DATEPART('dow', [fecha])
WHEN 1 THEN 'Fin de semana' -- Domingo
WHEN 7 THEN 'Fin de semana' -- Sábado
ELSE 'Día de semana'
END
-- Comprobación de formato de correo electrónico válido
CASE
WHEN CONTAINS([email], '@') AND CONTAINS([email], '.') THEN 'Válido'
ELSE 'Inválido'
END
-- Extraer dominio
RIGHT([email], LEN([email]) - FIND([email], '@'))
-- Limpiar números de teléfono
REPLACE(REPLACE(REPLACE([telefono], '(', ''), ')', ''), '-', '')
-- Estandarizar nombres
TRIM(UPPER([apellido])) + ', ' + TRIM([primer_nombre])
-- Extraer iniciales
LEFT([primer_nombre], 1) + LEFT([apellido], 1)
-- Cálculo de la puntuación Z
([valor] - AVG([valor])) / STDEV([valor])
-- Coeficiente de variación
STDEV([ventas]) / AVG([ventas]) * 100
-- Rango percentil
RANK([puntuacion]) / COUNT([puntuacion]) * 100
-- Retorno de la inversión
([valor_final] - [valor_inicial]) / [valor_inicial] * 100
-- Tasa de crecimiento anual compuesta
POWER([valor_final] / [valor_inicial], 1.0 / [años]) - 1
-- Valor presente
[valor_futuro] / POWER(1 + [tasa_interes], [periodos])
-- Conteo de clientes de alto valor
SUM(CASE WHEN [compras_totales] > 10000 THEN 1 ELSE 0 END)
-- Porcentaje de pedidos completados
SUM(CASE [estado] WHEN 'completado' THEN 1 ELSE 0 END) / COUNT([id_pedido]) * 100
-- Edad promedio de los clientes activos
AVG(CASE [estado] WHEN 'activo' THEN [edad] ELSE NULL END)
-- Ingresos de nuevos clientes
SUM(CASE WHEN [tipo_cliente] = 'nuevo' THEN [ingresos] ELSE 0 END)
-- Porcentaje de ingresos del producto principal
MAX([ingresos_producto]) / SUM([ingresos_producto]) * 100
-- Valor promedio del pedido por región
AVG(CASE [region] WHEN 'Norte' THEN [valor_pedido] ELSE NULL END)
Usa Referencias de Campo Claras
[nombre_campo]
Maneja Valores Nulos
IFNULL()
o ZN()
para valores por defectoOptimiza el Rendimiento
Formatea Fórmulas Complejas
-- Bueno: Múltiples líneas con indentación
CASE [nivel_cliente]
WHEN 'Oro' THEN [descuento_base] * 1.5
WHEN 'Plata' THEN [descuento_base] * 1.2
ELSE [descuento_base]
END
-- Evitar: Una sola línea larga
CASE [nivel_cliente] WHEN 'Oro' THEN [descuento_base] * 1.5 WHEN 'Plata' THEN [descuento_base] * 1.2 ELSE [descuento_base] END
Usa Nombres Significativos
Documenta la Lógica Compleja
Prueba con Datos de Muestra
Usa Tipos de Datos Apropiados
Valida la Lógica de Negocio
Minimiza los Cálculos Complejos
Agregaciones Eficientes
Operaciones de Cadena
-- Error: Faltan corchetes
ingresos - costo -- Debería ser: [ingresos] - [costo]
-- Error: Paréntesis no coincidentes
SUM([ventas] * 1.1 -- Debería ser: SUM([ventas] * 1.1)
-- Error: Comillas inválidas
[estado] == "activo" -- Debería ser: [estado] == 'activo'
-- Error: Concatenación de cadenas con números
[nombre] + [edad] -- Debería ser: [nombre] + ' (' + INT([edad]) + ')'
-- Error: Aritmética de fechas con cadenas
[fecha] + 30 -- Debería ser: DATEADD('day', 30, [fecha])
-- Error: Propagación de nulos
[valor1] + [valor2] -- Si alguno es nulo, el resultado es nulo
-- Solución: IFNULL([valor1], 0) + IFNULL([valor2], 0)
-- Error: División por cero
[numerador] / [denominador] -- Puede causar un error si el denominador es 0
-- Solución: CASE WHEN [denominador] != 0 THEN [numerador] / [denominador] ELSE 0 END
Simplifica Fórmulas Complejas
Usa Datos de Muestra
Valida los Tipos de Datos
Cálculos Lentos
Problemas de Memoria
Errores de Tiempo de Espera
Al solucionar problemas de campos calculados:
Comprueba la Sintaxis Primero
Prueba con Datos Simples
Revisa la Documentación
Usa los Mensajes de Error
Recuerda: El motor de fórmulas proporciona validación en tiempo real y funcionalidad de vista previa para ayudar a detectar errores temprano en el proceso de desarrollo.