Contenidos
Eh bien, maintenant vous comprenez probablement que je pense que l'éditeur tabulaire est plutôt bon. J'aime tout et j'apprends plus chaque jour. Daniel Otykier a fait un excellent travail avec ce merveilleux logiciel, et plus je l'utilise, plus je l'aime. Cependant, une chose que l'éditeur tabulaire n'a pas est une grande quantité de documentation. Il y a certainement quelque chose dans le Wiki et un peu plus dans la documentation de Microsoft, mais les non-programmeurs mortels comme moi devront simplement comprendre le reste nous-mêmes, du moins pour le moment. Mais comme le dit le proverbe, "La nécessité est la mère de l'invention". Pas de problème, il y a peu d'innovation, c'est pourquoi j'adore quand je trouve un problème à résoudre.
Puis un problème est survenu
Aujourd'hui, je travaillais avec un client. Vous disposez d'un modèle Power BI DAX complexe avec des centaines de mesures. En bref, nous avons décidé que j'allais éditer en masse de nombreuses mesures pour changer la façon dont elles étaient écrites. Le même changement dans toutes les mesures qui ont le même «problème». Je souhaite recréer un problème similaire (pas le même problème) à l'aide d'Adventure Works et partager avec vous la solution que j'ai trouvée pour résoudre ce problème à l'aide de l'éditeur tabulaire.
Définition d'un problème analogue
Supposons que vous disposiez des mesures suivantes dans le modèle de données Adventure Works.
Ventes totales de chaînes = CALCULATE (SUM (Sales [ExtendedAmount]), Products [SubCategory] = "Chains") Ventes totales de freins = CALCULATE (SUM (Sales [ExtendedAmount]), Produits [SubCategory] = "Freins") Ventes totales de plafonds = CALCULATE (SUM (Sales [ExtendedAmount]), Products [SubCategory] = "Caps")
Il y a 37 sous-catégories dans Adventure Works, alors disons que vous avez 37 mesures qui ressemblent à ceci.
Alors imaginez maintenant que vous souhaitez améliorer la lisibilité de vos mesures. Alors au lieu de ça
CALCULATE (SUM (Sales [ExtendedAmount]), Products [SubCategory] = "Chaînes")
Tu veux avoir ça
CALCULER ([Total Sales], Products [SubCategory] = "Chaînes")
Où
Ventes totales = SOMME (Ventes [ExtendedAmount])
Vous avez maintenant 37 mesures à modifier si vous souhaitez procéder au changement.
Gardez à l'esprit que peu importe si vous pensez que c'est une bonne ou une mauvaise idée d'avoir ces mesures, ou si vous pensez que c'est une bonne ou une mauvaise idée d'apporter les changements. Tout ce que je fais ici, c'est créer un cas d'utilisation pour illustrer un problème scriptable dans l'éditeur tabulaire. Si vous rencontrez un problème similaire, c'est pour vous.
Script de l'éditeur tabulaire
J'étais à peu près sûr que l'éditeur tabulaire pouvait le faire, mais sans aucune référence de langue, j'avais vraiment envie de continuer. Comme avant, j'ai regardé Wiki et a trouvé une ligne de code comme suit:
chaîne.
J'ai trouvé cela intéressant et je me suis demandé s'il existait une corde. Remplacer. Je l'ai testé en utilisant le débogueur Output () et à ma grande surprise, cela a fonctionné. Voici donc le scénario que j'ai fini par écrire.
/ * Avertissement! Prenez d'abord une copie de sauvegarde. Ce script fonctionnera sur chaque mesure du modèle. Il est essentiel que votre FromString et ToString soient configurés pour modifier uniquement l'utilisation spécifique de la chaîne que vous devez modifier sur l'ensemble du modèle. * / Var FromString = "CALCULATE (SUM (Sales [ExtendedAmount])"; var ToString = " CALCULATE ([Total Sales] "; foreach (var m dans Model.AllMeasures) {m.Expression = m.Expression.Replace (FromString, ToString); / * Parcourez toutes les mesures du modèle et remplace la FromString par la ToString * / }
Notez que Remplacer (de, à) est sensible à la casse, vous devez donc mettre correctement les majuscules et éventuellement répéter pour différentes majuscules dans les formules.
Modifier le texte dans tous les noms de mesure
Daniil de XXLBI.com m'a suggéré un autre cas d'utilisation. Disons que vous avez 50 mesures, toutes avec des noms comme:
- Ventes totales
- Ventes totales LY
- Ventes totales à ce jour
- etc
Supposons maintenant que quelqu'un décide que le terme «revenu» serait meilleur que «ventes». Avec une petite modification, mon script peut également résoudre ce problème. Au lieu de remplacer du texte dans l'expression de mesure, vous devez remplacer le nom de la mesure, comme indiqué ci-dessous.
var FromString = "Ventes totales"; var ToString = "Revenu total"; foreach (var m dans Model.AllMeasures) {m.Name = m.Name.Replace (FromString, ToString); / * Parcourez toutes les mesures du modèle et remplace la FromString par la ToString dans les noms des mesures * /}
J'ai testé ce script et je suis heureux d'annoncer qu'il a également corrigé les modifications apportées à toutes les mesures dépendantes. Ainsi, toutes les mesures faisant référence à [Total des ventes] dans la formule de mesure ont également été mises à jour et renvoyées à [Total des revenus].
Pouvez-vous penser à des problèmes que ce script peut résoudre?
J'aimerais avoir de vos nouvelles si vous pensez à un problème qui peut être résolu avec ce script. Mon intuition est qu'il y en a quelques-uns là-bas, mais j'aimerais entendre parler des tranchées si cela peut résoudre des problèmes du monde réel. Postez vos commentaires ci-dessous.
Tous mes scripts seront sur le wiki
J'ai décidé de partager tous ces extraits de code sur le wiki avec les autres créés par Daniel, vous les trouverez donc dans le à la fin de la liste ici.