Transformation formule DAX en langage M

Étiquetté : 

  • Transformation formule DAX en langage M

    Posté par StevannS sur 16 avril 2023 à 9h09

    Bonjour, je souhaite transformer les formules DAX suivantes en langage M dans l’éditeur Query mais il me manque qq compétences. Pourriez vous m’aider ! Je suppose que cela fonctionne avec les formules personnalisées… Je vous joins mes 3 formules :

    Ordre Mce = RANKX('BDD', 'BDD'[Site],,ASC,Dense)n****nTranche Mce = RANKX(filter(ALLSELECTED('BDD'),EARLIER('BDD'[Ordre Mce])='BDD'[Ordre Mce]), 'BDD'[Date],,ASC,Dense)n****nMce = n VAR _ThisTranche = 'BDD'[Tranche Mce]n VAR _PrevDebes = CALCULATE(MAX('BDD'[Tranche Mce]),n                                ALLEXCEPT('BDD','BDD'[Ordre Mce]), n                                'BDD'[Tranche Mce]<_ThisTranche && 'BDD'[Code message]="debes"n                            )n VAR _PrevFines = CALCULATE(MAX('BDD'[Tranche Mce]),n                                ALLEXCEPT('BDD','BDD'[Ordre Mce]), n                                'BDD'[Tranche Mce]<_ThisTranche && 'BDD'[Code message]="fines"n                            )               nVAR _Result = SWITCH(TRUE(),n                    'BDD'[Code message]="debes",1,n                    'BDD'[Code message]="fines",1,n                   _PrevDebes>_PrevFines,1,0)nRETURNn_Result

    PostID=5IwPALSWYEFc6RO

    ypicot a répondu Il y a 5 mois, 3 semaines 1 Membre · 16 Réponses
  • 16 Réponses
  • Jeremy

    Membre
    16 avril 2023 à 21h19

    Bonsoir,

    Voici mes retours. Pour info, n’ayant pas la structure et le fichier d’origine, je n’ai pas pu tester et certains changements seront peut-être nécessaires.

    La fonction Buffer permet de mettre en memoir mais elle fait perdrevle Query Folding.

    Pour Ordre Mce :

    letn    Source = Table.Buffer('BDD'),n    RankColumn = Table.AddIndexColumn(Source, "Ordre Mce", 1, 1),n    RankedTable = Table.Buffer(Table.Sort(RankColumn,{{"Site", Order.Ascending}})),n    GroupedTable = Table.Group(RankedTable, {"Site"}, {{"NewTable", each _, type table}}),n    RankDense = Table.Combine(List.Transform(GroupedTable[NewTable], (t) => Table.AddIndexColumn(t, "Ordre Mce - Dense", 1, 1)))ninn    RankDense

    Pour Tranche Mce :

    letn    Source = Table.Buffer('BDD'),n    FilteredTable = Table.SelectRows(Source, each [Ordre Mce] = _[Ordre Mce]),n    RankColumn = Table.AddIndexColumn(FilteredTable, "Tranche Mce", 1, 1),n    RankedTable = Table.Buffer(Table.Sort(RankColumn,{{"Date", Order.Ascending}})),n    GroupedTable = Table.Group(RankedTable, {"Ordre Mce"}, {{"NewTable", each _, type table}}),n    RankDense = Table.Combine(List.Transform(GroupedTable[NewTable], (t) => Table.AddIndexColumn(t, "Tranche Mce - Dense", 1, 1)))ninn    RankDensen

    Pour Mce :

    letn    Source = Table.Buffer('BDD'),n    AddCustomColumn = Table.AddColumn(Source, "Mce", each n        letn            _ThisTranche = [Tranche Mce],n            _PrevDebes = List.Max(Table.SelectRows(Source, each [Ordre Mce] = _[Ordre Mce] and [Tranche Mce] < _ThisTranche and [Code message] = "debes")[Tranche Mce]),n            _PrevFines = List.Max(Table.SelectRows(Source, each [Ordre Mce] = _[Ordre Mce] and [Tranche Mce] < _ThisTranche and [Code message] = "fines")[Tranche Mce]),n            _Result = if [Code message] = "debes" then 1 else if [Code message] = "fines" then 1 else if _PrevDebes > _PrevFines then 1 else 0n        inn            _Resultn    )ninn    AddCustomColumn

    N’hésite pas à me faire ton retour.

    CommentID=AqukF8z9RC8q5U1, PostID=5IwPALSWYEFc6RO

  • Jeremy

    Membre
    16 avril 2023 à 21h22

    J’ai ajouté des Buffer car je ne vois pas la table mais l’idéal serait de le faire directement dans la requête, soit en ajoutant des colonnes soit en créant d’autres requêtes. Mais il me manquait trop d’informations pour aller plus loin.

    CommentID=OEnBwvuDfjVID6R, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    16 avril 2023 à 23h13

    Merci beaucoup pour votre retour. Je vous transmets la table comme suit

    Merci d’avance de votre complément de réponse à l’aide de ces infos… Et encore merci !

    CommentID=DIhWcppApJmIQoD, PostID=5IwPALSWYEFc6RO

    • Jeremy

      Membre
      17 avril 2023 à 11h40

      Quelle est la table pour chaque photo ? C’est la même ? Y en a t-il d’autres ?

      SubCommentID=WsO8uG0qMUvGMsl, CommentID=DIhWcppApJmIQoD, PostID=5IwPALSWYEFc6RO

    • Jeremy

      Membre
      17 avril 2023 à 11h41

      Est-ce possible d’avoir un fichier Excel avec quelques données (pour tester l’ordre) ?

      SubCommentID=AHaxG5ydDonFSYG, CommentID=DIhWcppApJmIQoD, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    16 avril 2023 à 23h18

    Enfin, ton retour ! 😉

    CommentID=SsmhdPVrWtAV76q, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    17 avril 2023 à 11h00

    Premier test pour la fonction Ordre Mce : je n’obtiens pas un n° unique par donnée distincte de la colonne Site ? Merci d’avance.

    CommentID=1Ai1nEc7EPixLug, PostID=5IwPALSWYEFc6RO

  • Jeremy

    Membre
    17 avril 2023 à 11h37

    Pourrais-tu me donner un exemple d’un Power BI avec les données et les formules afin que je puisse répondre plus facilement stp ? Car là, sans les tables / champs, c’est assez compliqué.

    CommentID=7U7DZZcmVUKLAg0, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    17 avril 2023 à 12h45

    Hello ! ok, ci-joint un extrait de la table. Dis moi si cela te convient ?

    CommentID=TmROQua9PAIm75Z, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    17 avril 2023 à 12h46

    Les formules DAX des 3 dernières colonnes sont celles publiées plus haut.

    CommentID=0VPExYnYxXRHJaF, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    19 avril 2023 à 10h53

    Bonjour Jeremy, as tu bien récupérer les datas ?

    CommentID=BjdvcO0raXIrA26, PostID=5IwPALSWYEFc6RO

  • ypicot

    Membre
    22 avril 2023 à 15h09

    Bonjour

    Les data dans un pdf sont très souvent foireuses, et c’est le cas ici. Essaie d’importer ton pdf dans PBI, tu verras le massacre 😉

    Je pense que Jérémy Laplaine voulait parler d’un fichier .pbix, dans lequel tes données seraient stockées de façon interne (c’est à dire en utilisant “Entrer des données” dans le menu Accueil de PBI ou de PQY)

    CommentID=LSMgiLnW4nbGocB, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    23 avril 2023 à 5h27

    Merci !! Je pensais bien faire 😭…

    Je viens d’essayer de charger un fichier *.Pbix mais impossible ! Message suivant : content-type is not allowed ? Idem excel. Une idée ? Merci !

    CommentID=mcUTz6bWIOvrGXj, PostID=5IwPALSWYEFc6RO

  • ypicot

    Membre
    24 avril 2023 à 7h23

    Bonjour

    Effectivement, les formats de fichiers sont assez limités ici. On ne peut pas partager un .csv ou .txt.

    Par contre, je sais qu’il est possible de rendre public (accessible par tout le monde) un fichier ou un répertoire sur OneDrive ou un de ses petits frères (GoogleDrive, …). Ne me demande pas comment faire, car je suis une bille de première dès qu’il s’agit d’admin. Probablement un clic droit à faire qque part ou une option à activer…

    Tu pourras supprimer le lien en éditant ton msg dès que tu auras la réponse à ta question.

    CommentID=XE3EAdA7KWoeevp, PostID=5IwPALSWYEFc6RO

  • StevannS

    Membre
    24 avril 2023 à 8h21

    Hello ! Impecc. Voici le lien.

    Merci à Jeremy pour son aide à venir !

    CommentID=CLeTS2zITQPFE33, PostID=5IwPALSWYEFc6RO

  • ypicot

    Membre
    27 avril 2023 à 14h23

    Je viens de me pencher un peu sur les formules (et les regarder un peu plus en détail, à l’aide de tes données).

    Juste une petite question : est-ce que l’option “Dense” est importante ? Sa présence alourdit un peu le script en M.

    Je ne parle que pour les deux premières mesures, j’avoue avoir un peu la flemme de regarder la 3ème en détail.

    Comme souvent, il y a plusieurs approches possibles, la plus simple (vu de ma fenêtre) consistant à empiler les requêtes avec des références.

    Passer par une fonction perso n’est pas une bonne idée, car les mêmes calculs (ou presque) seraient faits pour chaque ligne, ce qui plomberait méchamment les performances.

    CommentID=zeoEguOUGKQoiKT, PostID=5IwPALSWYEFc6RO

Connectez-vous pour répondre.