Ir para o conteúdo

Relacionamentos

O arquivo relationships.tmdl define os relacionamentos do modelo semântico. A estrutura geral conecta tabelas de fato a dimensões de fazenda, unidade, usuário, calendário, status, proposta, processamento e tile.

Diagrama ER Simplificado

Este diagrama apresenta uma leitura mais próxima de um DER: tabelas com campos-chave e cardinalidade entre fatos, dimensões e tabelas estatísticas. Ele não substitui o modelo completo do Power BI, mas facilita a leitura documental.

erDiagram
    d_users {
        int id PK
        string email
        string name
    }

    d_sub_users {
        int user_id FK
        int sub_user_id FK
    }

    d_units {
        int id PK
        int user_id FK
        string name
    }

    d_units_users {
        int unit_id FK
        int user_id FK
    }

    d_farms {
        int id PK
        string name
        int user_id FK
        int unit_id FK
    }

    d_Calendario {
        date Data PK
        int Ano
        int MesNumero
        string Mes
    }

    d_status_processing {
        int id PK
        string name
        string stage
    }

    d_status_proposals {
        int id PK
        string name
        string stage
    }

    d_processing {
        int id PK
        int farm_id FK
        int user_id FK
        int unit_id FK
        int status FK
    }

    d_proposals {
        int id PK
        int process_id FK
        int farm_id FK
        int user_id FK
        int unit_id FK
        int status FK
    }

    d_tiles {
        int id PK
        int farm_id FK
        int unit_id FK
        string name
    }

    f_processing {
        int id PK
        int farm_id FK
        int user_id FK
        int unit_id FK
        int status FK
        decimal area
        date created_at
    }

    f_proposals {
        int id PK
        int farm_id FK
        int unit_id FK
        int process_id FK
        int user_id FK
        int status FK
        decimal area
        date created_at
    }

    f_balance_records {
        int id PK
        int user_id FK
        int unit_id FK
        int farm_id FK
        int proposal_id FK
        int process_id FK
        string module
        date created_at
    }

    f_tiles {
        int id PK
        int farm_id FK
        int unit_id FK
        string name
    }

    f_statistics_tiles {
        int proposal_id FK
        int process_id FK
        int tile_id FK
        int farm_id FK
        int unit_id FK
        int user_id FK
        decimal lines_sum_length
        decimal gaps_sum_length
    }

    f_statistics_planting_gaps {
        int proposal_id FK
        int process_id FK
        int farm_id FK
        int unit_id FK
        int user_id FK
        decimal gap_area
    }

    f_statistics_spacing_quality {
        int proposal_id FK
        int process_id FK
        int farm_id FK
        int unit_id FK
        int user_id FK
        decimal spacing_index
    }

    f_statistics_weed_mappings {
        int proposal_id FK
        int process_id FK
        int farm_id FK
        int unit_id FK
        int user_id FK
        string stage
        string type
    }

    f_statistics_survival_initials {
        int proposal_id FK
        int processing_id FK
        int farm_id FK
        int unit_id FK
        int user_id FK
        decimal gap_area_ha
        int count_plants
    }

    f_statistics_forest_wasts {
        int proposal_id FK
        int process_id FK
        int farm_id FK
        int unit_id FK
        int user_id FK
        decimal medium_volume
    }

    d_users ||--o{ d_sub_users : "master"
    d_users ||--o{ d_units : "possui"
    d_users ||--o{ d_units_users : "acessa"
    d_units ||--o{ d_units_users : "permissão"
    d_units ||--o{ d_farms : "agrupa"
    d_farms ||--o{ d_tiles : "contem"

    d_farms ||--o{ f_processing : "farm_id"
    d_units ||--o{ f_processing : "unit_id"
    d_users ||--o{ f_processing : "user_id"
    d_status_processing ||--o{ f_processing : "status"
    d_Calendario ||--o{ f_processing : "created_at"

    d_farms ||--o{ f_proposals : "farm_id"
    d_units ||--o{ f_proposals : "unit_id"
    d_users ||--o{ f_proposals : "user_id"
    d_status_proposals ||--o{ f_proposals : "status"
    d_processing ||--o{ f_proposals : "process_id"
    d_Calendario ||--o{ f_proposals : "created_at"

    d_users ||--o{ f_balance_records : "user_id"
    d_units ||--o{ f_balance_records : "unit_id"
    d_farms ||--o{ f_balance_records : "farm_id"
    d_processing ||--o{ f_balance_records : "process_id"
    d_proposals ||--o{ f_balance_records : "proposal_id"

    d_farms ||--o{ f_tiles : "farm_id"
    d_units ||--o{ f_tiles : "unit_id"
    d_tiles ||--o{ f_tiles : "id"

    d_proposals ||--o{ f_statistics_tiles : "proposal_id"
    d_processing ||--o{ f_statistics_tiles : "process_id"
    d_tiles ||--o{ f_statistics_tiles : "tile_id"
    d_farms ||--o{ f_statistics_tiles : "farm_id"
    d_units ||--o{ f_statistics_tiles : "unit_id"
    d_users ||--o{ f_statistics_tiles : "user_id"

    d_proposals ||--o{ f_statistics_planting_gaps : "proposal_id"
    d_processing ||--o{ f_statistics_planting_gaps : "process_id"
    d_farms ||--o{ f_statistics_planting_gaps : "farm_id"
    d_units ||--o{ f_statistics_planting_gaps : "unit_id"
    d_users ||--o{ f_statistics_planting_gaps : "user_id"

    d_proposals ||--o{ f_statistics_spacing_quality : "proposal_id"
    d_processing ||--o{ f_statistics_spacing_quality : "process_id"
    d_farms ||--o{ f_statistics_spacing_quality : "farm_id"
    d_units ||--o{ f_statistics_spacing_quality : "unit_id"
    d_users ||--o{ f_statistics_spacing_quality : "user_id"

    d_proposals ||--o{ f_statistics_weed_mappings : "proposal_id"
    d_processing ||--o{ f_statistics_weed_mappings : "process_id"
    d_farms ||--o{ f_statistics_weed_mappings : "farm_id"
    d_units ||--o{ f_statistics_weed_mappings : "unit_id"
    d_users ||--o{ f_statistics_weed_mappings : "user_id"

    d_proposals ||--o{ f_statistics_survival_initials : "proposal_id"
    d_processing ||--o{ f_statistics_survival_initials : "processing_id"
    d_farms ||--o{ f_statistics_survival_initials : "farm_id"
    d_units ||--o{ f_statistics_survival_initials : "unit_id"
    d_users ||--o{ f_statistics_survival_initials : "user_id"

    d_proposals ||--o{ f_statistics_forest_wasts : "proposal_id"
    d_processing ||--o{ f_statistics_forest_wasts : "process_id"
    d_farms ||--o{ f_statistics_forest_wasts : "farm_id"
    d_units ||--o{ f_statistics_forest_wasts : "unit_id"
    d_users ||--o{ f_statistics_forest_wasts : "user_id"

Visão Geral dos Relacionamentos

O diagrama abaixo resume o desenho do modelo em alto nível. Para facilitar a leitura, os relacionamentos detalhados foram separados por domínio nas seções seguintes.

flowchart LR
    origem[(PostgreSQL<br/>db_bemagro)]

    subgraph fatos[Fatos operacionais]
        fproc[f_processing]
        fprop[f_proposals]
        fbal[f_balance_records]
        ftiles[f_tiles]
    end

    subgraph dimensoes[Dimensões compartilhadas]
        dcal[d_Calendario]
        dfarms[d_farms]
        dunits[d_units]
        dusers[d_users]
        dproc[d_processing]
        dprop[d_proposals]
        dtiles[d_tiles]
        dstproc[d_status_processing]
        dstprop[d_status_proposals]
    end

    subgraph estatisticas[Estatísticas dos módulos]
        metrics[Field Metrics<br/>Falhas e Paralelismo]
        monitoring[Field Monitoring<br/>Infestação]
        early[Early Control]
        harvesting[Harvesting]
    end

    origem --> fatos
    origem --> estatisticas

    fatos --> dfarms
    fatos --> dunits
    fatos --> dusers
    fatos --> dcal
    fproc --> dstproc
    fprop --> dstprop
    fprop --> dproc
    fprop --> dprop
    ftiles --> dtiles

    estatisticas --> dfarms
    estatisticas --> dunits
    estatisticas --> dusers
    estatisticas --> dcal
    estatisticas --> dproc
    estatisticas --> dprop
    metrics --> dtiles

Relacionamentos Operacionais

flowchart LR
    subgraph Fatos[Fatos operacionais]
        fproc[f_processing]
        fprop[f_proposals]
        fbal[f_balance_records]
        ftiles[f_tiles]
    end

    subgraph Dims[Dimensões principais]
        dcal[d_Calendario]
        dfarms[d_farms]
        dunits[d_units]
        dusers[d_users]
        dproc[d_processing]
        dprop[d_proposals]
        dtiles[d_tiles]
        dstproc[d_status_processing]
        dstprop[d_status_proposals]
    end

    fproc -->|farm_id| dfarms
    fproc -->|unit_id| dunits
    fproc -->|user_id| dusers
    fproc -->|status| dstproc
    fproc -->|created_at| dcal

    fprop -->|farm_id| dfarms
    fprop -->|unit_id| dunits
    fprop -->|user_id| dusers
    fprop -->|status| dstprop
    fprop -->|created_at| dcal
    fprop -->|process_id| dproc
    fprop -->|id| dprop

    fbal -->|user_id| dusers
    fbal -->|farm_id| dfarms
    fbal -->|unit_id| dunits
    fbal -->|process_id| dproc
    fbal -->|proposal_id| dprop
    fbal -->|created_at| dcal

    ftiles -->|farm_id| dfarms
    ftiles -->|unit_id| dunits
    ftiles -->|id| dtiles

Relacionamentos das Estatísticas de Campo

flowchart LR
    subgraph Stats[Estatísticas dos módulos]
        stiles[f_statistics_tiles]
        gaps[f_statistics_planting_gaps]
        spacing[f_statistics_spacing_quality]
        weeds[f_statistics_weed_mappings]
        survival[f_statistics_survival_initials]
        forest[f_statistics_forest_wasts]
    end

    subgraph Dims[Dimensões compartilhadas]
        dfarms[d_farms]
        dunits[d_units]
        dusers[d_users]
        dcal[d_Calendario]
        dproc[d_processing]
        dprop[d_proposals]
        dtiles[d_tiles]
        drtc[d_report_type_configuration]
    end

    stiles -->|farm_id| dfarms
    stiles -->|unit_id| dunits
    stiles -->|user_id| dusers
    stiles -->|process_id| dproc
    stiles -->|proposal_id| dprop
    stiles -->|tile_id| dtiles
    stiles -->|data_criacao_proposta| dcal

    gaps -->|farm_id| dfarms
    gaps -->|unit_id| dunits
    gaps -->|user_id| dusers
    gaps -->|process_id| dproc
    gaps -->|proposal_id| dprop
    gaps -->|data_criacao_proposta| dcal

    spacing -->|farm_id| dfarms
    spacing -->|unit_id| dunits
    spacing -->|user_id| dusers
    spacing -->|process_id| dproc
    spacing -->|proposal_id| dprop
    spacing -->|completion_date| dcal

    weeds -->|farm_id| dfarms
    weeds -->|unit_id| dunits
    weeds -->|user_id| dusers
    weeds -->|process_id| dproc
    weeds -->|proposal_id| dprop
    weeds -->|id_unico_stage_e_type| drtc
    weeds -->|data_criacao_proposta| dcal

    survival -->|farm_id| dfarms
    survival -->|unit_id| dunits
    survival -->|user_id| dusers
    survival -->|processing_id| dproc
    survival -->|proposal_id| dprop
    survival -->|created_at| dcal

    forest -->|farm_id| dfarms
    forest -->|unit_id| dunits
    forest -->|user_id| dusers
    forest -->|process_id| dproc
    forest -->|proposal_id| dprop
    forest -->|data_proposta| dcal

Relacionamentos Principais em Tabela

Fato Dimensão Chave
f_processing d_farms farm_id -> id
f_processing d_units unit_id -> id
f_processing d_users user_id -> id
f_processing d_status_processing status -> id
f_processing d_Calendario created_at -> Data
f_proposals d_farms farm_id -> id
f_proposals d_units unit_id -> id
f_proposals d_users user_id -> id
f_proposals d_status_proposals status -> id
f_proposals d_Calendario created_at -> Data
f_proposals d_processing process_id -> id
f_balance_records d_users user_id -> id
f_balance_records d_farms farm_id -> id
f_balance_records d_units unit_id -> id
f_balance_records d_processing process_id -> id
f_balance_records d_proposals proposal_id -> id
f_tiles d_farms farm_id -> id
f_tiles d_units unit_id -> id
f_tiles d_tiles id -> id

Estatísticas de Campo

Tabela Relacionamentos recorrentes
f_statistics_tiles d_farms, d_processing, d_proposals, d_tiles, d_units, d_users, d_Calendario
f_statistics_planting_gaps d_farms, d_processing, d_proposals, d_units, d_users, d_Calendario
f_statistics_spacing_quality d_farms, d_processing, d_proposals, d_units, d_users, d_Calendario
f_statistics_weed_mappings d_farms, d_processing, d_proposals, d_units, d_users, d_report_type_configuration, d_Calendario
f_statistics_survival_initials d_farms, d_processing, d_proposals, d_units, d_users, d_Calendario
f_statistics_forest_wasts d_farms, d_processing, d_proposals, d_units, d_users, d_Calendario

Relacionamentos Inativos

Algumas relações com d_Calendario estão marcadas como inativas, incluindo campos como completion_date, updated_at, deleted_at e request_date. Essas relações existem para suporte a análises específicas e devem ser ativadas em medidas DAX quando necessário.

Relacionamentos Bidirecionais

O modelo possui relacionamentos bidirecionais em dimensões auxiliares, principalmente para suporte a idiomas e status:

Origem Destino Uso
d_status_proposals_idiom d_status_proposals Rótulos de status de proposta por idioma.
d_status_processing_idiom d_status_processing Rótulos de status de processamento por idioma.
d_report_type_configuration_idiom d_report_type_configuration Rótulos de tipo/stage por idioma.
d_Mes_Idiom d_Mes Rótulos de mês por idioma.

Observação

Para auditoria completa, o arquivo fonte relationships.tmdl deve ser mantido como referência técnica oficial do relacionamento físico do modelo.