Dados Internos Dexco
Conjunto de notebooks que tem como objetivo fazer a ingestão de dados e indicadores de diversas áreas da Dexco e disponibilizar da forma mais automatizada possível para serem consumidos pelo dashboard desenvolvido para o projeto.
Índice
1. Indicadores Carteira Deca
Indicadores para pedidos em carteira Deca.
Notebook: indicadores_carteira_deca
Job: inteligencia-mercado_job_prod_indicadores_carteira_deca
Schedule: diário/18:00h
Base fim: indicadores_mercado.tb_indicadores_carteira_deca
1.1 Origem:
Database DEV do Redshift (dtx-deca-sellin.czcbob9woqfg.us-east-1.redshift.amazonaws.com), schema small e tabela tb_ordem_pendente.
1.2 Transformação:
Fazendo uma query com um select de todos os campos da tabela origem:
query = "select * from small.tb_ordem_pendente"
multiple_run_parameters = dbutils.notebook.entry_point.getCurrentBindings()
bucket_name = multiple_run_parameters["bucket_name"]
pedidos_carteira = redshift_to_dataframe(query = query, filename = "tb_ordem_pendente", bucket_name = bucket_name)
Renomeando as colunas:
colunas_pedidos_carteira = ["codigo_empresa", "numero_ordem_venda", "numero_sequencia_item_ordem_venda", "codigo_organizacao_vendas", "codigo_canal_distribuicao", "codigo_setor_atividade", "codigo_escritorio_vendas", "codigo_equipe_vendas", "codigo_emissor_ordem", "data_primeira_remessa", "data_emissao", "data_pedido_cliente", "motivo_recusa", "tipo_documento_ordem_venda", "quantidade_itens", "quantidade_faturada_ordem", "quantidade_pendente", "valor_liquido", "valor_faturado_ordem", "valor_pendente", "status_faturamento", "bloqueio_remessa_cliente", "status_verificacao_credito", "status_carteira", "codigo_produto", "descricao_produto", "data_atualizacao", "remessa", "data_desejada_remessa", "status_recusa", "status_item", "codigo_centro"]
df_pedidos_carteira = pedidos_carteira.toDF(*colunas_pedidos_carteira)
Utilizando Spark SQL para fazer alguns ajustes e aplicar algumas regras de negócio:
df_carteira = spark.sql("""
select
to_date(data_atualizacao) as data_referencia,
(case when codigo_setor_atividade == 'HY' then 'hydra'
when codigo_setor_atividade == 'MS' then 'metais'
when codigo_setor_atividade == 'CS' then 'loucas' end) as negocio,
sum(case when status_carteira in('Bloqueio Adm.', 'Credito', 'Limbo', 'Limbo Programado', 'Não classificado') then valor_pendente else 0 end) as valor_bloqueado,
sum(case when status_carteira in('Programado', 'Remetido') then valor_pendente else 0 end) as valor_livre
from pedidos_carteira
where to_date(data_atualizacao) == current_date()
and codigo_setor_atividade in('CS', 'HY', 'MS')
group by 1, 2
""")
Fazendo append na tabela final na database indicadores_mercado:
1.3 Base Final:
col_name | data_type |
---|---|
data_referencia | date |
negocio | string |
valor_bloqueado | double |
valor_livre | double |
2. Indicadores Devolução Deca
Indicadores para pedidos em status de devolução para Deca.
Notebook: indicadores_devolucao_deca
Job: inteligencia-mercado_job_prod_indicadores_devolucao_deca
Schedule: diário/14:00h
Base fim: indicadores_mercado.tb_indicadores_devolucoes_deca
2.1 Origem:
Database large e tabela tb_resultado_comercial.
2.2 Transformação:
Utilizando o Spark SQL para query da tabela origem já aplicando regras de negócio:
Calculando o valor de devolução ajustado, conforme regra de negócio:
Sobrescrevendo a tabela final na database indicadores_mercado:
2.3 Base Final:
col_name | data_type |
---|---|
mes | date |
negocio | string |
valor_faturamento | double |
valor_devolucao | double |
3. Indicadores Devolução Madeira
Indicadores para pedidos em status de devolução para Madeira.
Notebook: indicadores_devolucao_madeira
Job: inteligencia-mercado_job_prod_indicadores_devolucao_madeira
Schedule: diário/12:00h
Base fim: indicadores_mercado.tb_indicadores_devolucoes_madeira
3.1 Origem:
Database analytics_prd e tabela custos_rem.
3.2 Transformação:
Utilizando o Spark SQL para query da tabela origem já aplicando regras de negócio:
Sobrescrevendo a tabela final na database indicadores_mercado:
3.3 Base Final:
col_name | data_type |
---|---|
mes | date |
negocio | string |
valor_faturamento | decimal(29,2) |
valor_devolucao | decimal(29,2) |
4. Indicadores Financeiros
Indicadores financeiros disponibilizados pela Controladoria.
Notebook: indicadores_financeiros
Job: inteligencia-mercado_job_prod_indicadores_financeiros
Schedule: diário/15:00h
Base fim: indicadores_mercado.tb_indicadores_financeiros_2022
4.1 Origem:
A Controladoria atualiza mensalmente alguns arquivos Excel disponibilizados em no Sharepoint Relatório Controladoria.
4.2 Transformação:
Foi desenvolvida uma função para fazer o download desses arquivos e gravar no diretório do dbfs:
Fazendo o download dos arquivos:
4.2.1 Arquivo Fechamento_Gerencial_2022.xlsm
4.2.1.1 Indicadores do DRE
Definindo função para Indicadores do DRE:
Aplicando a função para cada negócio, passando o parâmetro de range de células onde se encontram os dados:
Fazendo união de todos os dataframes gerados:
4.2.1.2 Indicadores do EVA
Definindo função para Indicadores do EVA, lendo a sheet EVA do arquivo:
Aplicando a função para cada negócio, passando o parâmetro de range de células onde se encontram os dados:
Fazendo união de todos os dataframes gerados e ajustando a ordem de grandeza do campo eva_recorrente:
4.2.2 Arquivo Fluxo_de_Caixa_Oficial_2022.xlsx
4.2.2.1 Indicadores de Fluxo de Caixa
Definindo função para Indicadores de Fluxo de Caixa, lendo a sheet F.C. REAL do arquivo:
Aplicando a função para cada negócio, passando o parâmetro de range de células onde se encontram os dados:
Fazendo união de todos os dataframes gerados:
4.2.2.2 Indicadores de PMP
Definindo função para Indicadores de PMP, lendo a sheet CGL.ROL do arquivo:
Aplicando a função para cada negócio, passando o parâmetro de range de células onde se encontram os dados:
Fazendo união de todos os dataframes gerados:
4.2.3 Arquivo Forecast_3_9_2022.xlsx
4.2.3.1 Indicadores de Forecast
Definindo função para Indicadores de Forecast:
Aplicando a função para cada negócio, passando o parâmetro de range de células onde se encontram os dados:
Fazendo união de todos os dataframes gerados:
4.2.3.2 Indicadores de Forecast EVA
Definindo função para Indicadores de Forecast EVA, lendo a sheet Base EVA ROIC:
Aplicando a função para cada negócio, passando o parâmetro de range de células onde se encontram os dados:
Fazendo união de todos os dataframes gerados e ajustando a ordem de grandeza do campo frc_eva_recorrente:
4.2.4 Arquivo FCST_2_10___Fluxo_de_Caixa_Livre_2022.xlsx
4.2.4.1 Indicadores Forecast Fluxo de Caixa
Definindo função para Indicadores de Forecast fluxo de Caixa, lendo a sheet F.C. FCST:
Aplicando a função para cada negócio, passando o parâmetro de range de células onde se encontram os dados:
Fazendo união de todos os dataframes gerados:
4.2.5 Arquivo indicadores_poa_2022.csv
Foi feito o upload desse arquivo diretamente no dbfs do Databricks:
Tratando alguns tipos de campos e ajustando a ordem de grandeza de outro:
4.2.6 Base Final
Todos os dataframes gerados nos passos anteriores agora são unidos para formar um único, utilizando os campos mes e negocio:
Sobrescrevendo a tabela final no database :
4.3 Base Final:
col_name | data_type |
---|---|
mes | date |
negocio | string |
receita_liquida_vendas | double |
ebitda_recorrente | double |
eva_recorrente | double |
fluxo_caixa_livre_total | double |
pmp | double |
frc_receita_liquida_vendas | double |
frc_ebitda_recorrente | double |
frc_eva_recorrente | double |
frc_fluxo_caixa_livre_total | double |
poa_receita_liquida_vendas | double |
poa_ebitda_recorrente | double |
poa_eva_recorrente | double |
poa_fluxo_caixa_livre_total | double |
5. Indicadores Gente
Indicadores de Recursos Humanos.
Notebook: indicadores_gente
Job: inteligencia-mercado_job_prod_indicadores_gente
Schedule: sextas-feiras, 14:00h
Base fim: indicadores_mercado.tb_indicadores_gente
5.1 Origem:
O arquivo indicadores_gente.csv é disponibilizado e atualizado mensalmente no Sharepoint.
5.2 Transformação:
Definindo função para o download do arquivo para o dbfs:
Lendo o arquivo:
Aplicando regra de negócio para o campo taxa_afastamento:
Sobrescrevendo a tabela final na database indicadores_mercado:
5.3 Base Final:
col_name | data_type |
---|---|
mes | date |
negocio | string |
quantidade_cargos_lideranca_mulheres | int |
quantidade_cargos_lideranca_total | int |
taxa_desligamentos_voluntarios | double |
taxa_desligamentos_involuntarios | double |
taxa_desligamentos_total | double |
taxa_absenteismo_sem_afastamento | double |
taxa_absenteismo_com_afastamento | double |
taxa_afastamento | double |
7. Indicadores Margem Madeira
Indicadores de Margem para Madeira.
Notebook: indicadores_margem_madeira
Job: inteligencia-mercado_job_prod_indicadores_margem_madeira
Schedule: diário/14:22h
Base fim: indicadores_mercado.tb_indicadores_margem_madeira
7.1 Origem:
É feita uma consulta na fonte de dados vw_ren_rateio_aj_SQL, no site Madeira do Tableau Server:
7.2 Transformação:
São utilizadas as bibliotecas tableauserverclient e tableauhyperapi do Python:
Definindo variáveis para conexão no Tableau Server:
Definindo parâmetros da conexão com o Tableau Server:
Fazendo o download do arquivo .tdsx:
O arquivo de extensão .tdsx nada mais é que uma compactação dos arquivos de fonte de dados do Tableau. Portanto foi utilizada a biblioteca zipfile do Python para fazer essa descompactação em diretório do dbfs:
Após a descompactação, é utilizada a biblioteca tableauhyperapi para extrair os dados do arquivo .hyper, que foi descompactado no diretório /dbfs/FileStore/shared_uploads/arquivos_diversos_cognitivo/Data/Extracts/ no processo anterior. É feita uma query para trazer apenas os campos necessários:
Definindo schema para o dataframe que será criado a partir da lista resultado_consulta:
Criando o dataframe:
Utilizando o Spark SQL para aplicar algumas regras de negócio:
Aplicando mais algumas regras de negócio:
Sobrescrevendo a tabela final na database indicadores_mercado:
7.3 Base Final:
col_name | data_type |
---|---|
mes | string |
produto | string |
receita_m3 | double |
cit_m3 | double |
cco_m3 | double |
mop_m3 | double |
9. Indicadores OEE Madeira
Indicadores de OEE para Madeira.
Notebook: indicadores_oee_madeira
Job: inteligencia-mercado_job_prod_indicadores_oee_madeira
Schedule: diário/12:00h
Base fim: indicadores_mercado.tb_indicadores_oee_madeira
9.1 Origem:
O arquivo indicadores_oee_madeira.xlsx é disponibilizado e atualizado mensalmente no Sharepoint.
9.2 Transformação:
Definindo função para ler o arquivo:
Lendo a sheet cru do arquivo, definindo os parâmetros de range de células, nome das células e quantidade de linhas a serem desconsideradas. Utilizando o while e a função isinstance() para repetir o processo até que o dataframe esteja criado:
Definindo o nome do produto como constante:
Lendo a sheet revestido do arquivo, definindo os parâmetros de range de células, nome das células e quantidade de linhas a serem desconsideradas:
Definindo o nome do produto como constante:
Lendo a sheet historico do arquivo, definindo os parâmetros de range de células, nome das células e quantidade de linhas a serem desconsideradas:
Fazendo a união de todos os dataframes criados:
Sobrescrevendo a tabela final na database indicadores_mercado:
9.3 Base Final:
col_name | data_type |
---|---|
mes | date |
oee | double |
oee_meta_global | double |
produto | string |
10. Indicadores OTIF Deca
Indicadores de OTIF para Deca.
Notebook: indicadores_otif_deca
Job: inteligencia-mercado_job_prod_indicadores_otif_deca
Schedule: diário/12:00h
Base fim: indicadores_mercado.tb_indicadores_otif_deca
10.1 Origem:
O arquivo dados_otif_deca.csv é disponibilizado e atualizado mensalmente no Sharepoint.
10.2 Transformação:
Definindo função para fazer o download do arquivo em diretório do dbfs:
Lendo arquivo:
Sobrescrevendo a tabela final na database indicadores_mercado:
10.3 Base Final:
col_name | data_type |
---|---|
mes | date |
segmento_deca | string |
otif_deca | double |
meta_otif_deca | double |
11. Indicadores OTIF Madeira
Indicadores de OTIF para Madeira.
Notebook: indicadores_otif_madeira
Job: inteligencia-mercado_job_prod_indicadores_otif_madeira
Schedule: diário/12:00h
Base fim: indicadores_mercado.tb_indicadores_otif_madeira
11.1 Origem:
O arquivo dados_otif_madeira.csv é disponibilizado e atualizado mensalmente no Sharepoint.
11.2 Transformação:
Definindo função para fazer o download do arquivo em diretório do dbfs:
Lendo arquivo:
Sobrescrevendo a tabela final na database indicadores_mercado:
11.3 Base Final:
col_name | data_type |
---|---|
mes | date |
segmento_madeira | string |
otif_madeira | double |
meta_otif_madeira | double |
12. Indicadores Panorama Mercado Madeira
Indicadores de Panorama de Mercado para Madeira.
Notebook: indicadores_panorama_mercado_madeira
Job: inteligencia-mercado_job_prod_indicadores_panorama_mercado_madeira
Schedule: diário/13:00h
Base fim: indicadores_mercado.tb_indicadores_panorama_mercado_madeira
12.1 Origem:
Database DEV do Redshift (dtx-deca-sellin.czcbob9woqfg.us-east-1.redshift.amazonaws.com), schema madeira e tabela vw_mercado_panorama_v2.
12.2 Transformação:
É feita uma query da tabela já aplicando algumas regras de negócio:
Renomeando campos:
Ajustando campo mes:
Sobrescrevendo a tabela final na database indicadores_mercado:
12.3 Base Final:
col_name | data_type |
---|---|
mes | date |
mercado | string |
produto | string |
volume_m3_total | double |
13. Indicadores Produtividade Deca
Indicadores de Produtividade para Deca.
Notebook: indicadores_produtividade_deca
Job: inteligencia-mercado_job_prod_indicadores_produtividade_deca
Schedule: diário/12:00h
Base fim: indicadores_mercado.tb_indicadores_minuto_homem_deca
13.1 Origem:
O arquivo Produtividade DECA&RC.xlsx é disponibilizado e atualizado mensalmente no Sharepoint.
13.2 Transformação:
Definindo função para fazer o download do arquivo para diretório do dbfs:
Fazendo o download do arquivo:
Lendo o arquivo:
Definindo função para ler os dados dos diferentes segmentos Deca. Passando os parâmetros de negócio, range de células, quantidade de linhas desconsideradas e quantidade de linhas consideradas, a função gera dois dataframes, um para produtividade e outro para POA. Isso é feito através de filtro na coluna: quando é diferente de POA, então é produtividade.
Aplicando função para metais, já definindo os parâmetros de range de células, quantidade de linhas ignoradas e quantidade de linhas consideradas:
Aplicando função para loucas:
Aplicando função para Hydra:
Aplicando função para revestimento:
Fazendo a união de todos os dataframes criados:
Sobrescrevendo a tabela final na database indicadores_mercado:
13.3 Base Final:
col_name | data_type |
---|---|
mes | date |
segmento | string |
poa_produtividade | double |
produtividade | double |
14. Indicadores SAC
Indicadores de SAC.
Notebook: indicadores_sac
Job: inteligencia-mercado_job_prod_indicadores_sac
Schedule: diário/12:00h
Base fim: indicadores_mercado.tb_indicadores_sac
14.1 Origem:
O arquivo dados_sac.csv é disponibilizado e atualizado mensalmente no Sharepoint.
14.2 Transformação:
Definindo função para fazer o download do arquivo em diretório do dbfs:
Lendo arquivo:
Aplicando regra de negócio para o campo saldo:
Sobrescrevendo a tabela final na database indicadores_mercado:
14.3 Base Final:
col_name | data_type |
---|---|
mes | date |
visao | string |
negocio | string |
casos_abertos | int |
casos_fechados | int |
saldo | int |
15. Indicadores Sell-in Deca - Chuveiros
Indicadores de Sell-in para Deca.
Notebook: indicadores_sell_in_deca_chuveiros
Base fim: indicadores_mercado.tb_indicadores_sell_in_deca_chuveiros
15.1 Origem:
O arquivo foi disponibilizado e foi feito seu upload direto no dbfs do Databricks. Motivo é que esses dados não são atualizáveis. Diretório de upload: /dbfs/FileStore/shared_uploads/arquivos_diversos_cognitivo/sell_in_deca_chuveiros.xlsx.
15.2 Transformação:
Lendo sheet do arquivo:
Renomeando colunas:
Tratando os valores missing:
Transformando em dataframe do Spark:
Sobrescrevendo a tabela final na database indicadores_mercado:
15.3 Base Final:
col_name | data_type |
---|---|
marca | string |
canal_abastecimento | string |
regiao | string |
macro_categoria | string |
material | string |
tipo | string |
sku | string |
meses | timestamp |
desviador | string |
linha | string |
tensao | string |
potencia | string |
modelo | string |
ean | string |
valor | double |
volume | double |
16. Indicadores Sell-in Deca - Cubas
Indicadores de Sell-in para Deca.
Notebook: indicadores_sell_in_deca_cubas
Base fim: indicadores_mercado.tb_indicadores_sell_in_deca_cubas
16.1 Origem:
O arquivo foi disponibilizado e foi feito seu upload direto no dbfs do Databricks. Motivo é que esses dados não são atualizáveis. Diretório de upload: /dbfs/FileStore/shared_uploads/arquivos_diversos_cognitivo/sell_in_deca_cubas.xlsx.
16.2 Transformação:
Lendo sheet do arquivo:
Renomeando colunas:
Tratando os valores missing:
Transformando em dataframe do Spark:
Sobrescrevendo a tabela final na database indicadores_mercado:
16.3 Base Final:
col_name | data_type |
---|---|
marca | string |
canal_abastecimento | string |
regiao | string |
macro_categoria | string |
material | string |
aplicacao | string |
instalacao | string |
sku | string |
meses | timestamp |
formato | string |
cor | string |
acabamento | string |
ean | string |
valor | double |
volume | double |
17. Indicadores Sell-in Deca - Torneiras
Indicadores de Sell-in para Deca.
Notebook: indicadores_sell_in_deca_torneiras
Base fim: indicadores_mercado.tb_indicadores_sell_in_deca_torneiras
17.1 Origem:
O arquivo foi disponibilizado e foi feito seu upload direto no dbfs do Databricks. Motivo é que esses dados não são atualizáveis. Diretório de upload: /dbfs/FileStore/shared_uploads/arquivos_diversos_cognitivo/sell_in_deca_torneiras.xlsx.
17.2 Transformação:
Lendo sheet do arquivo:
Renomeando colunas:
Tratando os valores missing:
Transformando em dataframe do Spark:
Sobrescrevendo a tabela final na database indicadores_mercado:
17.3 Base Final:
col_name | data_type |
---|---|
marca | string |
canal_abastecimento | string |
regiao | string |
macro_categoria | string |
material | string |
subcategoria | string |
aplicacao | string |
instalacao | string |
sku | string |
meses | timestamp |
bica | string |
linha | string |
tensao | string |
potencia | string |
modelo | string |
ean | string |
valor | double |
volume | double |
18. Indicadores Market Share, Sell-in e Sell-out Madeira
Indicadores para Market Share, Sell-in e Sell-out de Madeira.
Notebook: indicadores_share_sell_in_sell_out_madeira
Job: inteligencia-mercado_job_prod_indicadores_share_sell_in_sell_out_madeira
Schedule: diário/12:00h
Base fim: indicadores_mercado.tb_indicadores_share_sell_in_sell_out_madeira
18.1 Origem:
Database DEV do Redshift (dtx-deca-sellin.czcbob9woqfg.us-east-1.redshift.amazonaws.com), schema madeira e view vw_base_mktshare_sellin_sellout.
18.2 Transformação:
Fazendo uma query com um select de todos os campos da tabela origem:
Renomeando as colunas:
Ajustando tipos dos campos:
Sobrescrevendo a tabela final na database indicadores_mercado:
18.3 Base Final:
col_name | data_type |
---|---|
tipo | string |
ano | int |
competencia | int |
mercado | string |
produto | string |
produto_detalhe | string |
volume_m3 | double |
volume_m2 | double |
volume_m3_cap_dtx | double |
volume_m3_cap_mercex | double |
data_atualizacao_base | date |
produto_segmento | string |
quantidade_volume_m3_liquido | double |
quantidade_volume_m2 | double |
19. Indicadores Vendas Deca
Indicadores para Vendas de Deca.
Notebook: indicadores_venda_deca
Job: inteligencia-mercado_job_prod_indicadores_venda_deca
Schedule: diário/10:00h
Base fim: indicadores_mercado.tb_indicadores_vendas_deca
19.1 Origem:
Consulta da tabela tb_resultado_comercial da database large e consulta database DEV do Redshift (dtx-deca-sellin.czcbob9woqfg.us-east-1.redshift.amazonaws.com), schema large e tabela tb_metas_comercial_hierarquia_produto.
19.2 Transformação:
Definindo função para criação de dataframe com range de datas, desde 01/01/2022 até hoje.
Sobrescrevendo a tabela de datas na database indicadores_mercado, para ser utilizada em outra etapa do processo:
Fazendo consulta para vendas na large, já aplicando algumas regras de negócio:
Fazendo join entre o dataframe de datas e o de vendas, com o objetivo de agregar todos os dias do range na base, mesmo que sem registro de vendas:
Definindo um particionamento no dataframe df_vendas_ajustado, com o objetivo de posteriormente fazer uma soma acumuladas das vendas agrupada por negócio e mês:
Criando campo com soma acumulada, utilizando a partição criada anteriormente:
Criando campo com soma acumulada, utilizando a partição criada anteriormente:
Sobrescrevendo a tabela de datas na database indicadores_mercado, para ser utilizada em outra etapa do processo:
Então, é feita uma query, já aplicando algumas regras de negócio, na large do Redshift, com o objetivo de obter as metas:
Renomeando colunas:
Próximo passo é definir uma função para cálculo de quantidade de dias dentro de cada mês, com o objetivo de posteriormente calcular a meta diárias através da mensal:
Aplicando a função e calculando a meta diária:
Sobrescrevendo a tabela de datas na database indicadores_mercado, para ser utilizada em outra etapa do processo:
Criando colunas para cada tipo de meta, PEV e POA:
Criando dataframe unindo as duas metas:
Fazendo join entre a base de datas e a de metas:
Por fim, criando a tabela final. Fazendo query na database para vendas e join com o dataframe de metas:
Criando particionamento, para posteriormente calcular as metas acumuladas por mês e negócio:
Criando as metas acumuladas utilizando o particionamento:
Sobrescrevendo a tabela final na database indicadores_mercado:
19.3 Base Final:
col_name | data_type |
---|---|
data | date |
mes | date |
negocio | string |
receita_liquida_vendas | double |
receita_liquida_vendas_acumuladas | double |
valor_meta_diaria_pev | double |
valor_meta_diaria_poa | double |
metas_acumuladas_pev | double |
metas_acumuladas_poa | double |