Quest-ce que le self en Python ? Exemples concrets
Qu'est-ce que le self en Python ? Exemples concrets
Aujourd'hui, je veux parler d'un concept de modélisation de données appelé junk dimension . D'après son nom, vous penseriez que c'est une technique désobligeante et quelque chose que vous voudriez éviter, mais c'est en fait une approche utile.
En fait, j'ai travaillé sur une question du , et une dimension indésirable était la solution parfaite pour cela. Une fois que vous l'aurez vu et compris, vous en trouverez de nombreuses applications dans votre propre travail. Vous pouvez regarder la vidéo complète de ce tutoriel au bas de ce blog.
Table des matières
Que sont les dimensions indésirables ?
The Data Warehouse Toolkit de Kimball et Ross , l'une des bibles de la modélisation dimensionnelle, le définit comme le regroupement d'indicateurs et d'indicateurs de cardinalité généralement faible . Une faible cardinalité signifie un petit nombre d'observations uniques dans un champ donné.
Dans notre exemple, nous avons un modèle de données pour notre entreprise de construction de PC personnalisés. Le modèle de données concerne les commandes et les factures. Nous avons également un certain nombre de drapeaux où nous pouvons capturer le type de processeur , le type de configuration de tour (compact ou complet) et le but (jeu ou station de travail).
Définir les dimensions des ordures à l'aide de l'analogie du tiroir à ordures de la cuisine
Si vous regardez chacun de ces champs, il n'y a que deux observations uniques dans chaque champ. C'est ce que Kimball appellerait un indicateur de faible cardinalité . Il dit qu'en créant une dimension abstraite, nous supprimons les drapeaux de la table des faits tout en les plaçant dans un cadre dimensionnel utile.
L'analogie du tiroir à ordures de cuisine pour une dimension d'ordures est bonne. Tout le monde a un tiroir rempli d'élastiques, d'agrafes, de piles, de bougies d'anniversaire, etc. Il n'est pas important que l'une de ces choses justifie d'avoir son propre tiroir, mais vous devez avoir un endroit pour les ranger.
Les conserver peut entraîner un gonflement de la table de faits. Disons que nous avons une table de faits avec un million d'enregistrements. Nous avons construit beaucoup d'ordinateurs, et pour chaque ordinateur que nous construisons, nous devons signaler le processeur, la tour et l'objectif. Cela signifie que pour un million de lignes de PC qui ont été commandées, nous avons également 3 millions de drapeaux dans la table des faits.
Réduire la taille de la table des faits
Nous pourrions les déplacer vers une table de dimension et les lier uniquement sur l'ID de modèle pour supprimer les 3 millions d'indicateurs de la table de faits. Pour ce faire, nous pouvons créer un tableau séparé pour chacun de ces drapeaux et cela fonctionnera. Mais ce processus compliquera le modèle de données, où vous souhaitez normalement éviter les tableaux à une seule colonne.
La solution idéale consiste à utiliser une dimension indésirable , où vous avez un tas d'indicateurs de faible cardinalité qui sont liés de manière générale. Ceux-ci sont tous liés aux attributs des ordinateurs que nous construisons, mais pas d'une manière vraiment directe que vous auriez normalement pour une table de dimension spécifique.
Examen du problème du membre du forum
Jetons un coup d'œil à l'application spécifique qui a été postée sur le forum. Le membre voulait créer deux champs différents, un pour Stalled et un pour Active . Si le client a effectué une transaction au cours des 45 derniers jours, elle est signalée comme active ; sinon, il est signalé comme bloqué.
Le membre souhaitait également une autre table de dimension pour le type de client, qui est soit à plusieurs commandes, soit à une seule commande. Si le compte avait deux transactions ou plus à n'importe quel moment de l'historique en utilisant un seul numéro de compte, cela serait considéré comme un client à commandes multiples. Et s'ils n'avaient qu'une seule commande pour un numéro de compte donné, ce serait un client à commande unique.
Ce sont donc les deux drapeaux que nous voulons développer. Passons à LuckyTemplates et découvrons comment procéder.
Modélisation des données pour la dimension indésirable
Examinons le modèle de données. C'est un modèle de données très simple. Nous avons notre table étendue Dates et notre table Transactions .
Notre table de transactions ne comporte que trois champs : un numéro de compte , une date de facture et une quantité de ventes .
Généralement, si nous pouvons pousser la transformation plus près de la source, nous le ferons. Ce n'est pas dynamique au cours d'une session de création de rapports, nous n'avons donc pas besoin de le faire dans DAX .
Nous devrions le faire soit dans une requête de puissance, soit dans un entrepôt de données/SQL si nous avons cette option. Mais pour l'instant, supposons que nous ne le fassions pas et que nous le fassions simplement dans power query .
Identification du type de client pour la dimension indésirable
La première chose que nous allons faire est de déterminer le type de client, qu'il s'agisse d'une transaction à commande unique ou à plusieurs commandes. Nous utiliserons Group By , Count et Count Rows .
Ajoutez ensuite toutes les données et faites-en une opération Toutes les lignes afin que nous ne retournions pas la table agrégée, mais la table initiale avec ce nombre de lignes dans chaque ligne.
Examinons le résultat et développons-le.
Nous pouvons ajouter une colonne personnalisée et la nommer Client Type , puis créer une instruction IF. La déclaration est si Count est égal à 1, alors c'est une seule commande ; sinon, c'est multi-ordre.
Nous allons simplement changer la colonne en un type de texte. Maintenant, nous avons l'une de nos deux dimensions définies dans la table de faits.
Passons à la deuxième table de dimension. Pour celui-ci, si la commande la plus récente date de 45 jours ou moins à compter de la date d'aujourd'hui, le client est considéré comme actif. S'il n'y a pas de commande dans les 45 jours à compter d'aujourd'hui, le client est inactif.
Nous allons ajouter une colonne personnalisée et nommer la colonne Today . Ajoutez ensuite DateTime.LocalNow pour nous donner la date et l'heure actuelles, puis Date.From pour nous donner uniquement la partie date.
Changeons simplement cela en un type de données de date, puis déplaçons la colonne vers l'avant.
Il existe un moyen simple de créer une soustraction entre les deux colonnes de dates. Mettez simplement en surbrillance ces deux dates, cliquez sur Dates sur le ruban, puis cliquez sur Soustraire les jours .
Cela vous donnera la différence entre ces deux dates en termes de nombre de jours. Appelons cette nouvelle colonne Jours avant aujourd'hui.
L'étape suivante consiste à trouver le nombre minimum de jours avant aujourd'hui, c'est-à-dire la commande la plus récente pour chaque numéro de compte. Si ce nombre est inférieur ou égal à 45, il est actif.
Faisons un autre Group By , puis Advanced , puis Account Number .
Encore une fois, nous utiliserons Toutes les données pour le nouveau nom de colonne et Toutes les lignes pour l'opération.
Cette fois, nous ajouterons Minimum Days Between avec Minimum comme opération et Days Before Today comme colonne. Cela nous donnera la commande la plus récente.
Ensuite, nous développons toutes les données et supprimons le numéro de compte .
Une fois que nous aurons étendu cela, nous aurons le nombre minimum de jours entre les numéros de compte.
Enfin, nous allons ajouter une autre colonne personnalisée et l'appeler Client Timing . Nous allons mettre un paramètre de simulation où si notre Min Days Between est inférieur ou égal à 45, alors il est Active ou bien Stalled .
Suppression des colonnes inutiles
Puisque nous avons maintenant beaucoup de colonnes de support, cliquons sur Choisir les colonnes et supprimons celles dont nous n'avons pas besoin.
Nous allons supprimer les colonnes Count , Today , Days Before Today et Min Days Between . Nous n'avons plus que la table de faits d'origine, plus les colonnes Client Type et Client Timing .
Au lieu de les conserver dans la table des faits, dupliquons cette table.
Nous appellerons la table en double Account Flags .
Revenons à la table Transactions et supprimons les champs Client Type et Client Timing .
Nous avons maintenant la table de faits d'origine et la table Account Flags.
Pour le tableau Account Flags, nous n'avons pas besoin des champs Client Type et Client Timing , nous les retirons donc. Nous mettons simplement en surbrillance tous ces champs, supprimons les lignes et supprimons les doublons.
Nous avons maintenant notre table de dimension indésirable. Il ne vous reste plus qu'à cliquer sur Fermer et appliquer . L'étape suivante consiste à connecter le numéro de compte de notre table Account Flags au numéro de compte dans notre table Transactions .
Nous avons une relation un-à-plusieurs entre la table Transactions (qui est notre table de faits) et la table Account Flags (qui est notre table de dimension indésirable).
Construire vos relations de modèle de données dans LuckyTemplates
Modélisation des données dans LuckyTemplates : conseils et meilleures pratiques
Conclusion
Déposons les dimensions Client Timing et Client Type dans notre canevas et transformons-les en slicers. Nous pouvons maintenant faire exactement ce que le membre voulait faire initialement, c'est-à-dire découper en fonction de ces attributs.
Si nous cliquons sur Multi-Order, cela ne nous laissera que ceux qui ont plusieurs commandes et si nous passons à Single-Order, cela nous laissera avec ceux qui ont un achat.
Pour résumer, c'est essentiellement ce qu'est une dimension indésirable et comment vous pouvez la créer. C'est une technique très utile si vous avez un tas d'indicateurs assortis à faible cardinalité que vous souhaitez incorporer de manière efficace dans votre modèle de données.
La technique de regroupement par toutes les lignes est extrêmement utile pour créer ces dimensions inutiles. J'espère que vous avez trouvé cela utile et comme toujours.
Qu'est-ce que le self en Python ? Exemples concrets
Vous apprendrez à enregistrer et à charger des objets à partir d'un fichier .rds dans R. Ce blog expliquera également comment importer des objets de R vers LuckyTemplates.
Dans ce didacticiel sur le langage de codage DAX, découvrez comment utiliser la fonction GENERATE et comment modifier dynamiquement le titre d'une mesure.
Ce didacticiel explique comment utiliser la technique Multi Threaded Dynamic Visuals pour créer des informations à partir de visualisations de données dynamiques dans vos rapports.
Dans cet article, je vais parcourir le contexte du filtre. Le contexte de filtrage est l'un des principaux sujets que tout utilisateur de LuckyTemplates doit d'abord connaître.
Je souhaite montrer comment le service en ligne LuckyTemplates Apps peut aider à gérer différents rapports et informations générés à partir de diverses sources.
Découvrez comment calculer les modifications de votre marge bénéficiaire à l'aide de techniques telles que la création de branches de mesure et la combinaison de formules DAX dans LuckyTemplates.
Ce didacticiel abordera les idées de matérialisation des caches de données et comment elles affectent les performances des DAX dans la fourniture de résultats.
Si vous utilisez encore Excel jusqu'à présent, c'est le meilleur moment pour commencer à utiliser LuckyTemplates pour vos besoins en matière de rapports commerciaux.
Qu'est-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir