Free Trial

Base de Connaissance

Apprenez auprès des experts.
TIPS de la semaine

Chaque semaine, découvrez de nouvelles astuces et bonnes pratiques pour devenir un expert !

Voir l'index

ACE's Insight : Créer un nouvel outil pour répondre à un besoin!

Ladarthure
14 - Magnetar
14 - Magnetar
Créé

J'ai récemment développé un nouvel outil dans Alteryx, donc une macro que j'ai ensuite partagé sur la communauté. Cet outil c'est la jointure sur les plages de données, je vais vous raconter comment cela est venu ainsi que la logique derrière cet outil.

 

La naissance de l'idée

En assistant à la conférence Alteryx Inspire, on se retrouve à échanger avec d'autres utilisateurs sur différents sujets. Je me trouve à assister à une session sur le spatial dans alteryx et une question suite à la session est posée :

"Est ce que vous utilisez la logique spatiale pour répondre à d'autres problématiques non spatiales?"

 

En échangeant avec d'autres ACE qui assistaient à cette session, nous en venons à nous dire, mais il semble possible de réaliser une jointure sur des plages de données en utilisant le spatial.

 

Suite à cet échange, j'ai donc proposé de développer cet outil et de le partager auprès des utilisateurs en me disant que cela peut répondre à un besoin! Rentrons donc maintenant dans la logique qui est utilisée derrière l'outil!

 

La logique derrière l'outil

La jointure sur des plages, qu'est ce que c'est?

Alors, spoiler alert, ce n'est pas le fait de faire du alteryx sur la plage, même si cela peut être sympa, ce n'est pas ici notre sujet.

On dispose de 2 jeux de données, le premier contenant des nombres (valeurs), le second comprenant des plages de données, on cherche à savoir si nos nombres appartiennent à une plage, si oui à laquelle?

 

L'ancienne méthode, ou du moins celle que j'utilisais avant de développer cette macro était assez brutale mais répondait à ce besoin. J'ajoutais à chaque valeur, l'ensemble des plages et je vais ensuite comparer chaque valeur au début et à la fin de la plage pour ensuite filtrer pour ne garder que les nombres situés dans ces plages. L'outil bien que fonctionnel peut vite générer un gros volume de données. Passons maintenant à la méthode utilisée pour réaliser la macro.

 

La nouvelle méthode utilise une logique totalement différente. L'idée derrière la nouvelle méthode est de vérifier si un point est situé à l'intérieur d'un polygone, autrement dit de vérifier si un point réalise une intersection avec un autre objet spatial (polygone dans notre cas).

 

La problématique a donc été transformée de est ce qu'une valeur appartient à une plage à, est ce qu'un point réalise une intersection avec un polygone.

 

D'un point de vue technique et données nécessaires, il faut à minima une plage (ou une liste de plages), et des valeurs pour vérifier si elles appartiennent à la plage en question. On peut représenter par le schéma ci-dessous.

 

Ladarthure_0-1657878083238.png

 

 

 

Traduction Alteryx

 

Pour répondre à cette nouvelle problématique, il a tout d'abord été nécessaire de transformer nos valeurs en points et nos plages en polygones. Il a été simple de réaliser cette transformation en prenant un outil formule et en créant un point pour chaque valeur, chaque point ayant les coordonnées X = valeur et Y = 1 donc tous situés sur une même ligne. En ce qui concerne la plage, la méthode a été très proche mais cette fois pour créer dans un premier temps une droite ayant les coordonnées suivantes : valeur minimum de la plage, 0,9 jusqu'à la valeur maximale de la plage, 1,1. La droite générée et pour la transformer en polygone, on peut ensuite utiliser le bounding rectangle qui est un rectangle englobant l'ensemble des points de la droite.

On peut ensuite utiliser un outil Spatial Match qui permet de tester différentes relations entre des objets spatiaux, dans notre cas que le point touche ou réalise une intersection avec le polygone et ainsi voir les valeurs qui appartiennent à des plages. Une fois ceci fait, il ne reste que quelques jointures à réaliser pour récupérer les valeurs n'appartenant pas à des plages ou les plages qui ne contiennent pas de valeurs.

 

Cette macro est très simple techniquement parlant et utilise peu d'outils mais permet par contre de contourner des générations de volumes importants de données sans pour autant perdre en qualité dans l'analyse

Capture d’écran 2022-07-15 à 11.44.27.png

 

Si vous souhaitez tester la macro réalisée, vous pouvez la trouver via le lien suivant :

https://community.alteryx.com/t5/Public-Community-Gallery/Join-on-ranges/ta-p/942323

 

N'hésitez d'ailleurs pas à me faire un retour dessus pour que je puisse l'améliorer.

contributeurs
Étiquettes