Data mart pour l'analyse de ticket de caisse

[2h]

Afin d'analyser la structure des tickets de caisse, l'on va créer un data mart dédié.

Réaliser un data mart pour l'analyse de structure de tickets de caisse. On se contentera d'une analyse en quantité (sans intégrer le chiffre d'affaire donc).

CREATE TABLE f_dm1_ventes (
num char(10),
mag char(4),
dat date,
qte number(2)
);
ALTER TABLE f_dm1_ventes
ADD CONSTRAINT f_dm1_ventes_fkdat
FOREIGN KEY (dat) REFERENCES f_dw_date(dat);
ALTER TABLE f_dm1_ventes
ADD CONSTRAINT f_dm1_ventes_fkmag
FOREIGN KEY (mag) REFERENCES f_dw_mag(mag);
-- TODO constraints desactivation
INSERT INTO f_dm1_ventes (num, mag, dat, qte)
SELECT num, mag, dat, count(*) as q
FROM f_dw_ventes
GROUP BY num, mag, dat, num;
-- TODO constraints reactivation

Exploiter le data mart pour analyser globalement les comportements d'achats multiples en fonction des rayonnages, des dates...

SELECT m.ray, avg(qte)
FROM f_dm1_ventes v JOIN f_dw_mag m
ON v.mag=m.mag
GROUP BY m.ray;
  • Y : 1.69

  • A : 1.86

  • E : 1.69

SELECT m.bs, avg(qte)
FROM f_dm1_ventes v JOIN f_dw_mag m
ON v.mag=m.mag
GROUP BY m.bs;
  • 1 : 1.83

  • 0 : 1.38

Enrichissez le data mart avec les indicateurs adéquats pour analyser si le rayonnage influe sur la structure du ticket de caisse.

Typiquement on va chercher à étudier si :

  • les rayonnages de type A ou E induisent des tickets de caisse avec plusieurs livres du même auteur ou du même éditeur ;

  • les rayons BS induisent des tickets avec plusieurs livres de type BS

ALTER TABLE f_dm1_ventes
ADD ind_aut1 NUMBER(2);
ALTER TABLE f_dm1_ventes
ADD ind_aut2 NUMBER(1);
DELETE FROM f_dm1_ventes;
INSERT INTO f_dm1_ventes (num, mag, dat, qte, ind_aut1, ind_aut2)
SELECT r1.num, r1.mag, r1.dat, r1.q, round(max(r2.a),2), case when max(r2.a)>1 then 1 else 0 end
FROM
(SELECT num, mag, dat, count(*) as q
FROM f_dw_ventes
GROUP BY num, mag, dat, num
) r1,
(SELECT num, p.auteur, count(*) as a
FROM f_dw_ventes v JOIN f_dw_produit p
ON v.pro=p.isbn
GROUP BY num, p.auteur
) r2
WHERE r1.num = r2.num
GROUP BY r1.num, r1.mag, r1.dat, r1.q;

On obtient ici :

  • un indice entier ind_aut1 qui contient le nombre maximum de livres du même auteur dans un ticket (il vaut 1 si tous les auteurs sont différents ou si le ticket ne contient qu'un seul produit) ;

  • un indice booléen ind_aut2 qui vaut 1 s'il y a au moins deux livre d'un même auteur sur le ticket, et 0 sinon.

SELECT m.ray, avg(v.ind_aut1)
FROM f_dm1_ventes v JOIN f_dw_mag m
ON v.mag=m.mag
GROUP BY m.ray

Y : 1.07

A : 1.21

E : 1.05

On observe que les magasins de type A favorisent la vente de plusieurs livres de même auteur.

SELECT m.ray, round(avg(v.ind_aut2),2)
FROM f_dm1_ventes v JOIN f_dw_mag m
ON v.mag=m.mag
WHERE v.qte>1
GROUP BY m.ray
  • Y : 0.16

  • A : 0.37

  • E : 0.14

Ici on a considéré uniquement les tickets pour lesquels il y a au moins deux livres de vendus (qte > 1).

On observe que, pour les magasins de type A, pour 37% des tickets comprenant au moins deux livres, il y a au moins deux livres du même auteur (contre 15% environ pour les autres magasins) ; on en conclut que les magasins de type A permettent de vendre deux fois plus souvent des livres du même auteur que les autres.

AccueilExercice : Data mart pour l'analyse de ticket de caisse< PrécédentSuivant >