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
)
我想在 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
)