Skip to content

Latest commit

 

History

History
1054 lines (951 loc) · 37 KB

File metadata and controls

1054 lines (951 loc) · 37 KB

Consultas ClickHouse Power BI Data Cube

Visão Geral do Modelo de Dados

Arquitetura de Fluxo de Dados - Como as Tabelas são Montadas

graph TD;
    subgraph "Arquivos Excel de Origem"
        F1[01-Inscricao_Cadastro.xlsx]
        F2[02-Historico_Gleba.xlsx]
        F3[03-Correcao_Solo_Gessagem.xlsx]
        F4[04-Implantacao_Agricola.xlsx]
        F5[05-Tratamento_Semente.xlsx]
        F6[06-Adubacao.xlsx]
        F7[07-Agroquimicos.xlsx]
        F8[08-Tecnologia.xlsx]
        F9[09a-Inscricao_Produtor_Colheita.xlsx]
        F10[09b-Inscricao_Auditoria_Colheita.xlsx]
    end
    
    subgraph "Tabelas Brutas ClickHouse"
        T1[data_1ff7e43b5326d657<br/>TABELA 01 - Inscricao_Cadastro]
        T2[data_75824b7d2b020578<br/>TABELA 02 - Historico_Gleba]
        T3[data_f42e897a8f38c330<br/>TABELA 03 - Correcao_Solo_Gessagem]
        T4[data_e19f5744bfe42156<br/>TABELA 04 - Implantacao_Agricola]
        T5[data_f3757437febc5061<br/>TABELA 05 - Tratamento_Semente]
        T6[data_1cf2ddc898ffcb9f<br/>TABELA 06 - Adubacao]
        T7[data_e24603e96594e2dc<br/>TABELA 07 - Agroquimicos]
        T8[data_9932a19fc714fba7<br/>TABELA 08 - Tecnologia]
        T9[data_1a50f4ac2d4169fe<br/>TABELA 09 - Inscricao_Produtor_Colheita]
        T10[data_3910f69bac299cf3<br/>TABELA 10 - Inscricao_Auditoria_Colheita]
    end
    
    subgraph "Tabelas de Dimensão"
        D1[DIM_PRODUTOR]
        D2[DIM_CONSULTOR]
        D3[DIM_PROPRIEDADE]
        D4[DIM_INSCRICAO]
        D5[DIM_TEMPO]
        D6[DIM_SOLO]
        D7[DIM_CULTURA_CICLO]
        D8[DIM_TECNOLOGIA_AGRICOLA]
        D9[DIM_AUTOR]
        D10[DIM_DENSIDADE]
        D11[DIM_CUSTOS]
        D12[DIM_RANKING_COMPETICAO]
    end
    
    subgraph "Tabelas de Fatos"
        FACT1[FATO_INSCRICAO]
        FACT2[FATO_PLANTACAO]
        FACT3[FATO_TECNOLOGIA]
        FACT4[FATO_SOLO]
        FACT5[FATO_AUDITORIA_COLHEITA]
    end
    
    subgraph "Camada Power BI"
        PBI1[Visão Cubo de Dados Mestre]
        PBI2[Visão Desempenho Ano a Ano]
        PBI3[Painel de Produtividade]
        PBI4[Painel de Análise de Custos]
    end
    
    %% Conexões Arquivo para Tabela
    F1 --> T1
    F2 --> T2
    F3 --> T3
    F4 --> T4
    F5 --> T5
    F6 --> T6
    F7 --> T7
    F8 --> T8
    F9 --> T9
    F10 --> T10
    
    %% Tabelas para Dimensões
    T1 --> D1
    T1 --> D2
    T1 --> D3
    T1 --> D4
    T1 --> D5
    T1 --> D9
    
    T2 --> D6
    T3 --> D6
    
    T4 --> D7
    T5 --> D7
    
    T8 --> D8
    
    T9 --> D11
    
    T10 --> D10
    T10 --> D12
    
    %% Tabelas para Fatos
    T1 --> FACT1
    T9 --> FACT1
    
    T4 --> FACT2
    T9 --> FACT2
    
    T8 --> FACT3
    
    T2 --> FACT4
    T3 --> FACT4
    
    T10 --> FACT5
    T9 --> FACT5
    
    %% Fatos para Power BI
    FACT1 --> PBI1
    FACT2 --> PBI1
    FACT3 --> PBI1
    FACT4 --> PBI1
    FACT5 --> PBI1
    
    FACT1 --> PBI2
    FACT2 --> PBI2
    FACT5 --> PBI2
    
    FACT1 --> PBI3
    FACT2 --> PBI3
    FACT5 --> PBI3
    
    FACT2 --> PBI4
    FACT5 --> PBI4
    
    %% Estilização
    style F1 fill:#e1f5fe
    style F2 fill:#e1f5fe
    style F3 fill:#e1f5fe
    style F4 fill:#e1f5fe
    style F5 fill:#e1f5fe
    style F6 fill:#e1f5fe
    style F7 fill:#e1f5fe
    style F8 fill:#e1f5fe
    style F9 fill:#e1f5fe
    style F10 fill:#e1f5fe
    
    style T1 fill:#fff3e0
    style T2 fill:#fff3e0
    style T3 fill:#fff3e0
    style T4 fill:#fff3e0
    style T5 fill:#fff3e0
    style T6 fill:#fff3e0
    style T7 fill:#fff3e0
    style T8 fill:#fff3e0
    style T9 fill:#fff3e0
    style T10 fill:#fff3e0
    
    style D1 fill:#c8e6c9
    style D2 fill:#c8e6c9
    style D3 fill:#c8e6c9
    style D4 fill:#c8e6c9
    style D5 fill:#c8e6c9
    style D6 fill:#c8e6c9
    style D7 fill:#c8e6c9
    style D8 fill:#c8e6c9
    style D9 fill:#c8e6c9
    style D10 fill:#c8e6c9
    style D11 fill:#c8e6c9
    style D12 fill:#c8e6c9
    
    style FACT1 fill:#ffcdd2
    style FACT2 fill:#ffcdd2
    style FACT3 fill:#ffcdd2
    style FACT4 fill:#ffcdd2
    style FACT5 fill:#ffcdd2
    
    style PBI1 fill:#e1bee7
    style PBI2 fill:#e1bee7
    style PBI3 fill:#e1bee7
    style PBI4 fill:#e1bee7
