Contact: 514-605-7112 / info@lecfomasque.com

Connexion à SQL Server en filtrant selon les données d'une autre requête

Ce sujet a 4 réponses, 3 participants et a été mis à jour par  Julien, il y a 7 mois et 1 semaine.

5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Messages
  • #49718

    Julien
    Participant

    Bonjour!

    Dans ma requête 1, je vais chercher 25 000 numéro de pièce (supposons qu’il s’agisse d’entêtes de factures).

    Par la suite, dans ma requête 2, j’aimerais aller chercher les lignes d’imputation de chacune de ces 25 0000 pièces. Ces lignes sont stockées dans une table énorme (plus de 10 millions de lignes). Au lieu de télécharger la table au complet (qui contient toutes les lignes d’imputation de toutes les pièces existantes) et donc afin d’optimiser la performance , j’aimerais ne charger que les lignes de mes 25 000 pièces, et non toute la table.

    Est-ce possible de le faire? Je peux procéder via SQL si nécessaire, mais je ne veux pas harcoder mes 25 000 numéro de pièces dans le code.

    Merci d’avance!

    #49725

    Corto
    Participant

    Bonjour,

    Dans PowerQuery il suffit de fusionner les 2 tables avec une clé comme jointure… Faites justes des connexions à vous sources de données au préalable.

    Christian

    #49728

    Julien
    Participant

    Bonjour,

    Si ma compréhension de cet article (https://www.lecfomasque.com/power-query-ameliorer-la-performance-de-vos-requetes/) est bonne, en faisant simplement un fusion, Power Query essaie de « matcher » mes 25000 lignes de la requête 1 avec les 10 000 000 de lignes de la source de la requête 2. Le traitement est beaucoup trop long (ici, mon Excel plante).

    Si j’étais capable de me connecter à la source de donnée en faisant un SQL de ce genre

    SELECT * From (Source 2) WHERE NoPièce = (la liste des numéros de pièces trouvés dans la requête 1);

    j’ai l’impression que je pourrais ensuite effectuer ma fusion et le temps serait grandement réduit puisque je « matcherai » 25 000 lignes avec environ 100 000 lignes plutôt que 10 000 000 de lignes.

    Je me demande comment je pourrais mettre une variable qui permettrait au code SQL d’aller chercher cette liste des numéros de pièces trouvés dans la requête 1. Est-ce possible?

    Merci!

    #49729

    Sophie Marchand
    Admin bbPress

    Bonjour,

    Vous pouvez créer des paramètres dans Power Query et les utiliser dans votre requête SQL. Vous trouverez un exemple de ça ici: https://reevessmith.wordpress.com/2014/08/19/power-query-and-stored-procedures-with-parameters/.

    Au plaisir,

    Sophie

    #49731

    Julien
    Participant

    Merci beaucoup pour le lien!

    Je bloque toutefois sur le code SQL à écrire. L’exemple donné est seulement pour une valeur passée en paramètre. Je cherche comment référer à la liste de mes valeurs.

    Supposons que la liste des NoPiece est dans une requête que j’appelle ParamètreA, et le nom de la colonne est NoPièceComptable. Je veux donc référer à cette colonne, de sorte que que le SQL filtre sur toutes les valeurs de ma colonne.

    Voici la nouvelle requête de connexion à la source que j’ai créée:

    = Sql.Database(« PRODXYZ », « SQLXYZ », [Query= »SELECT * FROM Comptabilite.DetailPiece WHERE ExerComptable =’2018′ And NoPieceComptable = ParamètreA[NoPieceComptable] « ])

    J’ai un message d’erreur qui me dit
    Message=Incorrect syntax near ‘NoPieceComptable’.

    Je ne suis même pas certain que ParamètreA[NoPièceComptable] me ramènera la liste de toutes mes cellules.

    Aussi, dois-je utiliser in IN dans le SQL, plus qu’un « = »?

    Si jamais quelqu’un a un indice pour me débloquer, ça serait très apprécié!!

    Merci!

5 sujets de 1 à 5 (sur un total de 5)

Vous devez être connecté pour répondre à ce sujet.