Skip to content

Commit

Permalink
Fixes df3 (#673)
Browse files Browse the repository at this point in the history
* fix directeurs_administration_centrale

on corrige directeurs_administration_centrale

fix directeurs_administration_centrale (2)

* Cohabitation df1-df3 + fix df3_chantier (#671)

* dbt.model.new: df1_indic et df1_ch

Ajout de ces models pour changer facilement les tables d'exposition (indicateur et chantier)

* dbt.model.new: df1_indic et df1_ch

Ajout de ces models pour changer facilement les tables d'exposition (indicateur et chantier)

* fix empty array

* fix: directions_administration_centrale

on récupère correctement les directions_administration_centrale à l'aide de la table metadata_porteur et non plus dans la colonne porteur_shorts_DAC de metadata_chantier qui était présente pour information donc sur laquelle il ne faut pas se baser.

* replace dy dbt ref

* dbt.model.new: df1_indic et df1_ch

Ajout de ces models pour changer facilement les tables d'exposition (indicateur et chantier)

* fix empty array

* fix: directions_administration_centrale

on récupère correctement les directions_administration_centrale à l'aide de la table metadata_porteur et non plus dans la colonne porteur_shorts_DAC de metadata_chantier qui était présente pour information donc sur laquelle il ne faut pas se baser.

* replace dy dbt ref

* update dbt tests

* fix tests

issue: dbt-labs/dbt-core#3229
solution: given by dbt cli when error

* hotfix: Revert "feat: ajout de la météo dans import massif de commentaires (000)"

This reverts commit 526bfc6.

* compare ta_ch et ta_indic

* compute_ta_indic: add 2 rules

2 rules:
- si hausse et va>=vc -> 100%
- si baisse et va<=vc -> 100%

* fix: handle ta=nouveau_ta

then ratio will be 0

* update dump scripts

* Update .gitignore

* Update README.md

* update migration process
  • Loading branch information
cdugeai authored Dec 4, 2023
1 parent 7b12ae0 commit d6be78d
Show file tree
Hide file tree
Showing 63 changed files with 411 additions and 225 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ with jjoin as (select
else false
end as ignore_row
from {{ ref('df3_indicateur') }} a
full join {{ ref('indicateur') }} b
full join {{ ref('df1_indicateur') }} b
on a.territoire_code=b.territoire_code and a.id=b.id
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ with jjoin as (select
else false
end as ignore_row
from {{ ref('df3_indicateur') }} a
full join {{ ref('indicateur') }} b
full join {{ ref('df1_indicateur') }} b
on a.territoire_code=b.territoire_code and a.id=b.id
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ with jjoin as (select
end as ratio

from {{ ref('df3_indicateur') }} a
full join {{ ref('indicateur') }} b
full join {{ ref('df1_indicateur') }} b
on a.territoire_code=b.territoire_code and a.id=b.id
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ with jjoin as (select
null::numeric as ratio

from {{ ref('df3_indicateur') }} a
full join {{ ref('indicateur') }} b
full join {{ ref('df1_indicateur') }} b
on a.territoire_code=b.territoire_code and a.id=b.id
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ with jjoin as (select
a.{{colname}} as computed_value,
b.{{colname}} as target_value
from {{ ref('df3_indicateur') }} a
full join {{ ref('indicateur') }} b
full join {{ ref('df1_indicateur') }} b
on a.territoire_code=b.territoire_code and a.id=b.id
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ with jjoin as (select
a.{{colname}} as computed_value,
b.{{colname}} as target_value
from {{ ref('df3_indicateur') }} a
full join {{ ref('indicateur') }} b
full join {{ ref('df1_indicateur') }} b
on a.territoire_code=b.territoire_code and a.id=b.id
)

Expand Down
24 changes: 12 additions & 12 deletions data_management/data_factory/macros/df3_validation/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,64 +3,64 @@ version: 2
macros:
- name: df3_date_early
description: |
Macro de test de la `df2.df3_indicateur` par rapport à `public.indicateur`.
Macro de test de la `df2.df3_indicateur` par rapport à `public.df1_indicateur`.
Compare si une date est **antérieure** à ce qui est attendu.
arguments:
- name: colname_date
type: string
description: Nom de la colonne de `df2.df3_indicateur` et `public.indicateur` contenant une date à vérifier.
description: Nom de la colonne de `df2.df3_indicateur` et `public.df1_indicateur` contenant une date à vérifier.
- name: ignore_day
type: boolean
description: Indique si on doit ignorer le jour du mois. Ie, si le mois est identique, on considère les dates identiques.
- name: df3_date_late
description: |
Macro de test de la `df2.df3_indicateur` par rapport à `public.indicateur`.
Macro de test de la `df2.df3_indicateur` par rapport à `public.df1_indicateur`.
Compare si une date est **postérieure** à ce qui est attendu.
arguments:
- name: colname_date
type: string
description: Nom de la colonne de `df2.df3_indicateur` et `public.indicateur` contenant une date à vérifier.
description: Nom de la colonne de `df2.df3_indicateur` et `public.df1_indicateur` contenant une date à vérifier.
- name: ignore_day
type: boolean
description: Indique si on doit ignorer le jour du mois. Ie, si le mois est identique, on considère les dates identiques.
- name: df3_not_equal_bool
description: |
Macro de test de la `df2.df3_indicateur` par rapport à `public.indicateur`.
Macro de test de la `df2.df3_indicateur` par rapport à `public.df1_indicateur`.
Compare si deux booléens sont **non null et identiques**.
arguments:
- name: colname
type: string
description: Nom de la colonne de `df2.df3_indicateur` et `public.indicateur` contenant un booléen à comparer.
description: Nom de la colonne de `df2.df3_indicateur` et `public.df1_indicateur` contenant un booléen à comparer.
- name: df3_not_equal
description: |
Macro de test de la `df2.df3_indicateur` par rapport à `public.indicateur`.
Macro de test de la `df2.df3_indicateur` par rapport à `public.df1_indicateur`.
Compare si deux valeurs numériques sont égales. Le paramètre `tolerance` permet d'indiquer une fenêtre de précision.
arguments:
- name: colname
type: string
description: Nom de la colonne de `df2.df3_indicateur` et `public.indicateur` contenant un nombre à comparer.
description: Nom de la colonne de `df2.df3_indicateur` et `public.df1_indicateur` contenant un nombre à comparer.
- name: tolerance
type: float
description: Nombre dans `[0,1]` qui indique le seuil de pourcentage de différence des deux nombres au dessus duquel on considère que les deux nombres sont **différents**. Par exemple, `0.01` signifie que deux nombres seront considérés non égaux s'ils varient de `1%` ou plus.
- name: df3_should_notnull
description: |
Macro de test de la `df2.df3_indicateur` par rapport à `public.indicateur`.
Macro de test de la `df2.df3_indicateur` par rapport à `public.df1_indicateur`.
Indique lorsqu'une valeur vaut `NULL`, mais ne **devrait pas**.
arguments:
- name: colname
type: string
description: Nom de la colonne de `df2.df3_indicateur` et `public.indicateur` contenant une valeur à vérifier.
description: Nom de la colonne de `df2.df3_indicateur` et `public.df1_indicateur` contenant une valeur à vérifier.
- name: df3_should_null
description: |
Macro de test de la `df2.df3_indicateur` par rapport à `public.indicateur`.
Macro de test de la `df2.df3_indicateur` par rapport à `public.df1_indicateur`.
Indique lorsqu'une valeur **n'est pas** `NULL`, mais **devrait l'être**.
arguments:
- name: colname
type: string
description: Nom de la colonne de `df2.df3_indicateur` et `public.indicateur` contenant une valeur à vérifier.
description: Nom de la colonne de `df2.df3_indicateur` et `public.df1_indicateur` contenant une valeur à vérifier.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
with compare as (select
a.id, a.territoire_code, a.taux_avancement as ta,
b.taux_avancement as nouveau_ta
from df1_chantier a
left join df3_chantier b on a.id=b.id and a.territoire_code=b.territoire_code
order by id, territoire_code),
compute_ratio as (
select *,
case
-- Both TA are null
when coalesce(ta,nouveau_ta) is null then 0
-- Only old_ta is null
when (ta is null) or (nouveau_ta is null) then null
when ta=0 and nouveau_ta=0 then 0
when ta=0 and nouveau_ta<>0 then null
when nouveau_ta-ta>=0 then (nouveau_ta-ta)/ta
when nouveau_ta-ta<0 then (ta-nouveau_ta)/ta
else 100000
end as ratio
from compare),
set_to_buckets as (


select *,
case
when ratio = 0 then '1. exact'
when ratio < 0.01 then '2. approx'
when ratio < 0.2 then '3. <20'
when ratio > 1 then '5. >100'
else '4. 20<x<100'
end as category


from compute_ratio)


--select category, count(*) from set_to_buckets group by category order by category



select * from set_to_buckets where category like '4. %' order by chantier_id, id, territoire_code
41 changes: 41 additions & 0 deletions data_management/data_factory/models/analysis/compare_ta_indic.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
with compare as (select
a.chantier_id, a.id, a.territoire_code, a.date_valeur_actuelle, a.objectif_taux_avancement as ta,
b.objectif_taux_avancement as nouveau_ta
from df1_indicateur a
left join df3_indicateur b on a.id=b.id and a.territoire_code=b.territoire_code
order by chantier_id, id, territoire_code),
compute_ratio as (
select *,
case
-- Both TA are null
when coalesce(ta,nouveau_ta) is null then 0
-- Only old_ta is null
when (ta is null) or (nouveau_ta is null) then null
when ta=0 and nouveau_ta=0 then 0
when ta=0 and nouveau_ta<>0 then null
when nouveau_ta-ta>=0 then (nouveau_ta-ta)/ta
when nouveau_ta-ta<0 then (ta-nouveau_ta)/ta
else 100000
end as ratio
from compare),
set_to_buckets as (


select *,
case
when ratio = 0 then '1. exact'
when ratio < 0.01 then '2. approx'
when ratio < 0.2 then '3. <20'
when ratio > 1 then '5. >100'
else '4. 20<x<100'
end as category


from compute_ratio)


--select category, count(*) from set_to_buckets group by category order by category



select * from set_to_buckets where category like '4. %' order by chantier_id, id, territoire_code
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
-- Compute unbounded TA
with get_unbounded_ta as
(
select *,
select a.*,
-- TAA: Si la VI=VC -> TA = NULL
case when vig=vca then null else round((100*(vaca-vig)/(vca-vig))::numeric, {{ var('ta_decimales') }}) end as unbounded_taa,
case
when vig=vca then null
when b.tendance='HAUSSE' and vaca>=vca then 100
when b.tendance='BAISSE' and vaca<=vca then 100
else round((100*(vaca-vig)/(vca-vig))::numeric, {{ var('ta_decimales') }})
end as unbounded_taa,
-- TAG: Si la VI=VC-> TA = NULL
case when vig=vcg then null else round((100*(vacg-vig)/(vcg-vig))::numeric, {{ var('ta_decimales') }}) end as unbounded_tag
from {{ ref('merge_computed_values') }}
case
when vig=vcg then null
when b.tendance='HAUSSE' and vacg>=vcg then 100
when b.tendance='BAISSE' and vacg<=vcg then 100
else round((100*(vacg-vig)/(vcg-vig))::numeric, {{ var('ta_decimales') }})
end as unbounded_tag
from {{ ref('merge_computed_values') }} a
left join {{ ref('metadata_parametrage_indicateurs') }} b on a.indic_id=b.indic_id
),
-- Compute bounded TA
get_bounded_ta as (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,23 @@ select a.chantier_id,
bool_or(meteo is not null) filter (where a.maille='NAT') as has_meteo_nat
from synthese_triee_par_date a
group by chantier_id
),

-- On récupère les directeurs des directions porteuses de chaque chantier
ch_unnest_porteurs_dac as (
select chantier_id, unnest(string_to_array("porteur_ids_DAC", ' | ')) as pi from {{ ref('metadata_chantiers') }} mc
), ch_unnest_porteurs_dac_pnames as (
select a.*, mp.porteur_directeur, mp.porteur_short from ch_unnest_porteurs_dac a
left join {{ ref('metadata_porteurs') }} mp on a.pi=mp.porteur_id
),
ch_unnest_porteurs_dac_pnames_agg as (
select
chantier_id,
array_agg(pi) p_id,
array_agg(porteur_directeur) p_directeurs,
array_agg(porteur_short) p_shorts
from ch_unnest_porteurs_dac_pnames
group by chantier_id
)


Expand All @@ -78,9 +95,11 @@ select
t.nom as territoire_nom,
string_to_array(ch_per, ' | ') as perimetre_ids,
z.zone_type as "maille",
string_to_array("porteur_directeur" , ' | ') as directeurs_administration_centrale,
-- coalesce with empty array
coalesce(p_names.p_directeurs, string_to_array('','')) as directeurs_administration_centrale,
string_to_array("porteur_ids_noDAC" , ' | ') as ministeres,
string_to_array("porteur_shorts_DAC" , ' | ') as directions_administration_centrale,
-- coalesce with empty array
coalesce(p_names.p_shorts, string_to_array('','')) as directions_administration_centrale,
string_to_array("ch_dp" , ' | ') as directeurs_projet,
sr.meteo as meteo,
ax.axe_name as axe,
Expand All @@ -101,6 +120,7 @@ from {{ ref('metadata_chantiers') }} mc
cross join {{ source('db_schema_public', 'territoire') }} t
left join {{ ref('metadata_zones') }} z on z.zone_id=t.zone_id
left join {{ ref('metadata_porteurs') }} po on mc."porteur_ids_DAC"=po.porteur_id
left join ch_unnest_porteurs_dac_pnames_agg p_names on mc.chantier_id=p_names.chantier_id
left join
(select * from synthese_triee_par_date where row_id_by_date_meteo_desc=1) sr
ON sr.chantier_id =mc.chantier_id AND
Expand Down
Loading

0 comments on commit d6be78d

Please sign in to comment.