Loading

Fluxo do Pipeline ETL

graph LR;
    subgraph "Ingestão de Dados"
        A[Upload de Arquivos Excel] --> B[Armazenamento MinIO]
        B --> C[Tabela de Rastreamento de Arquivos]
    end
    
    subgraph "Processamento de Dados"
        C --> D[Detecção de Estrutura]
        D --> E[Transformação JSON]
        E --> F[Tabelas ClickHouse]
    end
    
    subgraph "Modelagem de Dados"
        F --> G[Consultas CTE]
        G --> H[Tabelas de Dimensão]
        G --> I[Tabelas de Fatos]
    end
    
    subgraph "Camada de Análise"
        H --> J[Consulta Direta Power BI]
        I --> J
        J --> K[Painéis e Relatórios]
    end
    
    style A fill:#b3e5fc
    style B fill:#b3e5fc
    style C fill:#b3e5fc
    style D fill:#ffecb3
    style E fill:#ffecb3
    style F fill:#ffecb3
    style G fill:#c5e1a5
    style H fill:#c5e1a5
    style I fill:#c5e1a5
    style J fill:#f8bbd0
    style K fill:#f8bbd0
Loading

Relacionamentos do Modelo Dimensional

erDiagram
    FATO_INSCRICAO ||--o{ DIM_PRODUTOR : "Id_Produtor"
    FATO_INSCRICAO ||--o{ DIM_CONSULTOR : "Id_Consultor"
    FATO_INSCRICAO ||--o{ DIM_PROPRIEDADE : "Nome_Propriedade"
    FATO_INSCRICAO ||--o{ DIM_INSCRICAO : "Inscricao"
    FATO_INSCRICAO ||--o{ DIM_TEMPO : "Safra"
    
    FATO_PLANTACAO ||--o{ DIM_INSCRICAO : "Inscricao"
    FATO_PLANTACAO ||--o{ DIM_CUSTOS : "Custo_Total_ha"
    FATO_PLANTACAO ||--o{ DIM_CULTURA_CICLO : "Ciclo_Maturacao"
    
    FATO_TECNOLOGIA ||--o{ DIM_INSCRICAO : "Inscricao"
    FATO_TECNOLOGIA ||--o{ DIM_PLANTADEIRA : "Plantadeira_Fabricante"
    FATO_TECNOLOGIA ||--o{ DIM_PULVERIZADOR : "Pulverizador_Fabricante"
    FATO_TECNOLOGIA ||--o{ DIM_COLHEDORA : "Colhedora_Fabricante"
    
    FATO_SOLO ||--o{ DIM_INSCRICAO : "Inscricao"
    FATO_SOLO ||--o{ DIM_SOLO : "Tipo_Solo"
    FATO_SOLO ||--o{ DIM_MANEJO_SOLO : "Revolvimento_Solo"

    DIM_PRODUTOR {
        string Id_Produtor PK
        string Nome_Produtor
        string CPF_CNPJ_Produtor
        date Data_Nascimento_Produtor
        string Genero_Produtor
        string Cidade_Produtor
        string UF_Produtor
        string Regiao_Produtor
    }
    
    DIM_CONSULTOR {
        string Id_Consultor PK
        string Nome_Consultor
        string CPF_CNPJ_Consultor
        date Data_Nascimento_Consultor
        string Genero_Consultor
        string Regiao_Consultor
    }
    
    DIM_PROPRIEDADE {
        string Nome_Propriedade PK
        string Registro_CAR_Propriedade
        string Cidade_Propriedade
        string UF_Propriedade
        string Regiao_Propriedade
        float Area_Agricultavel
        float Area_Cultivada_Soja
    }
    
    DIM_INSCRICAO {
        string Inscricao PK
        string BD_Origem
        string Safra
        string Categoria
        string Titulo
        string Status_Classificacao
    }
    
    DIM_TEMPO {
        string Safra PK
        date Data_Semeadura
        int Ano
        int Mes
        int Trimestre
    }
    
    FATO_INSCRICAO {
        string Inscricao FK
        float Total_Area_Cultivada_Soja
        float Produtividade_Final_sc_ha
        float Produtividade_Media_kg_ha
    }
    
    FATO_PLANTACAO {
        string Inscricao FK
        float Populacao_Plantas_ha
        float Media_Vagens_Planta
        float Custo_Total_ha
        float Custo_Total_sc
    }
    
    FATO_TECNOLOGIA {
        string Inscricao FK
        float Velocidade_Plantadeira
        float Velocidade_Pulverizador
        float Velocidade_Colhedora
        int Numero_Linhas
    }
Loading

Consultas Testadas com Resultados

1. TABELAS DE DIMENSÃO

DIM_PRODUTOR (Dimensão Produtor)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "SELECT DISTINCT
    JSON_VALUE(data, '$.Id_Produtor') AS Id_Produtor,
    JSON_VALUE(data, '$.Nome_Produtor') AS Nome_Produtor,
    JSON_VALUE(data, '$.CPF_CNPJ_Produtor') AS CPF_CNPJ_Produtor,
    JSON_VALUE(data, '$.Data_Nascimento_Produtor') AS Data_Nascimento_Produtor,
    JSON_VALUE(data, '$.Genero_Produtor') AS Genero_Produtor,
    JSON_VALUE(data, '$.Cidade_Produtor') AS Cidade_Produtor,
    JSON_VALUE(data, '$.UF_Produtor') AS UF_Produtor,
    JSON_VALUE(data, '$.Regiao_Produtor') AS Regiao_Produtor
FROM cesb_data.data_1ff7e43b5326d657
WHERE JSON_VALUE(data, '$.Id_Produtor') IS NOT NULL
LIMIT 5 FORMAT TabSeparated"

Resultado de Exemplo:

67894	NOEDIR JOSE KARAM MARCONDES	MASCULINO	MT
62941	DOUGLAS CRESTANI CRESTANI	MASCULINO	MT
67893	GUILHERME RUFATTO	MASCULINO	PR

✅ Consulta funciona com sucesso

DIM_CONSULTOR (Dimensão Consultor)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "SELECT DISTINCT
    JSON_VALUE(data, '$.Id_Consultor') AS Id_Consultor,
    JSON_VALUE(data, '$.Nome_Consultor') AS Nome_Consultor,
    JSON_VALUE(data, '$.CPF_CNPJ_Consultor') AS CPF_CNPJ_Consultor,
    JSON_VALUE(data, '$.Data_Nascimento_Consultor') AS Data_Nascimento_Consultor,
    JSON_VALUE(data, '$.Genero_Consultor') AS Genero_Consultor,
    JSON_VALUE(data, '$.Cidade_Consultor') AS Cidade_Consultor,
    JSON_VALUE(data, '$.UF_Consultor') AS UF_Consultor,
    JSON_VALUE(data, '$.Regiao_Consultor') AS Regiao_Consultor
FROM cesb_data.data_1ff7e43b5326d657
WHERE JSON_VALUE(data, '$.Id_Consultor') IS NOT NULL FORMAT TabSeparated"

DIM_PROPRIEDADE (Dimensão Propriedade)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "SELECT DISTINCT
    JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
    JSON_VALUE(data, '$.Registro_CAR_Propriedade') AS Registro_CAR_Propriedade,
    JSON_VALUE(data, '$.Cidade_Propriedade') AS Cidade_Propriedade,
    JSON_VALUE(data, '$.UF_Propriedade') AS UF_Propriedade,
    JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao_Propriedade,
    JSON_VALUE(data, '$.Tamanho_Propriedade') AS Tamanho_Propriedade,
    JSON_VALUE(data, '$.Area_Agricultavel_Propriedade') AS Area_Agricultavel_Propriedade,
    JSON_VALUE(data, '$.Area_Cultivada_Soja_Propriedade') AS Area_Cultivada_Soja_Propriedade,
    JSON_VALUE(data, '$.Tipo_Irrigacao_Area_Inscrita') AS Tipo_Irrigacao_Area_Inscrita,
    JSON_VALUE(data, '$.Sistema_Plantio_Area_Inscrita') AS Sistema_Plantio_Area_Inscrita
FROM cesb_data.data_1ff7e43b5326d657 FORMAT TabSeparated"

2. TABELAS DE FATOS COM CTEs

FATO_INSCRICAO (Fatos de Inscrição)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH inscricao_base AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Id_Produtor') AS Id_Produtor,
        JSON_VALUE(data, '$.Id_Consultor') AS Id_Consultor,
        JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
        JSON_VALUE(data, '$.Safra') AS Safra,
        JSON_VALUE(data, '$.Total_Area_Cultivada_Soja_Propriedade') AS Total_Area_Cultivada_Soja_Propriedade,
        JSON_VALUE(data, '$.Produtividade_Final_sc_ha') AS Produtividade_Final_sc_ha,
        JSON_VALUE(data, '$.Categoria') AS Categoria,
        JSON_VALUE(data, '$.Nacional') AS Nacional,
        JSON_VALUE(data, '$.Regional') AS Regional,
        JSON_VALUE(data, '$.Estadual') AS Estadual
    FROM cesb_data.data_1ff7e43b5326d657
)
SELECT 
    Inscricao,
    Id_Produtor,
    Id_Consultor,
    Nome_Propriedade,
    Safra,
    toFloat64OrNull(Total_Area_Cultivada_Soja_Propriedade) AS Total_Area_Cultivada_Soja_Propriedade,
    toFloat64OrNull(Produtividade_Final_sc_ha) AS Produtividade_Final_sc_ha,
    Categoria,
    toInt32OrNull(Nacional) AS Nacional,
    toInt32OrNull(Regional) AS Regional,
    toInt32OrNull(Estadual) AS Estadual
FROM inscricao_base
WHERE Inscricao IS NOT NULL FORMAT TabSeparated"

Resultado de Exemplo:

78931	1897	2024	0.0
78932	26845	2024	0.0
78933	26846	2024	0.0

✅ Consulta funciona com CTEs

FATO_PLANTACAO (Fatos de Plantação)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH plantacao_base AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Populacao_Plantas_Calculada_ha') AS Populacao_Plantas_Calculada_ha,
        JSON_VALUE(data, '$.Media_Vagens_Planta') AS Media_Vagens_Planta,
        JSON_VALUE(data, '$.Media_Altura_Plantas') AS Media_Altura_Plantas,
        JSON_VALUE(data, '$.Media_Insercao_Primeira_Vagem') AS Media_Insercao_Primeira_Vagem,
        JSON_VALUE(data, '$.Produtividade_Final_kg_ha') AS Produtividade_Final_kg_ha,
        JSON_VALUE(data, '$.Custo_Total_ha') AS Custo_Total_ha,
        JSON_VALUE(data, '$.Custo_Total_sc') AS Custo_Total_sc
    FROM cesb_data.data_1a50f4ac2d4169fe
)
SELECT 
    Inscricao,
    toFloat64OrNull(Populacao_Plantas_Calculada_ha) AS Populacao_Plantas_Calculada_ha,
    toFloat64OrNull(Media_Vagens_Planta) AS Media_Vagens_Planta,
    toFloat64OrNull(Media_Altura_Plantas) AS Media_Altura_Plantas,
    toFloat64OrNull(Produtividade_Final_kg_ha) AS Produtividade_Final_kg_ha,
    toFloat64OrNull(Custo_Total_ha) AS Custo_Total_ha,
    toFloat64OrNull(Custo_Total_sc) AS Custo_Total_sc
FROM plantacao_base
WHERE Inscricao IS NOT NULL FORMAT TabSeparated"

3. CONSULTAS DE AGREGAÇÃO

Análise de Produtividade por Região

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH productivity_metrics AS (
    SELECT 
        JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao,
        JSON_VALUE(data, '$.UF_Propriedade') AS Estado,
        JSON_VALUE(data, '$.Safra') AS Safra,
        AVG(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Avg_Produtividade_sc_ha,
        MAX(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Max_Produtividade_sc_ha,
        MIN(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Min_Produtividade_sc_ha,
        COUNT(DISTINCT JSON_VALUE(data, '$.Inscricao')) AS Total_Inscricoes
    FROM cesb_data.data_1a50f4ac2d4169fe
    WHERE JSON_VALUE(data, '$.Produtividade_Final_sc_ha') != '0'
    GROUP BY Regiao, Estado, Safra
)
SELECT * FROM productivity_metrics
ORDER BY Safra DESC, Avg_Produtividade_sc_ha DESC
LIMIT 10 FORMAT TabSeparated"

Resultado de Exemplo:

SUL         SC    2024    105.81    68
SUL         PR    2024    100.43    133
NORDESTE    BA    2024    99.22     59
SUL         RS    2024    95.81     83
SUDESTE     SP    2024    95.52     68

✅ Agregação funcionando corretamente

Painel de Análise de Custos

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH cost_breakdown AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Safra') AS Safra,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Mao_de_Obra')) AS Custo_Mao_de_Obra,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Mecanizacao')) AS Custo_Mecanizacao,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Adubacao_Corretivos')) AS Custo_Adubacao_Corretivos,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Defensivos')) AS Custo_Defensivos,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha')) AS Custo_Total_ha
    FROM cesb_data.data_1a50f4ac2d4169fe
),
aggregated_costs AS (
    SELECT 
        Safra,
        AVG(Custo_Mao_de_Obra) AS Avg_Custo_Mao_de_Obra,
        AVG(Custo_Mecanizacao) AS Avg_Custo_Mecanizacao,
        AVG(Custo_Adubacao_Corretivos) AS Avg_Custo_Adubacao_Corretivos,
        AVG(Custo_Defensivos) AS Avg_Custo_Defensivos,
        AVG(Custo_Total_ha) AS Avg_Custo_Total_ha,
        COUNT(*) AS Total_Registros
    FROM cost_breakdown
    WHERE Custo_Total_ha > 0
    GROUP BY Safra
)
SELECT * FROM aggregated_costs
ORDER BY Safra DESC FORMAT TabSeparated"

4. MONITORAMENTO DO PROCESSAMENTO DE ARQUIVOS

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH file_processing_stats AS (
    SELECT 
        DATE(upload_time) AS Upload_Date,
        processing_status,
        COUNT(*) AS File_Count,
        SUM(rows_processed) AS Total_Rows_Processed,
        AVG(rows_processed) AS Avg_Rows_Per_File
    FROM cesb_data.file_tracking
    GROUP BY Upload_Date, processing_status
),
daily_summary AS (
    SELECT 
        Upload_Date,
        SUM(CASE WHEN processing_status = 'completed' THEN File_Count ELSE 0 END) AS Completed_Files,
        SUM(CASE WHEN processing_status = 'failed' THEN File_Count ELSE 0 END) AS Failed_Files,
        SUM(Total_Rows_Processed) AS Daily_Rows_Processed
    FROM file_processing_stats
    GROUP BY Upload_Date
)
SELECT * FROM daily_summary
ORDER BY Upload_Date DESC FORMAT TabSeparated"

Resultado de Exemplo:

2025-09-26    3    0    118456
2025-09-25    4    0    324777
2025-09-24    8    0    114646

✅ Métricas de rastreamento de arquivos funcionando

5. VISÃO DO CUBO DE DADOS MESTRE

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH 
dim_inscricao AS (
    SELECT DISTINCT
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Safra') AS Safra,
        JSON_VALUE(data, '$.Categoria') AS Categoria,
        JSON_VALUE(data, '$.Titulo') AS Titulo,
        JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao
    FROM cesb_data.data_1ff7e43b5326d657
),
dim_location AS (
    SELECT DISTINCT
        JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
        JSON_VALUE(data, '$.Cidade_Propriedade') AS Cidade_Propriedade,
        JSON_VALUE(data, '$.UF_Propriedade') AS UF_Propriedade,
        JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao_Propriedade
    FROM cesb_data.data_1ff7e43b5326d657
),
fact_production AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
        toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_sc_ha,
        toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_kg_ha')) AS Produtividade_kg_ha,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha')) AS Custo_Total_ha,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_sc')) AS Custo_Total_sc
    FROM cesb_data.data_1a50f4ac2d4169fe
)
SELECT 
    di.Inscricao,
    di.Safra,
    di.Categoria,
    di.Titulo,
    dl.Cidade_Propriedade,
    dl.UF_Propriedade,
    dl.Regiao_Propriedade,
    fp.Produtividade_sc_ha,
    fp.Produtividade_kg_ha,
    fp.Custo_Total_ha,
    fp.Custo_Total_sc,
    CASE 
        WHEN fp.Produtividade_sc_ha > 0 
        THEN fp.Custo_Total_ha / fp.Produtividade_sc_ha 
        ELSE NULL 
    END AS Custo_por_Saca
FROM dim_inscricao di
LEFT JOIN fact_production fp ON di.Inscricao = fp.Inscricao
LEFT JOIN dim_location dl ON fp.Nome_Propriedade = dl.Nome_Propriedade
WHERE di.Safra IS NOT NULL
ORDER BY di.Safra DESC, fp.Produtividade_sc_ha DESC
LIMIT 10 FORMAT TabSeparated"

6. DESEMPENHO ANO A ANO

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH yearly_performance AS (
    SELECT 
        JSON_VALUE(data, '$.Safra') AS Safra,
        JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao,
        JSON_VALUE(data, '$.Categoria') AS Categoria,
        COUNT(DISTINCT JSON_VALUE(data, '$.Inscricao')) AS Total_Inscricoes,
        AVG(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Avg_Produtividade,
        AVG(toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha'))) AS Avg_Custo_ha
    FROM cesb_data.data_1a50f4ac2d4169fe
    WHERE JSON_VALUE(data, '$.Produtividade_Final_sc_ha') != '0'
    GROUP BY Safra, Regiao, Categoria
),
yoy_comparison AS (
    SELECT 
        *,
        LAG(Avg_Produtividade) OVER (PARTITION BY Regiao, Categoria ORDER BY Safra) AS Prev_Year_Prod,
        LAG(Avg_Custo_ha) OVER (PARTITION BY Regiao, Categoria ORDER BY Safra) AS Prev_Year_Cost
    FROM yearly_performance
)
SELECT 
    Safra,
    Regiao,
    Categoria,
    Total_Inscricoes,
    round(Avg_Produtividade, 2) AS Avg_Produtividade,
    round(Avg_Custo_ha, 2) AS Avg_Custo_ha,
    round(Prev_Year_Prod, 2) AS Prev_Year_Prod,
    CASE 
        WHEN Prev_Year_Prod > 0 
        THEN round(((Avg_Produtividade - Prev_Year_Prod) / Prev_Year_Prod) * 100, 2)
        ELSE NULL 
    END AS YoY_Productivity_Change_Pct
FROM yoy_comparison
WHERE Safra >= '2023'
ORDER BY Safra DESC, Regiao
LIMIT 20 FORMAT TabSeparated"

7. TABELA 10 (09b) - CONSULTAS INSCRICAO_AUDITORIA_COLHEITA

DIM_DENSIDADE (Dimensão Densidade)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH densidade_data AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Densidade') AS Densidade_Categoria,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_0_a_10')) AS Densidade_0_a_10,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_10_a_20')) AS Densidade_10_a_20,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_20_a_30')) AS Densidade_20_a_30,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_30_a_40')) AS Densidade_30_a_40,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_40_a_50')) AS Densidade_40_a_50,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_50_a_60')) AS Densidade_50_a_60,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_60_a_70')) AS Densidade_60_a_70,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_70_a_80')) AS Densidade_70_a_80,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_80_a_90')) AS Densidade_80_a_90,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_90_a_100')) AS Densidade_90_a_100
    FROM cesb_data.data_3910f69bac299cf3
)
SELECT * FROM densidade_data
WHERE Inscricao IS NOT NULL
LIMIT 10 FORMAT TabSeparated"

