S'il vous plaît aider, j'ai ce tableau {Table1}
+----+---------+---------+-------+
| ID | Member1 | Member2 | Score |
+----+---------+---------+-------+
| 1 | John | Jack | 10 |
| 2 | Jack | John | 20 |
| 3 | John | John | 30 |
| 4 | Jack | Jack | 40 |
| 5 | Sara | Maya | 50 |
| 6 | Jack | Mia | 60 |
| 7 | Maya | John | 70 |
+----+---------+---------+-------+
Est-il possible que j'ai un slicer que par exemple lorsque je fais une sélection multiple comme {John, Jack}
il va me montrer les lignes sur lesquelles John et Jack ont travaillé ensemble
Résultat attendu:
+----+---------+---------+-------+
| ID | Member1 | Member2 | Score |
+----+---------+---------+-------+
| 1 | John | Jack | 10 |
| 2 | Jack | John | 20 |
+----+---------+---------+-------+
Jusqu'ici, j'ai essayé de créer une table personnalisée et de la placer dans le segment, mais je ne peux pas faire de sélection multiple.
Members =
DISTINCT (
UNION (
SELECTCOLUMNS ( Table1, "T", Table1[Member1] ),
SELECTCOLUMNS ( Table1, "T", Table1[Member2] )
)
)
Puis j'ai créé cette mesure dans le tableau 1 et l'ai filtrée pour afficher la valeur 1
ShowRow =
IF (
HASONEVALUE ( 'Members'[T] ),
IF (
COUNTROWS ( FILTER ( Table1, Table1[Member1] = VALUES ('Members'[T] ) ) )
|| COUNTROWS ( FILTER ( Table1, Table1[Member2] = VALUES ( 'Members'[T] ) ) ),
1,
0
)
)
Merci pour la description détaillée, votre exemple a été utile pour développer une solution. La méthode suivante devrait fonctionner:
Créez la table Members comme vous l'avez fait
Members = DISTINCT (
UNION (
SELECTCOLUMNS ( Table1, "T", Table1[Member1] ),
SELECTCOLUMNS ( Table1, "T", Table1[Member2] )
) )
Créez deux relations entre les tables. Un entre T et Member1, et l'autre entre T et Member2. Une des relations sera inactive, ce qui est bien.
Créez maintenant deux mesures pour calculer si le membre est présent dans la colonne respective. Nous pouvons sélectionner la relation que nous voulons utiliser dans chacun pour obtenir le résultat souhaité.
InMember1 = SUMX(CALCULATETABLE(Table1,USERELATIONSHIP('Members'[T],Table1[Member2])),1)
InMember2 = SUMX(CALCULATETABLE(Table1,USERELATIONSHIP('Members'[T],Table1[Member1])),1)
Maintenant, créez une mesure finale pour calculer si elles sont dans l'une ou l'autre colonne
InEither = IF([InMember1]+[InMember2]>0,1,0)
Voici un exemple de la table finale (désolé, je ne peux pas encore incorporer d'images).
Vous remarquerez que la colonne d'origine Score ne s'affiche pas pour chaque ligne en raison du fonctionnement des relations. J'ai créé une mesure NewScore pour résoudre ce problème
NewScore =
VAR Score1 = SUMX(CALCULATETABLE(Table1,USERELATIONSHIP('Members'[T],Table1[Member1])),Table1[Score])
VAR Score2 = SUMX(CALCULATETABLE(Table1,USERELATIONSHIP('Members'[T],Table1[Member2])),Table1[Score])
RETURN IF(ISBLANK(Score1),Score2,IF(ISBLANK(Score2),Score1,Score1))
Je souhaite également créer un lien vers cet article, car il peut être utile pour référence ultérieure: https://www.sqlbi.com/articles/userelationship-in-calculated-columns/
Commencez par créer une nouvelle table contenant tous les membres (et ne créez aucune relation avec elle).
Members = DISTINCT(UNION(VALUES(Table2[Member1]), VALUES(Table2[Member2])))
(Cela donnera par défaut le nom de colonne Member1
, mais renommez-le en Member
ou T
si vous préférez.)
Maintenant que nous avons cette liste, tout ce que nous avons à faire est d’écrire une mesure et de l’utiliser comme filtre.
ShowRows := IF(
COUNTROWS(
INTERSECT(
VALUES('Members'[Member]),
{MAX(Table2[Member1]), MAX(Table2[Member2])}
)
) = 2, 1, 0 )
Lorsque vous créez un segment utilisant Members[Member]
, la fonction VALUES
renverra une liste des membres que vous avez sélectionnés. Lorsque vous intersectez ceci avec Member1
et Member2
à partir de la ligne actuelle de votre table (MAX
est utilisé pour extraire chaque valeur du contexte de ligne), vous obtenez uniquement 2
si les deux membres sont dans votre sélection de segmenteur.
Il ne vous reste plus qu'à ajouter la mesure ShowRows
au filtre de niveau visuel et à la définir sur is 1
.