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 |
SELECIONAR c.nome, a.startDate, a.título, a.duração, SUM(a.duração) OVER() como total_time_spent, SUM(a.duração) SOBRE(PARTIÇÃO POR a.accid) AS account_time_spent DE crm a INNER JOIN crm c ON a.accid = c.id E c.tipo="conta ONDE a.tipo='atividade' E a.activityType='Nomeação' E a.startDate ENTRE '2018-01-01' e '2018-01-31' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
account_time_spent duração nome startDate título total_time_spent 30 "30" "Smith, Avila e Cisneros" "2018-01-24 15:00:00" "Adaptador coerente comutável" 25770 510 "150" "Riddle Ltd" "2018-01-05 15:30:00" "Intranet intermediária simplificada" 25770 510 "90" "Riddle Ltd" "2018-01-28 14:30:00" "Sinergia avançada orientada para soluções" 25770 510 "90" "Riddle Ltd" "2018-01-01 15:00:00" "Metodologia orientada a objetos aprimorada" 25770 510 "30" "Riddle Ltd" "2018-01-10 08:00:00" "Firmware multiestado baseado em objeto" 25770 510 "150" "Riddle Ltd" "2018-01-23 09:00:00" "Software sistemático em várias camadas" 25770 120 "30" "Foster Inc" "2018-01-29 09:30:00" "Banco de dados de resultados com chave pública" 25770 120 "30" "Foster Inc" "2018-01-09 13:00:00" "Emulação local com foco na qualidade" 25770 120 "60" "Foster Inc" "2018-01-02 08:00:00" "Matriz de motivação digitalizada" 25770 120 "30" "Williams Ltd" "2018-01-22 08:30:00" "Força de trabalho heurística versátil" 25770 120 "30" "Williams Ltd" "2018-01-24 13:30:00" "Linha de frente do help-desk de quarta geração" 25770 120 "60" "Williams Ltd" "2018-01-14 14:30:00" "Sucesso visionário com tendência de crescimento" 25770 330 "150" "Reid Ltd" "2018-01-21 10:30:00" "Arquivo logístico profundo" 25770 330 "30" "Reid Ltd" "2018-01-13 13:30:00" "Acesso coerente de tamanho reduzido" 25770 330 "120" "Reid Ltd" "2018-01-02 12:00:00" "Moderador de linha de frente orientado a objetos" 25770 330 "30" "Reid Ltd" "2018-01-12 09:30:00" "Infraestrutura recíproca programável" 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 |
SELECIONAR c.nome, REDONDA(( SUM(SUM(a.duração)) SOBRE(PARTIÇÃO POR a.accid) / SUM(SUM(a.duração)) OVER()),2) como pct_time DE crm a INNER JOIN crm c ON a.accid = c.id E c.tipo="conta ONDE a.tipo='atividade' E a.activityType='Nomeação' E a.startDate ENTRE '2018-01-01' e '2018-01-31' GRUPO BY c.nome, 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 |
nome pct_tempo "Johnson, Adams e Kelly" 0.17 "Grupo Davis" 0.08 "Gilbert-Morris" 0.08 "Torres e Filhos" 0.07 "Reid Ltd" 0.07 "Medina-Daniels" 0.07 "Riddle Ltd" 0.05 "Henderson e Filhos" 0.05 "Gill e Filhos" 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 e 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 |
COM current_period_task AS ( SELECIONAR DATE_TRUNC_STR(a.startDate,'mês') AS mês, CONTAGEM(1) AS current_period_task_count DE crm a ONDE a.tipo='atividade' E a.activityType = 'Tarefa' E DATE_PART_STR(a.startDate,'ano') = 2018 GRUPO BY DATE_TRUNC_STR(a.startDate,'mês') ), last_period_task AS ( SELECIONAR x.mês, x.current_period_task_count, LAG(x.current_period_task_count) SOBRE ( ORDER BY x.mês) AS last_period_task_count DE current_period_task x ) SELECIONAR b.mês, b.current_period_task_count, REDONDA(((b.current_period_task_count - b.last_period_task_count ) / b.last_period_task_count),2) AS MoMChg DE 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 mês 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.