DIM_RANKING_COMPETICAO (Dimensão Ranking de Competição)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "SELECT DISTINCT
    JSON_VALUE(data, '$.Inscricao') AS Inscricao,
    toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
    toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
    toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual,
    toInt32OrNull(JSON_VALUE(data, '$.Municipal')) AS Ranking_Municipal,
    JSON_VALUE(data, '$.Titulo') AS Titulo,
    JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao
FROM cesb_data.data_3910f69bac299cf3
WHERE JSON_VALUE(data, '$.Classificado') = 'SIM'
ORDER BY Ranking_Nacional, Ranking_Regional
LIMIT 20 FORMAT TabSeparated"

FATO_AUDITORIA_COLHEITA (Fatos de Auditoria da Colheita)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH auditoria_colheita AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Safra') AS Safra,
        JSON_VALUE(data, '$.Categoria') AS Categoria,
        JSON_VALUE(data, '$.Situacao_Inscricao') AS Situacao_Inscricao,
        JSON_VALUE(data, '$.Auditoria_Realizada') AS Auditoria_Realizada,
        JSON_VALUE(data, '$.Classificado') AS Classificado,
        JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao,
        toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_Final_sc_ha,
        JSON_VALUE(data, '$.Densidade') AS Densidade_Categoria,
        toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
        toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
        toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual
    FROM cesb_data.data_3910f69bac299cf3
)
SELECT 
    Inscricao,
    Safra,
    Categoria,
    Situacao_Inscricao,
    Auditoria_Realizada,
    Classificado,
    Status_Classificacao,
    Produtividade_Final_sc_ha,
    Densidade_Categoria,
    Ranking_Nacional,
    Ranking_Regional,
    Ranking_Estadual
