Tanto si se trata de una necesidad personal de entender su patrón de gasto a partir de las transacciones bancarias, como si se trata de mejorar el rendimiento de las ventas en su organización mediante el análisis de las actividades de ventas, los conocimientos reales sólo son visibles con la agregación y el resumen adicionales de los datos a nivel transaccional. El RDBMS tradicional proporciona esta capacidad a través del poder expresivo de la agregación SQL. Las funciones de ventana se añadieron al estándar ANSI SQL para ampliar aún más la capacidad de expresar preguntas más complejas con el constructo SQL.
Couchbase N1QL ahora soporta las funciones de ventana y la expresión de tabla común (CTE) en su versión 6.5. Los desarrolladores pueden ampliar sus aplicaciones para satisfacer casos de uso empresarial más complejos, además de permitir a los analistas de datos obtener las respuestas que necesitan sin necesidad de realizar un posprocesamiento adicional en Excel.
En este artículo me centraré en un par de ejemplos sobre cómo puede aprovechar las funciones de ventana N1QL y CTE para abordar dos preguntas de negocio muy comunes.
Duración de las actividades de venta por cliente
En este primer ejemplo para un sistema de gestión de la actividad de ventas, queremos proporcionar un informe que muestre la cantidad de tiempo que el equipo de ventas ha pasado trabajando con sus clientes durante enero-2019. Desglosaré la consulta en dos pasos:
1) Obtener una lista de las reuniones y la duración de las mismas que el equipo de ventas ha realizado con sus clientes. El tiempo total empleado para todos los clientes 'tiempo_total_empleado' se calcula sumando la duración de las citas con una cláusula OVER () vacía, que realizará la suma para todo el conjunto de resultados. El tiempo total empleado por cliente 'tiempo_cuenta_empleado' utiliza la misma construcción, pero con 'accid' para la cláusula PARTITION.
1 2 3 4 5 6 7 8 |
SELECCIONE c.nombre, a.fechainicio, a.título, a.duración, SUM(a.duración) OVER() como tiempo_utilizado_total, SUM(a.duración) OVER(PARTICIÓN POR a.accidente) AS cuenta_tiempo_gastado DESDE crm a INNER JOIN crm c EN a.accidente = c.id Y c.tipo=cuenta DONDE a.tipo=Actividad Y a.activityType=Nombramiento Y a.fechainicio ENTRE '2018-01-01' y '2018-01-31' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
cuenta_tiempo_gastado duración nombre fechaInicio título tiempo_utilizado_total 30 "30" "Smith, Ávila y Cisneros" "2018-01-24 15:00:00" "Adaptador coherente conmutable" 25770 510 "150" "Riddle Ltd" "2018-01-05 15:30:00" "Intranet intermedia racionalizada" 25770 510 "90" "Riddle Ltd" "2018-01-28 14:30:00" "Sinergia avanzada orientada a soluciones" 25770 510 "90" "Riddle Ltd" "2018-01-01 15:00:00" "Metodología mejorada orientada a objetos" 25770 510 "30" "Riddle Ltd" "2018-01-10 08:00:00" "Firmware multiestado basado en objetos" 25770 510 "150" "Riddle Ltd" "2018-01-23 09:00:00" "Software sistemático multicapa" 25770 120 "30" "Foster Inc" "2018-01-29 09:30:00" "Base de datos de clave pública" 25770 120 "30" "Foster Inc" "2018-01-09 13:00:00" "Emulación local centrada en la calidad" 25770 120 "60" "Foster Inc" "2018-01-02 08:00:00" "Matriz motivadora digitalizada" 25770 120 "30" "Williams Ltd" "2018-01-22 08:30:00" "Mano de obra heurística versátil" 25770 120 "30" "Williams Ltd" "2018-01-24 13:30:00" "Servicio de asistencia de 4ª generación en primera línea" 25770 120 "60" "Williams Ltd" "2018-01-14 14:30:00" "Éxito visionario con tendencia al alza" 25770 330 "150" "Reid Ltd" "2018-01-21 10:30:00" "Profundo archivo logístico" 25770 330 "30" "Reid Ltd" "2018-01-13 13:30:00" "Acceso coherente a tamaño reducido" 25770 330 "120" "Reid Ltd" "2018-01-02 12:00:00" "Moderador de primera línea orientado a objetos" 25770 330 "30" "Reid Ltd" "2018-01-12 09:30:00" "Infraestructura recíproca programable" 25770 .... |
2) A continuación, utilice las dos métricas para obtener el porcentaje del tiempo total que el equipo dedicó a cada cliente.
1 2 3 4 5 6 7 8 9 10 |
SELECCIONE c.nombre, RONDA(( SUM(SUM(a.duración)) OVER(PARTICIÓN POR a.accidente) / SUM(SUM(a.duración)) OVER()),2) como hora_pct DESDE crm a INNER JOIN crm c EN a.accidente = c.id Y c.tipo=cuenta DONDE a.tipo=Actividad Y a.activityType=Nombramiento Y a.fechainicio ENTRE '2018-01-01' y '2018-01-31' GRUPO POR c.nombre, a.accidente ORDENAR POR 2 DESC |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
nombre pct_tiempo "Johnson, Adams y Kelly" 0.17 "Grupo Davis" 0.08 "Gilbert-Morris" 0.08 "Torres e Hijos" 0.07 "Reid Ltd" 0.07 "Medina-Daniels" 0.07 "Riddle Ltd" 0.05 "Henderson e Hijos" 0.05 "Gill e Hijos" 0.05 "García-Young" 0.05 "Sullivan PLC" 0.03 "Brown-Rogers" 0.03 "Foster Inc" 0.03 "Wheeler Inc" 0.03 "Jarvis-Pequeño" 0.03 "Jones-Fox" 0.03 "Lloyd, Blair y Pruitt" 0.03 "Vaughn LLC" 0.02 |
Actividades de venta mes a mes
En este segundo ejemplo, la consulta muestra cómo ha cambiado el número de tareas relacionadas con las ventas mes a mes para el año 2018. La consulta aprovecha la función CTE de N1QL para mejorar la legibilidad de la consulta, y también la función de ventana LAG para obtener el recuento de tareas del periodo anterior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
CON tarea_periodo_actual AS ( SELECCIONE DATE_TRUNC_STR(a.fechainicio,mes) AS mes, CONTAR(1) AS recuento_tareas_periodo_actual DESDE crm a DONDE a.tipo=Actividad Y a.activityType = Tarea Y DATE_PART_STR(a.startDate,año) = 2018 GRUPO POR DATE_TRUNC_STR(a.fechainicio,mes) ), tarea_último_periodo AS ( SELECCIONE x.mes, x.current_period_task_count, LAG(x.recuento_tareas_periodo_actual) EN ( ORDENAR POR x.mes) AS recuento_tareas_último_periodo DESDE tarea_periodo_actual x ) SELECCIONE b.mes, b.recuento_tareas_periodo_actual, RONDA(((b.recuento_tareas_periodo_actual - b.recuento_tareas_último_periodo ) / b.recuento_tareas_último_periodo),2) AS MoMChg DESDE tarea_último_periodo AS b |
- El primer CTE - 'current_period_task' define la consulta para recuperar un recuento de todas las actividades de tipo Task agrupadas por el mes natural.
- El segundo CTE - 'last_period_task' lee del primer CTE, y también aprovecha la función de ventana LAG para devolver el recuento de tareas del mes anterior. Tenga en cuenta que la cláusula ORDER BY es fundamental para que la función LAG funcione.
- La consulta principal lee del segundo CTE - 'last_period_task' y deriva el cálculo mes a mes.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
MoMChg recuento_tareas_periodo_actual mes 283 "2018-01-01" -0.08 260 "2018-02-01" 0.1 287 "2018-03-01" -0.08 264 "2018-04-01" 0.11 292 "2018-05-01" 0 293 "2018-06-01" -0.03 285 "2018-07-01" 0 285 "2018-08-01" 0 284 "2018-09-01" 0 283 "2018-10-01" -0.05 268 "2018-11-01" 0.06 285 "2018-12-01" |
Recursos
- Descargar: Descargar Couchbase Server 6.5
- Documentación: Novedades de Couchbase Server 6.5
- Todos los blogs de 6.5
Nos encantaría que nos dijera qué le han parecido las funciones de la versión 6.5 y en qué beneficiarán a su empresa en el futuro. Por favor, comparta su opinión a través de los comentarios o en el foro.