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)
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$]
| 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 |
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
| 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 |
L’objectif est de Vérifier que les compétences minimales sont connues :
en SQL : création de la base, des tables, insertion de données, requêtage des tables
en ETL : extraction et transformation de données
en BI : création de graphiques simples
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;
| customer_id | customer_name |
|---|---|
| 1111 | Armand |
| 1112 | Hebert |
| 1113 | Ribeiro |
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];
| 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 |
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