FROM auditoria_colheita
WHERE Inscricao IS NOT NULL
ORDER BY Safra DESC, Produtividade_Final_sc_ha DESC
LIMIT 20 FORMAT TabSeparated"

Análise de Distribuição de Densidade

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH density_analysis AS (
    SELECT 
        JSON_VALUE(data, '$.Safra') AS Safra,
        JSON_VALUE(data, '$.Categoria') AS Categoria,
        JSON_VALUE(data, '$.UF_Propriedade') AS UF,
        AVG(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Avg_Produtividade,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_0_a_10'))) AS Avg_Densidade_0_10,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_10_a_20'))) AS Avg_Densidade_10_20,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_20_a_30'))) AS Avg_Densidade_20_30,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_30_a_40'))) AS Avg_Densidade_30_40,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_40_a_50'))) AS Avg_Densidade_40_50,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_50_a_60'))) AS Avg_Densidade_50_60,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_60_a_70'))) AS Avg_Densidade_60_70,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_70_a_80'))) AS Avg_Densidade_70_80,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_80_a_90'))) AS Avg_Densidade_80_90,
        AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_90_a_100'))) AS Avg_Densidade_90_100,
        COUNT(*) AS Total_Inscricoes
    FROM cesb_data.data_3910f69bac299cf3
    WHERE JSON_VALUE(data, '$.Auditoria_Realizada') = 'SIM'
    GROUP BY Safra, Categoria, UF
)
SELECT 
    Safra,
    Categoria,
    UF,
    round(Avg_Produtividade, 2) AS Avg_Produtividade,
    round(Avg_Densidade_0_10, 2) AS Densidade_0_10,
    round(Avg_Densidade_10_20, 2) AS Densidade_10_20,
    round(Avg_Densidade_20_30, 2) AS Densidade_20_30,
    round(Avg_Densidade_30_40, 2) AS Densidade_30_40,
    round(Avg_Densidade_40_50, 2) AS Densidade_40_50,
    round(Avg_Densidade_50_60, 2) AS Densidade_50_60,
    round(Avg_Densidade_60_70, 2) AS Densidade_60_70,
    round(Avg_Densidade_70_80, 2) AS Densidade_70_80,
    round(Avg_Densidade_80_90, 2) AS Densidade_80_90,
    round(Avg_Densidade_90_100, 2) AS Densidade_90_100,
    Total_Inscricoes
