La fonction Treatas DAX ne fonctionne pas comme prévu, elle renvoie une colonne vide complète

Aug 16 2020

J'essaie de comprendre la fonction Treatas DAX. Il y a deux tables Assets et Ticket . La table de tickets a une relation parent et enfant. Pour chaque valeur de Asset[AssetKey], je souhaite calculer le nombre d'enfants dans la table Ticket. Il existe deux relations entre ces tables. Un actif et un inactif.

Le problème : lorsque j'utilise la fonction Treatas, la mesure complète du nombre d'enfants est renvoyée en blanc. J'ai utilisé la formule -

Number of Child = CALCULATE(COUNT(Tickets[AssetKey]),TREATAS(SUMMARIZE(Asset,Asset[AssetKey]),Tickets[ParentId]))

Pour reproduire le scénario, suivez les étapes ci-dessous :

Etape 1 : créer la table Asset :

Asset = DATATABLE("AssetKey",INTEGER,"Name",STRING,{{1,"Australia"},
{2,"Belgium"},
{3,"Canada"},
{4,"Denmark"},
{5,"England"}})

Créer un ticket de table

Tickets = DATATABLE("AssetKey",INTEGER,"ParentId",INTEGER,"TicketKey",INTEGER,{{3,1,1},
{1,Blank(),1},
{3,1,3},
{2,Blank(),4},
{4,2,5},
{3,1,6},
{2,Blank(),7},
{4,2,8},
{1,Blank(),9},
{5,2,10}})

Étape 2 : créer une relation entre les actifs et la table Ticket (un à plusieurs) sur la colonne AssetKey.

Étape 3 : créez maintenant les mesures ci-dessous -

Number Of Tickets = COUNT(Tickets[TicketKey])

Number of Child = CALCULATE(COUNT(Tickets[AssetKey]),TREATAS(SUMMARIZE(Asset,Asset[AssetKey]),Tickets[ParentId]))

Maintenant, le problème : pourquoi la colonne Nombre d'enfants est vide.

La sortie attendue est :

Réponses

1 Aldert Aug 16 2020 at 23:23

Votre problème n'est pas le TREATAS mais le SUMMARIZE. TREATAS attend une entrée de table afin que vous résumiez.

Essayez ce qui suit :

summarizedAsset = SUMMARIZE(Asset,Asset[AssetKey])

Cela vous renvoie 1,2,3,4,5. Logique car c'est ce que vous lui avez demandé de faire. Maintenant TREATAS va faire de même sur la table Ticket. Ainsi, il renvoie une table avec une valeur de colonne "vide",1,2. Exactement ce à quoi on peut s'attendre. La prochaine chose que vous faites un COUNT sur AssetKey, cette table que vous venez de créer n'a pas cette colonne donc elle retourne vide.

Ce que vous cherchez est une colonne qui calcule les enfants :

Number of Child = 
var Akey = Asset[AssetKey]
return CALCULATE(COUNT(Tickets[ParentId]), filter(Tickets, Akey = Tickets[ParentId]))

Cela renvoie exactement ce que vous cherchiez.

PS : 10 points, vous avez fait un excellent travail sur la question posée, facile à reproduire pour les autres. Vous travaillez comme un pro !!