Trucs et astuces - création d'un jeu de données

    En début de projet, il arrive que les données du client ne soient pas encore disponibles. Pour ne pas perdre de temps, il est possible de se constituer un jeu d’essai.

     

    Pour quelques données, le mode manuel est le plus rapide. On peut se constituer un fichier Excel ou se créer un script comme ci-dessous :

    VENTES:
    LOAD * Inline [
    Date, NB Ventes
    01/01/2017, 5
    02/01/2017, 6
    03/01/2017, 7
    04/01/2017, 9
    05/01/2017, 10
    10/01/2017, 10
    ]
    ;


    Une fois mes premiers tests effectués sur ma table VENTES, j’ai besoin d’avoir des données sur une année entière. Pas question de saisir les 365 jours de l’année.

    Je vais commencer par créer un calendrier (https://community.qlik.com/docs/DOC-4848).

    LET vMinDate = Num(Makedate(2017,1,1));
    LET vMaxDate = Num(Makedate(Year(Now()),12,31));

    ChampDate:
    LOAD date($(vMinDate)+IterNo()-1) as MaDate
    AUTOGENERATE (1)
    WHILE $(vMinDate)+IterNo()-1<= $(vMaxDate);

    Calendrier:
    LOAD
    MaDate as Date,
    Year(MaDate) as Année,
    'T ' &
    Num(Ceil(Month(MaDate)/3),'(ROM)0') as Trimestre,
    Month(MaDate) as Mois,
    MonthEnd(MaDate)as DateFinMois,
    Week(MaDate) as Semaine,
    Weekday(MaDate) as JourSemaine,
    Day(MaDate) as Jour
    RESIDENT ChampDate;

    DROP TABLE ChampDate;
    SET vMinDate = ;
    SET vMaxDate = ;

     

    Puis, en m’appuyant sur la table Calendrier, je vais générer un nombre aléatoire de ventes.

    La fonction rand() renvoie un nombre aléatoire entre 0 et 1. C’est un nombre avec de nombreuses décimales. Comme je veux limiter le nombre de ventes à 100 par jour, je multiplie le nombre généré aléatoirement.

    VENTES:
    NoConcatenate
    Load Date,
    round(rand( )*100) as [NB Ventes]
    resident Calendrier;

    Maintenant que j’ai pu faire mes tests sur des chiffres annuels, j’ajoute les vendeurs.

     

    Génération du calendrier

    LET vMinDate = Num(Makedate(2017,1,1));
    LET vMaxDate = Num(Makedate(Year(Now()),12,31));

    ChampDate:
    LOAD date($(vMinDate)+IterNo()-1) as MaDate
    AUTOGENERATE (1)
    WHILE $(vMinDate)+IterNo()-1<= $(vMaxDate);

    Calendrier:
    LOAD
    MaDate as Date,
    Year(MaDate) as Année,
    'T ' &
    Num(Ceil(Month(MaDate)/3),'(ROM)0') as Trimestre,
    Month(MaDate) as Mois,
    MonthEnd(MaDate)as DateFinMois,
    Week(MaDate) as Semaine,
    Weekday(MaDate) as JourSemaine,
    Day(MaDate) as Jour
    RESIDENT ChampDate;

    DROP TABLE ChampDate;
    SET vMinDate = ;
    SET vMaxDate = ;

    Ajout des vendeurs

     

    VENDEURS:
    LOAD * Inline [
    VENDEUR, NOM, PRENOM
    MARTIN, MARTIN, Jacques
    DEUF, DEUF, John
    BAMBELLE, BAMBELLE, Marie
    ]
    ;

    Table temporaire réunissant les 365 jours de l’année et les 3 vendeurs, soit 1095 occurrences.

    TEMP_VENTES:
    NoConcatenate
    LOAD Date
    Resident Calendrier;

    Join
    LOAD VENDEUR
    Resident VENDEURS;

    Table VENTES

    VENTES:
    NoConcatenate
    Load *,
    round(rand( )*100) as [NB Ventes]
    resident TEMP_VENTES;

    DROP Table TEMP_VENTES;

    Ces quelques exemples illustrent bien la puissance et la rapidité de QlikView pour générer des données.

     

    Si vous vous avez des questions, n'hésitez à laisser un commentaire.

    Laurent CLOATRE