DAX 忽略视觉过滤器上下文但保留切片器(或其他视觉)过滤器上下文

DAX ignore visual filter context but keep slicer (or other visual) filter context

我想在 Table 视觉中仅显示矩阵视觉中突出显示的值。

当我们点击 Matrix 中的 4 值时,我才想在 Table 视觉中显示该选择的详细信息。如果未过滤矩阵视觉对象,则 Table 视觉对象不应显示任何值。 (Table 视觉对象中的值已勾选“不汇总”选项,因为我想查看所有匹配突出显示的行。)

我尝试通过 DAX 度量来解决它,我可能会使用视觉过滤器:

ShowValues = HASONEVALUE( Tab[Fruit] ) && HASONEVALUE( Tab[Color] )

如果我们把它放在卡片上,这个值可以正确测量 returns。但它不会过滤 Table 视觉对象上的任何内容,因为它从 Fruit 和 Color 列获取过滤上下文,这就是为什么该条件在该视觉对象中始终为 TRUE 的原因,因为它始终具有 Fruit 和 Color 的一个值。

如何在一个视觉对象 (table) 中推断出另一个视觉对象(矩阵)仅突出显示一个值?

Tab = 
DATATABLE (
    "Fruit", STRING,
    "Color", STRING,
    "Values", INTEGER,
    {
        { "Apple", "red"    , 1 },
        { "Apple", "yellow" , 2 },
        { "Pearl", "red"    , 3 },
        { "Pearl", "yellow" , 1 },
        { "Pearl", "yellow" , 3 }
    }
)

问题可以通过 ALLSELECTED 函数解决:

ShowValues2 =
IF (
    CALCULATE (
        HASONEVALUE ( Tab[Fruit] ) && HASONEVALUE ( Tab[Color] ),
        ALLSELECTED ()
    ),
    1,
    BLANK()
)

选项 1。 我们可以将此度量添加到 table 视觉对象的筛选器窗格并将其值设置为 1。

选项 2。或者,我们可以将此度量添加到 table 视觉对象的值,它会自动仅显示非空白结果。这个选项明显比选项 1 快。

编辑。如果情况涉及维度 tables,代码会变得更加棘手。

ShowValues3 = 
IF(
    CALCULATE(
        HASONEVALUE( dim_Fruits[Fruit] ) && HASONEVALUE( dim_Colors[Color] ),
        ALLSELECTED()
    )
        && HASONEVALUE( Fact[Values] ),
    1
)

ALLSELECTED 函数只能应用于维度。

更新。出于性能原因,我最终得到:

SWITCH( TRUE(),
    NOT (COUNTROWS( Fact ) ) = 1, BLANK(),
    NOT (CALCULATE( HASONEVALUE( Dim_Fruits[Fruit] ), ALLSELECTED( Dim_Fruits[Fruit] ) ) ), BLANK(),
    NOT (CALCULATE( HASONEVALUE( Dim_Colors[Color] ), ALLSELECTED( Dim_Colors[Color] ) ) ), BLANK(),
    1
)