请帮助,我有此表{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
)
)
答案 0 :(得分:3)
感谢您的详细说明,您的示例对开发解决方案很有帮助。以下方法应该起作用:
像完成操作一样创建成员表
Members = DISTINCT (
UNION (
SELECTCOLUMNS ( Table1, "T", Table1[Member1] ),
SELECTCOLUMNS ( Table1, "T", Table1[Member2] )
) )
在表之间创建两个关系。一个在 T 和 Member1 之间,另一个在 T 和 Member2 之间。一种关系是不活跃的,这很好。
现在创建两个度量来计算成员是否在相应的列中。我们可以选择要在每种关系中使用的关系,以达到期望的结果。
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)
以下是决赛桌的样张(抱歉,目前无法嵌入图片)。
您会注意到,由于关系的工作原理,并不是每行都显示原始的得分列。我创建了一个 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/
答案 1 :(得分:0)
首先,创建一个包含所有成员的新表(并且不与其创建任何关系)。
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
。