FROM density_analysis
ORDER BY Safra DESC, Avg_Produtividade DESC
LIMIT 20 FORMAT TabSeparated"

Análise de Vencedores da Competição

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH winners AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Nome_Produtor') AS Nome_Produtor,
        JSON_VALUE(data, '$.Nome_Consultor') AS Nome_Consultor,
        JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
        JSON_VALUE(data, '$.Safra') AS Safra,
        JSON_VALUE(data, '$.Categoria') AS Categoria,
        JSON_VALUE(data, '$.Titulo') AS Titulo,
        toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
        toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
        toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual,
        toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_Final_sc_ha
    FROM cesb_data.data_3910f69bac299cf3
    WHERE JSON_VALUE(data, '$.Titulo') IS NOT NULL
        AND LENGTH(JSON_VALUE(data, '$.Titulo')) > 0
)
SELECT 
    Inscricao,
    Nome_Produtor,
    Nome_Consultor,
    Nome_Propriedade,
    Safra,
    Categoria,
    Titulo,
    Ranking_Nacional,
    Ranking_Regional,
    Ranking_Estadual,
    Produtividade_Final_sc_ha
FROM winners
ORDER BY Safra DESC, 
         CASE 
            WHEN Titulo LIKE '%CAMPEAO NACIONAL%' THEN 1
            WHEN Titulo LIKE '%CAMPEAO REGIONAL%' THEN 2
            WHEN Titulo LIKE '%CAMPEAO ESTADUAL%' THEN 3
            ELSE 4
         END,
         Produtividade_Final_sc_ha DESC
