IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSRS Discussion :

Problème de nombre de colonnes dans une matrice [2008R2]


Sujet :

SSRS

  1. #1
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Points : 103
    Points
    103
    Par défaut Problème de nombre de colonnes dans une matrice
    Bonjour,

    Mon problème est simple :

    J'ai un rapport qui contient une matrice avec un groupe de colonnes. Et je voudrais répéter mes colonnes systématiquement jusqu'au bout de la page, même si elle ne contiennent plus de données.

    De façon à avoir systématiquement un tableau qui me remplit toute la page :

    Visuellement c'est plus jolie et deuxièmement, le but étant d'imprimer le rapport pour faire du pointage manuel, cela permet à l'utilisateur de pouvoir saisir manuellement des infos supplémentaires dans les colonnes laissées vides.

    Comment faire cela ?

    merci d'avance

  2. #2
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Faire un tableau ?

    Sinon à travers votre dataset, il faut générer fictivement les colonnes en attribuant des valeurs NULL.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Points : 103
    Points
    103
    Par défaut
    Tout d'abord, merci pour ta réponse rapide !

    Ben ... j'ai un nombre de colonnes qui est variable donc la matrice avec des colonnes dynamiques s'y prête bien. Je peux en avoir jusqu'à 25 ou plus et donc ça ne tient pas forcement sur une seule page. Si je fais un tableau, combien j'en prévois ? et comment je les remplis ? c'est pas évident ...

    Sinon oui, j'ai bien pensé à générer des lignes supplémentaires dans la requête de mon dataset mais c'est assez lourdingue : il faut que je compte le nombre de salariés par magasin (parce que en plus j'ai un regroupement et une rupture par magasin) pour compléter avec le bon nombre de colonne...ça me complique pas mal...d'autant que je suis pas un expert en SQL et que je risques de batailler un bon moment.

    Dommage qu'il n'y ai pas une propriété sur la matrice du style : nombre de colonnes mini, nombre de colonnes maxi à générer...

  4. #4
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Points : 103
    Points
    103
    Par défaut
    Bonjour,

    Je pars donc sur la génération de lignes supplémentaires dans la requête de mon dataset.

    pour faire simple, ma requête actuelle est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID_SALARIE, ID_MAGASIN FROM TAB_SALARIE WHERE ID_MAGASIN IN (@MAGASIN)
    je voudrais rajouter pour chaque magasin des lignes NULL de façon à compléter mon nombre de colonnes de la manière suivante :

    imaginons que je veuilles avoir systématiquement 5 colonnes.

    ma requête me renvoi :

    11 dupond magasin1
    12 durand magasin1
    13 dufour magasin1
    21 toto magasin2
    22 titi magasin2

    il faudrait donc que j'arrive à compléter ainsi :
    14 null magasin1
    15 null magasin1
    23 null magasin2
    24 null magasin2
    25 null magasin2

    Quelqu'un peut il m'aider à concevoir la requête ?

  5. #5
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Il faudrait faire un CROSS JOIN entre vos 2 entités magasins et salariés pour avoir toujours les colonnes présentes, même si le croisement ne représente pas de données.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Points : 103
    Points
    103
    Par défaut
    Bonjour,

    Non, le cross join me fait le produit cartésien des 2 tables, ce n'est pas ce que je cherche. Je cherche à compléter avec des lignes comportant des salariés vides.

    J'ai finalement trouvé la requête appropriée (En espérant que cela puisse servir à quelqu'un d'autre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Create Table #T (
          IDSAL char(10),
          IDMAGASIN     char(10)
    )
     
    INSERT INTO #T (IDSAL, IDMAGASIN)
     
          VALUES
                ('AAAAAAAAAA', '1111111111'),
                ('BBBBBBBBBB', '1111111111'),
                ('CCCCCCCCCC', '1111111111'),
                ('DDDDDDDDDD', '2222222222'),
                ('EEEEEEEEEE', '2222222222')
     
    SELECT
                IDMAGASIN,
                IDSAL
     
          FROM (
                SELECT
                            IDMAGASIN,
                            IDSAL
     
                      FROM #T
     
                UNION ALL
     
                SELECT
                            CPT.IDMAGASIN,
                            Null AS IDSAL
     
                      FROM
     
                            (Select IDMAGASIN, 5 - (((COUNT(*)-1) % 5)+1) AS NOMBRE from #T GROUP BY IDMAGASIN) AS CPT
    -- jointure sur une table quelconque qui comporte au moins 5 lignes pour repeter 5 fois les lignes null
                            INNER JOIN (SELECT ROW_NUMBER() OVER (ORDER BY ID) AS NUM_LIGNE FROM TAB_ACHAT) AS GEN ON (NOMBRE >= NUM_LIGNE)
     
                ) AS SRC
     
          ORDER BY IDMAGASIN, ISNULL(IDSAL, 'ZZZZZZZZZZ')
     
     
     
    DROP Table #T
    et ça me donne bien le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    IDMAGASIN        IDSAL
    1111111111	AAAAAAAAAA
    1111111111	BBBBBBBBBB
    1111111111	CCCCCCCCCC
    1111111111	NULL
    1111111111	NULL
    2222222222	DDDDDDDDDD
    2222222222	EEEEEEEEEE
    2222222222	NULL
    2222222222	NULL
    2222222222	NULL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nombre de colonnes dans une matrice
    Par kimTunisia dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 27/07/2011, 12h30
  2. Compter le nombre de colonne dans une table
    Par Coin dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2006, 16h03
  3. Réponses: 5
    Dernier message: 22/09/2006, 15h07
  4. [SQL] Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 14/08/2006, 13h28
  5. Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/08/2006, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo