Seja pela necessidade pessoal de entender seu padrão de gastos observando as transações bancárias, seja pela busca de melhorar o desempenho das vendas em sua organização observando as atividades de vendas, os insights reais só são visíveis com agregação e resumo adicionais dos dados de nível transacional. O RDBMS tradicional oferece esse recurso por meio do poder expressivo da agregação SQL. As funções de janela foram adicionadas ao padrão ANSI SQL para ampliar ainda mais a capacidade de expressar perguntas mais complexas com a construção SQL.
O Couchbase N1QL agora suporta as funções de janela e a expressão de tabela comum (CTE) em sua versão 6.5. Os desenvolvedores podem ampliar seus aplicativos para atender a casos de uso comercial mais complexos, além de capacitar os analistas de dados a obter as respostas de que precisam sem realizar pós-processamento adicional no Excel.
Neste artigo, vou me concentrar em alguns exemplos de como você pode aproveitar as funções do N1QL Window e o CTE para abordar duas questões comerciais muito comuns.
Duração das atividades de vendas pelos clientes
Neste primeiro exemplo de um sistema de gerenciamento de atividades de vendas, queremos fornecer um relatório que mostre o tempo que a equipe de vendas gastou trabalhando com seus clientes no período de janeiro a 2019. Dividirei a consulta em duas etapas:
1) Obtenha uma lista de reuniões e a duração da reunião que a equipe de vendas realizou com seus clientes. O tempo total gasto para todos os clientes "total_time_spent" é calculado pela soma da duração das reuniões com uma cláusula OVER () vazia, que realizará a soma para todo o conjunto de resultados. O tempo total gasto por cliente "account_time_spent" usa a mesma construção, mas com o "accid" para a cláusula PARTITION.
|
1 2 3 4 5 6 7 8 |
SELECT c.name, a.startDate, a.title, a.duration, SUM(a.duration) OVER() as total_time_spent, SUM(a.duration) OVER(PARTITION BY a.accid) AS account_time_spent FROM crm a INNER JOIN crm c ON a.accid = c.id AND c.type='account' WHERE a.type='activity' AND a.activityType='Appointment' AND a.startDate BETWEEN '2018-01-01' and '2018-01-31' |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
account_time_spent duration name startDate title total_time_spent 30 "30" "Smith, Avila and Cisneros" "2018-01-24 15:00:00" "Switchable coherent adapter" 25770 510 "150" "Riddle Ltd" "2018-01-05 15:30:00" "Streamlined intermediate intranet" 25770 510 "90" "Riddle Ltd" "2018-01-28 14:30:00" "Advanced solution-oriented synergy" 25770 510 "90" "Riddle Ltd" "2018-01-01 15:00:00" "Ameliorated object-oriented methodology" 25770 510 "30" "Riddle Ltd" "2018-01-10 08:00:00" "Object-based multi-state firmware" 25770 510 "150" "Riddle Ltd" "2018-01-23 09:00:00" "Multi-layered systematic software" 25770 120 "30" "Foster Inc" "2018-01-29 09:30:00" "Public-key bottom-line database" 25770 120 "30" "Foster Inc" "2018-01-09 13:00:00" "Quality-focused local emulation" 25770 120 "60" "Foster Inc" "2018-01-02 08:00:00" "Digitized motivating matrix" 25770 120 "30" "Williams Ltd" "2018-01-22 08:30:00" "Versatile heuristic workforce" 25770 120 "30" "Williams Ltd" "2018-01-24 13:30:00" "Front-line 4thgeneration help-desk" 25770 120 "60" "Williams Ltd" "2018-01-14 14:30:00" "Visionary upward-trending success" 25770 330 "150" "Reid Ltd" "2018-01-21 10:30:00" "Profound logistical archive" 25770 330 "30" "Reid Ltd" "2018-01-13 13:30:00" "Down-sized coherent access" 25770 330 "120" "Reid Ltd" "2018-01-02 12:00:00" "Front-line object-oriented moderator" 25770 330 "30" "Reid Ltd" "2018-01-12 09:30:00" "Programmable reciprocal infrastructure" 25770 .... |
2) Em seguida, use as duas métricas para obter a porcentagem do tempo total que a equipe gastou com cada cliente.
|
1 2 3 4 5 6 7 8 9 10 |
SELECT c.name, ROUND(( SUM(SUM(a.duration)) OVER(PARTITION BY a.accid) / SUM(SUM(a.duration)) OVER()),2) as pct_time FROM crm a INNER JOIN crm c ON a.accid = c.id AND c.type='account' WHERE a.type='activity' AND a.activityType='Appointment' AND a.startDate BETWEEN '2018-01-01' and '2018-01-31' GROUP BY c.name, a.accid ORDER BY 2 DESC |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
name pct_time "Johnson, Adams and Kelly" 0.17 "Davis Group" 0.08 "Gilbert-Morris" 0.08 "Torres and Sons" 0.07 "Reid Ltd" 0.07 "Medina-Daniels" 0.07 "Riddle Ltd" 0.05 "Henderson and Sons" 0.05 "Gill and Sons" 0.05 "Garcia-Young" 0.05 "Sullivan PLC" 0.03 "Brown-Rogers" 0.03 "Foster Inc" 0.03 "Wheeler Inc" 0.03 "Jarvis-Small" 0.03 "Jones-Fox" 0.03 "Lloyd, Blair and Pruitt" 0.03 "Vaughn LLC" 0.02 |
Atividades de vendas mês a mês
Neste segundo exemplo, a consulta mostra como o número de tarefas relacionadas a vendas mudou mês a mês no ano de 2018. A consulta utiliza o recurso N1QL CTE para melhorar a legibilidade da consulta e também a função de janela LAG para obter a contagem de tarefas do período anterior.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
WITH current_period_task AS ( SELECT DATE_TRUNC_STR(a.startDate,'month') AS month, COUNT(1) AS current_period_task_count FROM crm a WHERE a.type='activity' AND a.activityType = 'Task' AND DATE_PART_STR(a.startDate,'year') = 2018 GROUP BY DATE_TRUNC_STR(a.startDate,'month') ), last_period_task AS ( SELECT x.month, x.current_period_task_count, LAG(x.current_period_task_count) OVER ( ORDER BY x.month) AS last_period_task_count FROM current_period_task x ) SELECT b.month, b.current_period_task_count, ROUND(((b.current_period_task_count - b.last_period_task_count ) / b.last_period_task_count),2) AS MoMChg FROM last_period_task AS b |
- O primeiro CTE - "current_period_task" - define a consulta para recuperar uma contagem de todas as atividades do tipo Tarefa agrupadas pelo mês do calendário.
- O segundo CTE - 'last_period_task' lê o primeiro CTE e também aproveita a função de janela LAG para retornar o task_count do mês anterior. Observe que a cláusula ORDER BY é essencial para que a função LAG funcione.
- A consulta principal lê o segundo CTE - "last_period_task" e obtém o cálculo mês a mês.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
MoMChg current_period_task_count month 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
- Baixar: Faça o download do Couchbase Server 6.5
- Documentação: Couchbase Server 6.5 O que há de novo
- Todos os blogs 6.5
Gostaríamos muito de saber se você gostou dos recursos da versão 6.5 e como ela beneficiará sua empresa no futuro. Compartilhe seu feedback por meio dos comentários ou na seção fórum.