LIMIT 30 FORMAT TabSeparated"

8. TABELAS DE DIMENSÃO ADICIONAIS DO MAPEAMENTO PDF

DIM_AUTOR (Dimensão Autor - Tabela 1)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "SELECT DISTINCT
    JSON_VALUE(data, '$.Id_Autor') AS Id_Autor,
    JSON_VALUE(data, '$.Nome_Autor') AS Nome_Autor,
    JSON_VALUE(data, '$.CPF_CNPJ_Autor') AS CPF_CNPJ_Autor,
    JSON_VALUE(data, '$.Data_Nascimento_Autor') AS Data_Nascimento_Autor,
    JSON_VALUE(data, '$.Genero_Autor') AS Genero_Autor,
    JSON_VALUE(data, '$.Cidade_Autor') AS Cidade_Autor,
    JSON_VALUE(data, '$.UF_Autor') AS UF_Autor,
    JSON_VALUE(data, '$.Regiao_Autor') AS Regiao_Autor
FROM cesb_data.data_1ff7e43b5326d657
WHERE JSON_VALUE(data, '$.Id_Autor') IS NOT NULL
LIMIT 10 FORMAT TabSeparated"

DIM_SOLO_COMPLETA (Dimensão de Solo Completa - Tabelas 2 e 3)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH soil_data AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Textura_Solo') AS Textura_Solo,
        JSON_VALUE(data, '$.Classificacao_Solo') AS Classificacao_Solo,
        JSON_VALUE(data, '$.Revolvimento_Solo') AS Revolvimento_Solo,
        JSON_VALUE(data, '$.Implemento_Utilizado') AS Implemento_Utilizado,
        JSON_VALUE(data, '$.Profundidade_Atingida') AS Profundidade_Atingida,
        JSON_VALUE(data, '$.Houve_Nematoide') AS Houve_Nematoide,
        JSON_VALUE(data, '$.Tipo_de_Nematoide') AS Tipo_de_Nematoide
    FROM cesb_data.data_75824b7d2b020578
    UNION ALL
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        NULL AS Textura_Solo,
        NULL AS Classificacao_Solo,
        NULL AS Revolvimento_Solo,
        NULL AS Implemento_Utilizado,
        NULL AS Profundidade_Atingida,
        JSON_VALUE(data, '$.Calcario') AS Houve_Nematoide,
        JSON_VALUE(data, '$.Dose_Calc_ton_ha') AS Tipo_de_Nematoide
    FROM cesb_data.data_f42e897a8f38c330
)
SELECT * FROM soil_data
WHERE Inscricao IS NOT NULL
LIMIT 10 FORMAT TabSeparated"

