SELECTEDVALUE 未返回预期值
SELECTEDVALUE not returning expected value
我在 Power BI 中创建了这个 table:
DimProduct = UNION(
ROW("ProductId", 1, "Product", "AB","ProductType","A"),
ROW("ProductId", 2, "Product", "AC","ProductType","A"),
ROW("ProductId", 3, "Product", "AD","ProductType","A"),
ROW("ProductId", 4, "Product", "BB","ProductType","B"),
ROW("ProductId", 5, "Product", "BC","ProductType","B")
)
然后我创建了这个 table:
DimProductSelectedType =
VAR vSelectedProduct=
SELECTEDVALUE('DimProduct'[Product])
RETURN
ROW("Col1",vSelectedProduct)
我将 DimProduct[Product]
放入切片器
我将 DimProductSelectedType
放入列表
我希望当我从产品切片器中选择一个产品时,它会出现在列表中。但是列表总是空白。
我原以为 SELECTEDVALUE 会反映切片器中选取的任何单个值
这是我的直接问题,可以概括为
Table columns that use DAX calcs are evaluated at import time. Measure are evaluated at runtime
我实际上的目标是:
- 在切片器中选择一个产品
- 识别该产品的产品类型
- 显示将所选产品与该产品类型中的所有其他产品进行比较的可视化效果
我实际上是从这个开始的,现在我正在努力回来。
DimProductTypeSelected =
VAR vSelectedProduct=
SELECTEDVALUE('DimProduct'[Product])
VAR vSelectedProductType=
SUMMARIZE(
FILTER(
ALLSELECTED(DimProduct),
DimProduct[Product]=vSelectedProduct
),
DimProduct[ProductType]
)
RETURN
FILTER(
ALLSELECTED(DimProduct),
DimProduct[ProductType]=vSelectedProductType
)
当您 select 切片器中的项目时,它已经在其他视觉对象上创建了 fitler 上下文,因此无需手动覆盖它。您需要做的是为所有产品创建一个 fitler 上下文,例如通过使用 ALL
或 ALLSELECTED
作为比较器。但是,为了使其成为动态的,您需要使用措施,table 是静态的,并且不会随着 UI 的变化而重新计算。
解释为什么您使用当前方法获得结果 - tables 会刷新一次,之后不会更改。因此 vSelectedProduct
始终 return 为空白,因为在刷新此 table 时 DimProduct[Product]
上没有筛选上下文,因此默认为空白
如果您创建一个度量 Measure = SELECTEDVALUE('DimProduct'[Product])
并将 DimProduct[Product]
放入切片器中,它将显示单个 select 的 selected 产品和多个 [=] 的空白28=](或所有值)
编辑
关于问题的第二部分 - selecting 产品将在其他视觉效果中仅为该产品创建过滤器上下文。然后你可以使用例如:
CountRowsPerType =
VAR vSelectedType =
SELECTEDVALUE('DimProduct'[ProductType])
RETURN
CALCULATE( COUNTROWS(DimProduct), ALL(DimProduct[Product]), 'DimProduct'[ProductType] = vSelectedType )
这将 return 计入该类型的所有产品,即使视觉效果仅显示 selected 产品
我在 Power BI 中创建了这个 table:
DimProduct = UNION(
ROW("ProductId", 1, "Product", "AB","ProductType","A"),
ROW("ProductId", 2, "Product", "AC","ProductType","A"),
ROW("ProductId", 3, "Product", "AD","ProductType","A"),
ROW("ProductId", 4, "Product", "BB","ProductType","B"),
ROW("ProductId", 5, "Product", "BC","ProductType","B")
)
然后我创建了这个 table:
DimProductSelectedType =
VAR vSelectedProduct=
SELECTEDVALUE('DimProduct'[Product])
RETURN
ROW("Col1",vSelectedProduct)
我将 DimProduct[Product]
放入切片器
我将 DimProductSelectedType
放入列表
我希望当我从产品切片器中选择一个产品时,它会出现在列表中。但是列表总是空白。
我原以为 SELECTEDVALUE 会反映切片器中选取的任何单个值
这是我的直接问题,可以概括为
Table columns that use DAX calcs are evaluated at import time. Measure are evaluated at runtime
我实际上的目标是:
- 在切片器中选择一个产品
- 识别该产品的产品类型
- 显示将所选产品与该产品类型中的所有其他产品进行比较的可视化效果
我实际上是从这个开始的,现在我正在努力回来。
DimProductTypeSelected =
VAR vSelectedProduct=
SELECTEDVALUE('DimProduct'[Product])
VAR vSelectedProductType=
SUMMARIZE(
FILTER(
ALLSELECTED(DimProduct),
DimProduct[Product]=vSelectedProduct
),
DimProduct[ProductType]
)
RETURN
FILTER(
ALLSELECTED(DimProduct),
DimProduct[ProductType]=vSelectedProductType
)
当您 select 切片器中的项目时,它已经在其他视觉对象上创建了 fitler 上下文,因此无需手动覆盖它。您需要做的是为所有产品创建一个 fitler 上下文,例如通过使用 ALL
或 ALLSELECTED
作为比较器。但是,为了使其成为动态的,您需要使用措施,table 是静态的,并且不会随着 UI 的变化而重新计算。
解释为什么您使用当前方法获得结果 - tables 会刷新一次,之后不会更改。因此 vSelectedProduct
始终 return 为空白,因为在刷新此 table 时 DimProduct[Product]
上没有筛选上下文,因此默认为空白
如果您创建一个度量 Measure = SELECTEDVALUE('DimProduct'[Product])
并将 DimProduct[Product]
放入切片器中,它将显示单个 select 的 selected 产品和多个 [=] 的空白28=](或所有值)
编辑 关于问题的第二部分 - selecting 产品将在其他视觉效果中仅为该产品创建过滤器上下文。然后你可以使用例如:
CountRowsPerType =
VAR vSelectedType =
SELECTEDVALUE('DimProduct'[ProductType])
RETURN
CALCULATE( COUNTROWS(DimProduct), ALL(DimProduct[Product]), 'DimProduct'[ProductType] = vSelectedType )
这将 return 计入该类型的所有产品,即使视觉效果仅显示 selected 产品