Relation double sens…

Étiquetté : 

  • Relation double sens…

    Posté par StevannS sur 5 octobre 2023 à 13h06

    Bonjour, tout fonctionne parfaitement dans le présent fichier à ceci près que j’ai une relation double sens entre les 2 tables… et je crois avoir compris que ce n’est vraiment pas conseillé. Je ne vois cependant pas comment passer en 1 to many… (fonction crossfilter ?). Merci de votre aide !

    PostID=IyndyFmmRfvaVuL

    ypicot a répondu Il y a 11 mois, 4 semaines 1 Membre · 4 Réponses
  • 4 Réponses
  • DavidZed

    Membre
    5 octobre 2023 à 16h40

    Hello StevannS ,

    L’idéal pour remplacer une relation N:N, est de créer une table intermédiaire.

    Dans l’exemple cours / élèves : Les cours comportent plusieurs élèves et les élèves assistent à plusieurs cours, on a bien une relation N:N

    Dans ce cas, on peut remplacer cette liaison par une table intermédiaire, qui pourrait être “Emargement” ou présence,

    chaque cours comporte plusieurs émargements, chaque élève remplit plusieurs émargements, mais chaque ligne d’émargement ne correspond qu’à un seul cours et un seul élève.

    On a une relation : 1 cours – N émargements et N émargements – 1 élève.

    La table intermédiaire, quand elle correspond comme ici à quelque chose d’applicable dans le process, donne également l’opportunité d’ajouter des données liées, on pourrait par exemple avoir des champs date et heure de début et fin et une liaison avec une table ‘Salle de classe”

    CommentID=s85VxEexjRwYYUl, PostID=IyndyFmmRfvaVuL

  • StevannS

    Membre
    6 octobre 2023 à 6h57

    Bonjour David et merci ! Dans mon exemple, la relation de base initiale est 1N mais je l’ai mise en double sens pour up filtrer les résultats souhaités.

    Cependant les bonnes pratiques semblent déconseiller cela. Comment puis-je donc atteindre le même résultat, sans passer par une table intermédiaire (dont je connais le principe et le mode de mise en oeuvre) ?

    Merci !

    CommentID=2iH02LWy7dmKykT, PostID=IyndyFmmRfvaVuL

  • DavidZed

    Membre
    6 octobre 2023 à 15h56

    La dessus je n’ai pas eu à désactiver les filtres bidirectionnels, mais en cas d’impact sur les performances, et dans le cas où l’effet souhaité est d’avoir un filtrage dynamique dans les deux sens, il est conseillé d’utiliser le filtrage à sens unique d’une part et d’ajouter un filtre sur les visuels sur le critère “contient des données” d’autre part.

    Cela est censé reproduire la fonctionnalité de filtre bidirectionnel. En espérant que cela réponde à ton besoin.

    CommentID=4Cuude7hNRd882V, PostID=IyndyFmmRfvaVuL

  • ypicot

    Membre
    6 octobre 2023 à 18h29

    Bonjour

    Dans un modèle simple, tu as :

    • d’un coté la/les table(s) de faits, qui contient les champs nécessaires aux mesures (Chiffre d’affaires, nombre de clients, …)

    • d’un autre coté les tables de dimension (ou axes d’analyse)

    De manière intuitive, la différence entre les deux se fait avec PAR :

    • Je veux le nombre de clients (faits) PAR ville (dimension)

    • Je veux la somme des chiffre d’affaires (faits) PAR type de produits (dimension)

    Il est possible qu’une table de faits d’un visuel devienne table de dimension pour un autre :

    • Je veux le nombre de clients PAR ville sur un visuel, et le nombre de factures PAR client sur un autre visuel

    A noter que les segments sont toujours basés sur une table de dimension, puisqu’ils correspondent à un axe d’analyse.

    Il y a quasiment toujours plusieurs tables de dimension pour une table de faits.

    La relation entre la table de faits et une table de dimensions est 1 à N sauf cas exceptionnel (je n’en ai jamais rencontré hormis dans des modèles plus ou moins mal fichus dans lesquels il manquait des données).

    Le sens de filtrage est très souvent unidirectionnel, dimension vers faits.

    Le modèle que tu utilises dans le .pbix est un faux modèle à deux tables.

    Il te faudrait 3 tables, comme suggéré par David :

    • une table de dimension “étudiants” (id, nom, ville, …)

    • une table de dimension “cours”(id, matière, niveau, …)

    • une table de faits “inscriptions” (id_etudiant, id_cours, date_inscription, …)

    A partir de là, tu pourras secouer tes données dans tous les sens.

    CommentID=F94ZkyM1EFP6qUu, PostID=IyndyFmmRfvaVuL

Connectez-vous pour répondre.