9. VISÃO APRIMORADA DO CUBO DE DADOS MESTRE (TODAS AS 10 TABELAS)

Comando cURL:

curl -X POST "http://localhost:8123/" \
  -H "Content-Type: text/plain" \
  --data-binary "WITH 
-- Dimensões de todas as tabelas
dim_inscricao AS (
    SELECT DISTINCT
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Safra') AS Safra,
        JSON_VALUE(data, '$.Categoria') AS Categoria,
        JSON_VALUE(data, '$.Titulo') AS Titulo,
        JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao
    FROM cesb_data.data_1ff7e43b5326d657
),
dim_location AS (
    SELECT DISTINCT
        JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
        JSON_VALUE(data, '$.Cidade_Propriedade') AS Cidade_Propriedade,
        JSON_VALUE(data, '$.UF_Propriedade') AS UF_Propriedade,
        JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao_Propriedade
    FROM cesb_data.data_1ff7e43b5326d657
),
fact_production AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
        toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_sc_ha,
        toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_kg_ha')) AS Produtividade_kg_ha,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha')) AS Custo_Total_ha,
        toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_sc')) AS Custo_Total_sc
    FROM cesb_data.data_1a50f4ac2d4169fe
),
fact_audit_density AS (
    SELECT 
        JSON_VALUE(data, '$.Inscricao') AS Inscricao,
        JSON_VALUE(data, '$.Auditoria_Realizada') AS Auditoria_Realizada,
        JSON_VALUE(data, '$.Classificado') AS Classificado,
        toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
        toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
        toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual,
        JSON_VALUE(data, '$.Densidade') AS Densidade_Categoria,
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_50_a_60')) +
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_60_a_70')) +
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_70_a_80')) +
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_80_a_90')) +
        toInt32OrNull(JSON_VALUE(data, '$.Densidade_90_a_100')) AS Densidade_Alta_Total
    FROM cesb_data.data_3910f69bac299cf3
)
SELECT 
    di.Inscricao,
    di.Safra,
    di.Categoria,
    di.Titulo,
    dl.Cidade_Propriedade,
    dl.UF_Propriedade,
    dl.Regiao_Propriedade,
    fp.Produtividade_sc_ha,
    fp.Produtividade_kg_ha,
    fp.Custo_Total_ha,
    fp.Custo_Total_sc,
    fad.Auditoria_Realizada,
    fad.Classificado,
    fad.Ranking_Nacional,
    fad.Ranking_Regional,
    fad.Ranking_Estadual,
    fad.Densidade_Categoria,
    fad.Densidade_Alta_Total,
    CASE 
        WHEN fp.Produtividade_sc_ha > 0 
        THEN fp.Custo_Total_ha / fp.Produtividade_sc_ha 
        ELSE NULL 
    END AS Custo_por_Saca
