Exo 1

L’objectif est de créer la table de nomenclature explosée pour les produits finis par une requête sql (a partir de d’une table de départ)

la table de départ

On commence par une importation de la table dans sql server ou de faire un insert into par la requête suivante :


/*   
create database Test;

INSERT INTO Test.[dbo].[Test$] ([ARTICLE], [COMPONENT] ,  [QUANTITY]   ) VALUES
('12172403',    '10172400' ,    '0.882'),
('12172403',    '10179400' ,    '0.018'),
('12172403',    '11172403' ,    '0.1'),
('26904264',    '10181280' ,    '0.2'),
('26904264',    '10181285' ,    '0.2'),
('26904264',    '10190050' ,    '0.125'),
('26904264',    '10190100' ,    '0.008'),
('26904264',    '21890067' ,    '1'),
('26904264',    '21890068' ,    '1'),
('26904264',    '21990237' ,    '1'),
('26904264',    '43890069' ,    '1'),
('43890069',    '12172403' ,    '6.12'),
('43890069',    '21990876' ,    '2');
*/

La table de départ “Nomenclature des pièces” est donnée par la requête suivante ( ici que 10 lignes d’affichage dans le output html! )

select * from Test.[dbo].[Test$]
Displaying records 1 - 10
ARTICLE COMPONENT QUANTITY
12172403 10172400 0.882
12172403 10179400 0.018
12172403 11172403 0.100
26904264 10181280 0.200
26904264 10181285 0.200
26904264 10190050 0.125
26904264 10190100 0.008
26904264 21890067 1.000
26904264 21890068 1.000
26904264 21990237 1.000

La table d’arrivée : Nomenclature explosée

j’ai développé la requête sql suivante pour avoir la table d’arrivée. La requête est la suivante ( ici que 10 lignes d’affichage dans le output html! ) :

select
26904264 as "FINISHED_PRODUCT",
case when [ARTICLE] LIKE '26%'   THEN '0' else [ARTICLE] end as "SEMIFINISHED",
[COMPONENT] as "CHILD_ARTICLE",
Depth as "DEPTH_LEVEL",
[QUANTITY]
from test.dbo.Test$ as a
left outer join (select  semif, 
case when semif Like '26%' then '0' else  count(semif )-1 end as "Depth"
from (select 
case when [ARTICLE] Like  '26%'   THEN '26904264' else [ARTICLE] end as "semif",
[COMPONENT]
from test.dbo.Test$
) as  r
group by semif
) as  b 
on b.semif= a.[ARTICLE]
order by semif
Displaying records 1 - 10
FINISHED_PRODUCT SEMIFINISHED CHILD_ARTICLE DEPTH_LEVEL QUANTITY
26904264 12172403 10172400 2 0.882
26904264 12172403 10179400 2 0.018
26904264 12172403 11172403 2 0.100
26904264 0 10181280 0 0.200
26904264 0 10181285 0 0.200
26904264 0 10190050 0 0.125
26904264 0 10190100 0 0.008
26904264 0 21890067 0 1.000
26904264 0 21890068 0 1.000
26904264 0 21990237 0 1.000

Exo 2

L’objectif est de Vérifier que les compétences minimales sont connues :

Créeration d’une petite base de données avec 3 tables

La creation est donnée par le code sql suivant


/*
create database Test2;

use Test2
create table  Customers
(
customer_id int NOT NULL,
customer_name CHAR(50) NOT NULL,

PRIMARY KEY (customer_id)
);

use Test2
create table  Orders
(
order_id int NOT NULL,
customer__id INT  NOT NULL  ,
order_date date NOT NULL,

PRIMARY KEY (order_id)
);


use Test2
create table  Orders_Lines
(
order_line_id int NOT NULL,
order__id INT  NOT NULL  ,
item_id INT  NOT NULL,
item_qty INT  NOT NULL,
item_price INT  NOT NULL,
PRIMARY KEY (order_line_id)
);




*/

Une fois les trois tables sont créées, on relie ces dernières par le modèle relationnel.

Le remplissage des tables est donné par la requête ci-dessous:

--- le remplissage :
/*
INSERT INTO  Customers (customer_id, customer_name) VALUES
 ('1111', 'Armand'),
 ('1112', 'Hebert'),
 ('1113', 'Ribeiro');
 INSERT INTO Orders (order_id ,customer__id ,order_date ) VALUES
('1' , '1111', '2021-04-02');
 ('2' , '1112', '2021-05-02'),
('3' , '1111', '2021-06-02');

 INSERT INTO Orders_lines (order_line_id , order__id  , item_id ,item_qty ,item_price  ) VALUES
( '1500' , '1',  '1521', '3' ,  '50' ),
( '1533' , '3',  '1522', '2' ,  '40' ),
( '1544' , '2',  '1523', '2' ,  '19' );

*/
--affichage de la table customers
select * from Test2.[dbo].customers;
3 records
customer_id customer_name
1111 Armand
1112 Hebert
1113 Ribeiro

Utilisation de Talend pour extraire les informations de la base et les transformer pour les stocker dans une 2e base avec une table

L’objectif est de mettre toutes les informations des 3 tables dans une autre base (result).

En utilisant l’ETL Talend, j’ai établi une connexion avec sqlserveur dans les métadonnées ensuite j’ai utilisé le composant tmap (en fusant des jointures, voir l’image ci-desous)

La dernière partie consiste a charger la table result2, en utilisant un Job Talend (voir l’image ci-dessous) :

Pour afficher les informations de la table result2 dans la base result on utilise la requête suivante:

select * from [result].[dbo].[result2];
2 records
customer_id customer_name order_id order_line_id item_id item_qty item_price order__id order_date customer__id
1111 Armand 3 1533 1522 2 40 3 2021-06-02 1111
1112 Hebert 2 1544 1523 2 19 2 2021-05-02 1112

Visualisation en Power bi

J’ai créé quelques graphiques simples, en utilisant les données de la table result2.En outre, j’ai mis en place un bouton pour exploiter les informations dans 2 onglets différents.

Flus des données Talend

Flus des données Talend