DavidZed
MembreRéponses céées sur le Forum
-
DavidZed
Membre4 novembre 2023 à 10h49 en réponse à: Suppression de doublons – ne garder que le dernier enregistrementHello,
Ton poste étant dans la section Dataverse, je pars du principe que tu souhaites supprimer les enregistrements ayant une date antérieure au dernier record pour chaque référence.
Tu as plusieurs manières d’y parvenir
Soit avec Power Automate :
A privilégier si la table reçoit des nouveaux enregistrements en grande quantités / à forte fréquence
-
Il faut partir sur un déclencheur “Quand un nouvel enregistrement est créé”
-
Ajouter une action “Obtenir les éléments” en filtrant (Odata) sur deux critères :
-
La catégorie = la catégorie de l’élément dans le déclencheur
-
La valeur Date < à celle de l’élément dans le déclencheur
-
-
Ajouter une action supprimer une ligne : Mettre le item de l’action précédente (ce qui va créer une boucle For Each)
Soit avec un Dataflow :
A privilégier si la table contient beaucoup d’enregistrements et surtout si beaucoup d’enregistrements sont créés (ex 1000+ / jour)
L’idée c’est de faire une requête sur ta table, réduire la table à un enregistrement par Référence avec un “group by” en se basant sur la valeur maxi du champ “Date” .
La difficulté ici c’est que pour le champ “Valeur” et le GUID qui va te permettre de supprimer les autres enregistrements lors de l’import, il y a une certaine gymnastique à faire pour récupérer les valeurs correspondantes à la dernière date.
Voici un article qui décrit le principe, étape par étape :
-
Tri par date
-
Table buffer pour charger toutes les données en cache
-
Group By avec un List. First (ou List.Max selon l’ordre de tri) pour chaque colonne doit on doit récupérer la valeur correspondante (Valeur, GUID…) Bien nommer les colonnes avec leur nom d’entrée, ce sera plus facile pour le mappage
Ensuite il faudra mapper en sélectionnant la même table et en veillant bien à cocher l’option
Il y a peut être également d’autres possibilités : Outil de suppression en blocs, plugins…
CommentID=eITVIwUP2ofAn4F, PostID=4DOQZ92DMZbUNMZ
-
-
Hello Youcef DOUMANDJI ,
Je n’ai jamais eu ce message, mais vu l’intitulé et la capture d’écran j’aurai tendance à regarder:
Est-ce que le flux est partagé en lecture (pour le “impersonation” dans le message d’erreur) ?
Est-ce que ce ne serait pas lié à la dépréciation du connecteur Dataverse legacy (actions avec logo Dataverse sur fond gris), dans le cas où cette erreur serait survenue il y a peu, alors que le flux tournait sans problèmes il y a quelques mois.
CommentID=fdLehbWnXKfK4hn, PostID=bEqN23tL6MmrpVj
-
Hello Mickael ,
à mon avis il manque un ThisRecord. ici :
Dans un Forall, tu appelles les valeurs de l’élément actuellement évalué avec ThisRecord. ou n’importe quel autre préfixe que tu détermine avec As, exemple
ForAll(Sequence(10) As ThisNumber ; {Value: ThisNumber + 1 })
Par contre ton modèle de données est assez spécial pour ce type de besoin, as-tu envisagé de faire une liste de demandes (avec le montant total) et un autre liste pour les articles, avec une colonne recherche vers la première. Ca te permettrait de recalculer le montant total avec une formule du type :
Patch('Liste des demandes' ; varDemande ; {nPTotal: Sum(Filter('Liste des articles','Col recherche de la demande'.Id=varDemande.Id );TotalLigne)n})
Ce serait moins gourmand en requêtes et plus cohérent au niveau de la donnée 🙂
CommentID=cS6BjKdP1Z5W1vf, PostID=T9vSh2cd2jtqtA5
-
Hello FRED b. ,
D’ordinaire j’utilise la fonction Filter() plutot que Search() et je n’ai jamais à utiliser IsType AsType etc…
Dans ce cas te figure j’aurai tendance à faire un simple filtre :
Non délégable donc si tu as moins de 500 à 2000 clients :
Filter(Droits;n TextInput1.Text in 'Nom de la colonne recherche Compte'.'Nom du compte'n)
Une version délégable avec startswith() si tu as beaucoup plus de clients :
Filter(Droits;n StartsWith('Nom de la colonne recherche Compte'.'Nom du compte'; TextInput1.Text)n)
CommentID=u4263Nr4WGIlH7w, PostID=2DxOurTrRtWTGdq
-
Hello Arnaud ,
Tu peux essayer un RemoveIf() cela devrait ressembler à une fonction du style :
RemoveIf(Jours_travail_sans_feries; jour in Jours_feries.date_f)
CommentID=XoDzLNixwwUUqlW, PostID=GK3QuRDEq3aHO4U
-
Bonjour Claire ,
Si ton popup est dans la galerie, voici comment je te conseille de procéder :
-
Un dans le onselect de l’icon corbeille :
UpdateContext({ctxItemToDelete:ThisItem})
-
Un dans un container nommé cntPopupDelete :
-
un label text avec le message de confirmation
-
un bouton annuler avec sur son .OnSelect :
UpdateContext({ctxItemToDelete:Blank()})
-
Un bouton confirmer avec sur son .OnSelect :
Remove('ta source de données' ; ctxItemToDelete) ;; UpdateContext({ctxItemToDelete:Blank()})
-
dans le OnVisible du container : ctxItemToDelete.ID = Thisitem.ID
-
Le popup ne devrait apparaitre que pour l’item pour lequel on a cliqué sur la corbeille
Dans ce genre de besoin, préfère les variables de contexte avec la fonction
UpdateContext()
plutot que les variables globales avecSet()
car dans ce genre de cas il n’est pas nécessaire d’avoir la valeur de ton popup dans toute l’app, elle sera utilise seulement dans cet écranCommentID=FHfHvaHSrZjELi3, PostID=LOVeuz3mpAWfRtY
-
-
Bonjour Claire ,
Tu peux, dans les paramètres avancés du déclencheur, déterminer une condition au déclenchement.
L’idée ici est d’utiliser une colonne de métadonnée avec le statut de validation du document ex: non-démarrée / en cours / Rejeté / Validé et de ne délcencher le 2eme flux que si le statut est “Rejeté”
Voici un article qui explique comment faire
CommentID=SpNhInwFIMT0u3W, PostID=dYxia3ozFgqsZ0E
-
Ce qui est faisable c’est un flow qui liste les bibliothèques SPO (avec l’action http request with sharepoint) et qui pourra renvoyer la liste à power apps.
Par contre il ne sera pas possible d’ajouter automatiquement ( et dynamiquement ) une nouvelle bibliothèque qui serait renvoyée par ce flux comme une source de données exploitable comme tel dans l’application. Tout simplement car une bibliothèque peut avoir une structure qui lui est propre avec ses colonnes de métadonnées.
CommentID=trKh3Mi4J7Nj76I, PostID=HAe0rsFp9QLb7wd
-
Hello Romane ,
Non ce n’est pas un problème de droits, c’est la vue modifiable des données des tables qui a des possibilité d’édition très limitées.
Ton champ Image sera modifiable sans problème dans un formulaire d’application Canvas ou Model-driven
CommentID=AJRnx3CgdwKzN49, PostID=n4SntvwA3S7J0y7
-
DavidZed
Membre27 octobre 2023 à 13h15 en réponse à: Regrouper informations d'une collection à 2 colonnes en une seule.hello Mickael ,
Oui tu peux le faire facilement dans ton collect ou clearcollect avec :
ClearCollect(ColAllSuppliers;n DropColumns(n AddColumns('Ta source de données' ;n "Supplier" ; // nouvelle colonne ajoutéen Coalesce(SupplierSAP,SupplierNonSAP) // si SupplierSAP est vide, on prend la valeur SupplierNonSAPn );n "SupplierSAP";"SupplierNonSAP" // on éjecte les colonnes SAP / NonSapn )n)
je n’ai pas vérifié le code donc potentiellement quelques problemes de () à régler 🙂
CommentID=IsKDpertmhlvE1E, PostID=m6ixjJ9XbQGc3tb
-
Hello Vince ,
Tu parles d’une collection au sens Power Apps ?
CommentID=KugpOPJ4YwaHKzb, PostID=HAe0rsFp9QLb7wd
-
Hello Thomas Le Large ,
Avant toute chose : Ne pas poser de questions dans la base de connaissances, il y a des sections dédiées pour chaque sujet :
Tu peux mettre dans le paramètre .Default de ton TextInput :
If(CheckBox1.Value ; "Mon texte perso";"")
ou encoreIf(CheckBox1.Value ; CheckBox1.Text;"")
si tu veux récupérer le texte de ton checkboxensuite, dans le paramètre .Reset du TextInput :
CheckBox1.Value = false
Pour réinitialiser le textinput quand on décoche le checkbox
CommentID=5qKVyuOwwyDy1wT, PostID=04QYZCGdcZkHRea
-
Le problème vient du fait que le contrôle est dans une gallerie, du coup c’est moins simple,
Une autre solution, au oncheck, patcher la source :
Il faut laisser le default de ton textinput à Thisitem.’Nom de ta colonne’
Par contre, dans le .OnCheck du checkbox :
Patch('Ta source de données ou collection'; ThisItem ; { 'Nom de ta colonne' : "Ton texte custom"} )
SubCommentID=HPfQnlrKoXtVw21, CommentID=5qKVyuOwwyDy1wT, PostID=04QYZCGdcZkHRea
-
-
Hello Data_Speacker ,
Pour ma part j’utilise Power Query dans excel avec la fonciton table/schema qui me donne une bonne base pour documenter mes lites et tables.
Il suffit juste de mettre le format de colonne automatique et d’ajouter l’étape table.schema
exemple avec une liste SP :
et comme je préfixe toujours le nom technique de mes colonnes, il est facile de les filtrer sur ce critère et d’inclure les colonnes Id et Title
CommentID=TLsvLT68nlld97k, PostID=j9isogpImizTn0d
-
Hello xbooster ,
Je n’ai pas fait attention mais le cumul de And() et de Or() est trompeur (le test sur le combobox ne doit pas être dans le
Or()
), voici une écriture simplifiée ://Code qui me filtre l'utilisateur, recherche sur TextSearchBox1 et comboBoxnFilter(n Demande_statistique;n n StartsWith(n colMAILDEMANDEUR;n utilisateurn );n n StartsWith(n colTITREDEMANDE;n TextSearchBox1.Textn ) ||n StartsWith(n colNUMERODEMANDE;n TextSearchBox1.Textn ) ||n StartsWith(n colSTATUT.Value;n TextSearchBox1.Textn );n colSTATUT.Value = ComboBox1.Selected.Value // true si le statut est sélectionné dans le ComboBoxn || IsBlank(ComboBox1.Selected) // true si aucun item sélectionné dans le combobox n)
Au lieu de faire un
And()
, on profite du fait que la fonctionFilter()
permet de fournir plusieurs tests logiques :Filter(Source ; Test1 ; Test2; ... )
et on remplace leOr()
par des||
entre les argumentsSubCommentID=xsZ7E7lOGY9ByRh, CommentID=wDOdtKmwvkEgwKZ, PostID=DUJrgwjUaYUGcBZ