summarizecolumns erreur

  • summarizecolumns erreur

    Posté par Gaelle sur 15 mai 2024 à 21h30

    Bonjour à tous,

    Voici mon problème rencontré :

    Cas Usage

    J’ai sur un modèle sémantique avec 4 tables de dimension ( D1,D2,D3,D4) + 2 Tables de Fait (F1 et F2). Les dimensions D1 D2 et D3 sont liées aux tables F1 et F2 en relation type “one to many”. Toutefois, la table D4 est reliée à ma D3 en many to many.

    J’ai une mesure simple qui aggrège en SUMX une valeur dans F1, nous la nommerons ici M1 et une autre M2 , simple aussi dans la Table F2.

    Sur ce modèle je dois créer une mesure qui doit répondre à ce qui suit :

    A la granularité D1-D2-D3-D4 (clé) , si M1 > 1 sur la ligne dans F1 et que pour la même dans F2 on a M2 > 1 alors je garde M2.

    De cette façon j’ai une mesure M3 qui retiendra spécifiquement les valeurs de M2 , pour une clé de jointure D1D2D3D4 entre F1 et F2.

    DAX : SummarizeColumns

    Afin d’éviter une relation dans mon modèle entre les 2 Tables de Fait , j’ai souhaité plus simplement avoir une table virtuelle en DAX en utilisant summarizecolumns .

    Au moment de sa création, aucun soucis, mais dès lors la publication dans le Service, une erreur apparait : SummarizeColumns() and AddMissingItems() may not be used in this context.

    Je découvre à ce moment que la transition de contexte n’est pas possible (https://www.sqlbi.com/articles/introducing-summarizecolumns/). Ma mesure va fonctionner donc dans des visuels Cards mais pas des Tableaux….je vais devoir me rabattre sur une solution avec summarize + addcolumns pour faire cette mesure et assurer la transition de contexte.

    1. Summarize me semblait être déprécié , comment aurez vous donc enviager la solution ?
    2. Par ailleurs utiliser Summarize avec ma relation entre D3 et D4 est une problème pour aggréger des colonnes de différentes tables -> j’ai du faire une relation “one to many” et sinon ramener mon infos dans D3 qui elle, était directement liée à ma table de fait.
    3. je pensais également que le query plan était moins bon que summarizecolumns..dommage pour moi si c’est bien le cas
    • Ici ma proposition KO avec SummarizeColumns

    M3 : =
    VAR Mnt1= SUMMARIZECOLUMNS(D1[Code],D2[Code],D3[Code],”Mt init”,[Montant Init])RETURN
    GROUPBY(
    ADDCOLUMNS(Mnt1,”Mnt2″,[Montant 2]),
    “Mnt3”,sumx(CURRENTGROUP(),if( [Montant Init]>1 && [Mnt2]>1 , [Mnt2])))

    • Ici avec Summarize

    M3 : =

    VAR Mnt1 = SUMMARIZE(‘F1’,D1[Code],D2[Code],D3[Code],”Mt init”,[Montant Init])

    RETURN
    GROUPBY(
    ADDCOLUMNS(Mnt1,”Mnt2″,[Montant 2]),
    “Mnt3”,sumx(CURRENTGROUP(),if( [Montant Init]>1 && [Mnt2]>1 , [Mnt2])))

    Questions

    Pour toute ces raisons, pensez-vous que utilisez Summarize reste une bonne approche ?. Sinon comment aurez-vous gérer la mesure M3 ?

    Est ce normal que le soucis avec SummarizeColumns soit uniquement sur le sService et pas au moment du développement ?

    Bonne soirée ,

    Gaelle

    Jonathan a répondu Il y a 3 mois, 3 semaines 2 Membres · 1 Réponse
  • 1 Réponse
  • Jonathan

    Membre
    18 mai 2024 à 12h47

    Bonjour Gaelle,

    Difficile de vous aider sans un fichier pbix de test.

    J’ai des problèmes de compréhension dans votre demande, vous parlez de mesures M1 et M2 mais visiblement, ce ne sont pas des mesures (ou en tout cas, elles ne marcheront pas puisque les fonctions utilisées retournent des tables).

    Pour la fonction SUMMARIZE, elle n’est pas dépréciée, c’est l’ajout de colonne via cette fonctionne qui l’est (On ajoute simplement la colonne via le ADDCOLUMNS dans ce cas-là).

    De manière générale, faire des pbix de test avec des données fictives est bénéfique pour tout le monde :

    • On peut vous aider plus rapidement,
    • Vous pouvez tester plus facilement tous les cas possibles (alors que dans les données de production, on peut ne pas avoir tous les cas possibles à l’instant T),
    • Cela évite de travailler sur une trop forte volumétrie de données,
    • C’est surtout plus simple pour tester la cohérence des résultats obtenus 🙂

    Bon courage,

Connectez-vous pour répondre.