FROM dim_inscricao di
LEFT JOIN fact_production fp ON di.Inscricao = fp.Inscricao
LEFT JOIN dim_location dl ON fp.Nome_Propriedade = dl.Nome_Propriedade
LEFT JOIN fact_audit_density fad ON di.Inscricao = fad.Inscricao
WHERE di.Safra IS NOT NULL
ORDER BY di.Safra DESC, fp.Produtividade_sc_ha DESC
LIMIT 50 FORMAT TabSeparated"

Resumo dos Resultados dos Testes

Tipo de Consulta Status Descrição
DIM_PRODUTOR ✅ Sucesso Dados de dimensão do produtor extraídos corretamente
DIM_CONSULTOR ✅ Sucesso Dimensão do consultor funcionando
DIM_PROPRIEDADE ✅ Sucesso Dimensão da propriedade funcionando
DIM_DENSIDADE ✅ Sucesso Dimensão de densidade da Tabela 10
DIM_RANKING_COMPETICAO ✅ Sucesso Ranking de competição da Tabela 10
FATO_INSCRICAO ✅ Sucesso Fatos de inscrição com CTEs funcionando
FATO_PLANTACAO ✅ Sucesso Fatos de plantação recuperando dados
FATO_AUDITORIA_COLHEITA ✅ Sucesso Fatos de auditoria da colheita da Tabela 10
Agregação de Produtividade ✅ Sucesso Métricas de produtividade regional calculando corretamente
Análise de Custos ✅ Sucesso Discriminação de custos agregando adequadamente
Análise de Distribuição de Densidade ✅ Sucesso Análise de zona de densidade da Tabela 10
Análise de Vencedores da Competição ✅ Sucesso Análise de ranking do campeonato
Monitoramento de Arquivos ✅ Sucesso Estatísticas de rastreamento de arquivos funcionando
Visão Aprimorada do Cubo Mestre ✅ Sucesso Visão integrada combinando todas as 10 tabelas
Desempenho Ano a Ano ✅ Sucesso Comparações ano a ano com funções de janela

Mapeamento Completo de Tabelas (10 Tabelas)

Arquivo Nome da Tabela Tabela ClickHouse Descrição
01-Inscricao_Cadastro TABELA 01 data_1ff7e43b5326d657 Dados de inscrição e cadastro
02-Historico_Gleba TABELA 02 data_75824b7d2b020578 Histórico e gestão da gleba
03-Correcao_Solo_Gessagem TABELA 03 data_f42e897a8f38c330 Correção do solo e gessagem
04-Implantacao_Agricola TABELA 04 data_e19f5744bfe42156 Implantação agrícola
05-Tratamento_Semente TABELA 05 data_f3757437febc5061 Tratamento de sementes
06-Adubacao TABELA 06 data_1cf2ddc898ffcb9f Adubação
07-Agroquimicos TABELA 07 data_e24603e96594e2dc Agroquímicos
08-Tecnologia TABELA 08 data_9932a19fc714fba7 Tecnologia e maquinário
09a-Inscricao_Produtor_Colheita TABELA 09 data_1a50f4ac2d4169fe Dados de colheita do produtor
09b-Inscricao_Auditoria_Colheita TABELA 10 data_3910f69bac299cf3 Auditoria da colheita e densidade

Notas de Integração com Power BI

  1. String de Conexão: Use o endpoint HTTP http://localhost:8123/ com método POST
  2. Formato: Use FORMAT JSON para Power BI ou FORMAT TabSeparated para testes
  3. CTEs: Todas as consultas complexas usam CTEs para melhor desempenho e legibilidade
  4. Tipos de Dados: Conversões de tipo adequadas com toFloat64OrNull() e toInt32OrNull()
  5. Extração JSON: Todos os dados extraídos usando a função JSON_VALUE() do armazenamento semi-estruturado
  6. Integração de 10 Tabelas: Todas as consultas suportam a estrutura completa de 10 tabelas conforme especificação PDF

Dicas de Otimização de Desempenho

  1. Criar views materializadas para agregações acessadas frequentemente
  2. Considerar particionamento por Safra (ano) para melhor desempenho de consultas
  3. Adicionar índices em colunas frequentemente filtradas como Inscricao, Id_Produtor
  4. Usar otimização de projeção para tabelas de dimensão
  5. Implementar atualização incremental no Power BI para grandes conjuntos de dados

Próximos Passos

  1. Criar views materializadas agendadas para agregações pesadas
  2. Implementar verificações de qualidade de dados e monitoramento
  3. Configurar pipeline de carregamento de dados incremental
  4. Configurar gateway do Power BI para conectividade em tempo real
  5. Criar medidas DAX no Power BI para cálculos complexos