QR 50 – Filtrer une table externe

La question nous vient de Sylvain :
« Je suis en train de réaliser une petite base de gestion de patients pour une amie…
J’ai une table Patients liée à une table Rendez_vous.
Sur la fiche d’un patient, UNE table externe me montre ses rendez-vous. Ça marche très bien.
Sur la même fiche patient qui doit afficher la liste de tous les rendez-vous, peu importe le patient (avec un filtre pour le rendez-vous du jour qui marche très bien). Et là, ça ne marche pas… seuls les rendez-vous du patient apparaissent ».

Dans son fichier, Sylvain n’a que 2 occurrences de table : Patients et Rendez-vous, chacune basée sur la table du même nom.

Patients1

C’est un lien classique permettant de visualiser, effectivement, sur la fiche d’un patient, ses propres rendez-vous.

Sylvain tente alors de poser sur une copie de sa table externe, un filtre basé sur le calcul : Rendez_vous::Date = Obtenir ( DateActuelle ).

PatientsFiltre

La notion de filtre est intéressante. Elle est facile à mettre en place. Mais elle a deux points qui dans certains cas feront que ce n’est pas la bonne approche.

1) Ce filtre s’applique à une table externe. Et on sait qu’une table externe est déjà, en elle-même un filtre. Elle filtre les rendez-vous correspondant au patient de la fiche patient qui est active. Et le filtre de Sylvain restreint encore les rendez-vous affichés, pour ne prendre, parmi les rendez-vous de ce patient, que ceux qui sont prévus aujourd’hui. C’est donc ce que récolte, logiquement, Sylvain.

2) Le second point pouvant être gênant, est que ce filtre n’est que visuel, il ne concerne que l’affichage. Si plus tard Sylvain veut poser un décompte des rendez-vous, il n’obtiendra pas le nombre de rendez-vous d’aujourd’hui, mais celui de tous les rendez-vous. Ce n’est pas son souci du moment, mais il faut l’anticiper.

Ces deux remarques faites, comment répondre au besoin de Sylvain.

Il faut poser à nouveau la problématique de Sylvain de façon simple. On veut en fait 2 sélections de rendez-vous. La première fois, on veut les rendez-vous d’un patient précis (quelles que soient les dates). La seconde fois, on veut les rendez-vous d’une journée précise (aujourd’hui) quels que soient les patients concernés. Il y a bien 2 demandes très distinctes. On va donc avoir 2 occurrences de table.

Dans le graphe de liens, on pose une seconde occurrence de la table Rendez-vous, que l’on nomme « TousRendez-vous ».

Patients3

Le lien sera défini ainsi :

Patients4

Et oui, il n’y a pas que le signe égal comme opérateur -) (1)
Ici, on indique que l’on est relié à TOUS les patients.
Il ne reste plus à Sylvain qu’à poser son filtre sur la date du jour. Dans l’immédiat cela suffit.

Mais s’il veut faire un décompte (ou une autre opération de type statistique), le filtre au-dessus de la table externe posera un problème. Les résultats seront faux par rapport au nombre de rendez-vous affichés.

Une solution est alors d’introduire dans la table Patient une rubrique que je nomme « Maintenant« , calculant la date actuelle, et d’ajouter à mon lien une identité entre Maintenant et la date du rendez-vous.

TousRDV

J’obtiens alors tous les rendez-vous de ce jour.

Ceci dit, pensant en reparler plus tard, j’ai juste ajouté le critère  « maintenant = Date » dans le lien. Or comme me l’a fait remarqué Jérémie en commentaire (merci à lui) nous n’avons plus besoin du premier critère « Id X IdPatient », j’aurai dû penser à l’effacer, mea culpa.

Il suffit donc d’avoir :

patients7

Michel Lansard

PS : pour ceux qui ne sont pas familier des occurrences et du graphe, voir notre pack de 4 fiches astuces sur le graphe de liens FileMaker :

(1) Voir à ce sujet la fiche Astuce n°71 p. 4.

Tags: , , ,

Merci de laisser un commentaire (déjà 2 commentaires )

Désolé, les commentaires des articles réservés sont eux-mêmes réservés

  1. Bonjour Michel,

    J’ai vu ta réponse à Sylvain sur le forum. NB : je me permets de te dire tu car on a mangé ensemble à la FM Conf de 2013, à Lyon.

    Une question : à quoi sert la ligne Id x IdPatient dans la définition du lien ? Personnellement, je ne mettrais pas cette ligne.

    Cordialement,

    Jérémie Gimenez


  2. Michel Lansard
    9 ans ago

    Bien vu Jérémie et merci.
     
    Tu as raison.
     
    J’étais parti sur la question initiale de Sylvain pour avoir « tous les patients », et quand j’ai voulu introduire l’idée d’une rubrique « Maintenant » j’ai bêtement gardé la ligne Id x IdPatient, prévoyant d’y revenir éventuellement dans un autre billet. Mea Culpa.
     
    Cela illustre ce que l’on sait bien, il vaut mieux être deux et se relire 😉
     
    Michel Lansard