助けてください、私はこのテーブルを持っています{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 |
+----+---------+---------+-------+
たとえば、{John、Jack}のように複数の選択を行うときに、スライサーを使用している可能性はありますか?
ジョンとジャックが一緒に取り組んだ行が表示されます
期待される結果:
+----+---------+---------+-------+
| ID | Member1 | Member2 | Score |
+----+---------+---------+-------+
| 1 | John | Jack | 10 |
| 2 | Jack | John | 20 |
+----+---------+---------+-------+
これまで、カスタムテーブルを作成してスライサーに配置しようとしましたが、複数選択できません
Members =
DISTINCT (
UNION (
SELECTCOLUMNS ( Table1, "T", Table1[Member1] ),
SELECTCOLUMNS ( Table1, "T", Table1[Member2] )
)
)
次に、このメジャーを表1に作成し、フィルター処理して値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
)
)
詳細な説明をありがとうございます。あなたの例はソリューションの開発に役立ちました。次の方法が機能するはずです。
行ったようにMembersテーブルを作成します
Members = DISTINCT (
UNION (
SELECTCOLUMNS ( Table1, "T", Table1[Member1] ),
SELECTCOLUMNS ( Table1, "T", Table1[Member2] )
) )
テーブル間に2つの関係を作成します。 [〜#〜] t [〜#〜]とMember1の間の1つ)、および[〜#〜] t [〜#〜]とMember2。関係の1つが非アクティブになりますが、これは問題ありません。
次に、メンバーがそれぞれの列に存在するかどうかを計算する2つのメジャーを作成します。それぞれで使用する関係を選択して、目的の結果を得ることができます。
InMember1 = SUMX(CALCULATETABLE(Table1,USERELATIONSHIP('Members'[T],Table1[Member2])),1)
InMember2 = SUMX(CALCULATETABLE(Table1,USERELATIONSHIP('Members'[T],Table1[Member1])),1)
次に、最終的なメジャーを作成して、それらがどちらかの列にあるかどうかを計算します
InEither = IF([InMember1]+[InMember2]>0,1,0)
これがファイナルテーブルのサンプルです(申し訳ありませんが、まだ画像を埋め込むことはできません)。
関係がどのように機能するかにより、元のScore列がすべての行に表示されるわけではないことに気付くでしょう。この問題を解決するためにNewScoreメジャーを作成しました
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))
また、将来の参照に役立つ可能性があるため、この記事にリンクしたいと思います: https://www.sqlbi.com/articles/userelationship-in-calculated-columns/
まず、すべてのメンバーを含む新しいテーブルを作成します(そして、テーブルとの関係は作成しません)。
Members = DISTINCT(UNION(VALUES(Table2[Member1]), VALUES(Table2[Member2])))
(これはデフォルトで列名Member1
になりますが、必要に応じて名前をMember
またはT
に変更します。)
このリストができたので、必要なのはメジャーを記述してそれをフィルターとして使用することだけです。
ShowRows := IF(
COUNTROWS(
INTERSECT(
VALUES('Members'[Member]),
{MAX(Table2[Member1]), MAX(Table2[Member2])}
)
) = 2, 1, 0 )
Members[Member]
を使用してスライサーを作成すると、VALUES
関数は選択したメンバーのリストを返します。これをテーブルの現在の行のMember1
およびMember2
と交差させると(MAX
は行コンテキストから各値を抽出するために使用されます)、2
のみが取得されます。両方のメンバーがスライサーの選択に含まれている場合。
これで、ShowRows
メジャーをビジュアルレベルフィルターに追加し、それをis 1
に設定するだけです。