10.6 SELECTEDVALUE
## SELECTEDVALUE
SELECTEDVALUE (
- SELECTEDVALUE和VALUES函数获取当前筛选上下文,而不是行上下文;
- 当具有行上下文时,第一参数引用列即可(如果在列位于关系的一端,可以使用RELATED);
- 如果引用的列在筛选上下文中返回空行,则SELECTEDVALUE返回第二个参数-不要假设仅当选择了两个或更多值时才返回第二参数;
- 如果你的DAX版本没有SELECTEDVALUE,可以使用HASONEVALUE/VALUES代替SELECTEDVALUE
用法示例
从同一张表中获取列值
比如从产品表中获取产品等级(Product Class)展示在下面的表格中Product Class :=SELECTEDVALUE(‘Product’[Class])这种写法有一个问题,没有销售额的产品也会返回对应的等级,如果要避免这种情况,可以加一个条件判断。Product Class v1 :=IF(NOTISBLANK([Sales Amount]),SELECTEDVALUE(‘Product’[Class]))Product Class v2 :=IF(NOTISEMPTY(Sales),SELECTEDVALUE(‘Product’[Class]))新的写法不会显示销售额为空的记录### 从维表中获取指定列的值 当需要从关系的多端出发获取关系一端的值时,如果存在行上下文,比如计算列,可以直接使用RELATED,无论是否存在中间表,RELATED将穿过这些关系获取指定的列值;如果是度量值环境,你需要修改筛选上下文在关系中传递的方向。以产品、产品子类别和产品类别三张表的关系为例,如果你想在矩阵或数据透视表中获得当前产品的类别,可以使用以下代码:Product Category :=CALCULATE(SELECTEDVALUE(‘Product Category’[Category]),CROSSFILTER(‘Product’[ProductSubcategoryKey],’Product Subcategory’[ProductSubcategoryKey],Both),CROSSFILTER(‘Product Subcategory’[ProductCategoryKey],’Product Category’[ProductCategoryKey],Both))使用扩展表,还有一种简单的写法Product Category exp.table :=CALCULATE(SELECTEDVALUE(‘Product Category’[Category]),’Product’)在扩展表一文中你会了解到,复杂的数据模型中,依赖扩展表很可能会带来意料之外的副作用,因此建议首选CROSSFILTER解决方案。两种写法结果相同### 在计算中引用数值列 SELECTEDVALUE简化了在计算中使用数字列(物理列)作为参数时的语法。例如,下面的度量值用销售额除以所选产品的单价,以计算销售数量。如果选择了多个产品,SELECTEDVALUE将返回空白,Calc Quantity也将是空值。Calc Quantity :=DIVIDE([Sales Amount],SELECTEDVALUE(‘Product’[Unit Price]))Audio行自动返回空### 从参数表返回所选参数 简化IF+HASONEVALUE的写法Sales by Scale :=DIVIDE([Sales Amount],SELECTEDVALUE(‘Scale’[Scale],1))————— 简化下面公式 —————Sales by Scale :=DIVIDE([Sales Amount],IF(HASONEVALUE(Scale[Scale]),VALUES(Scale[Scale]),1))当用户不小心选择多个参数的时候,公式将使用1作为分母,如果你想在发生这种情况的时候弹出人性化的提示,可以使用ERROR函数Sales by Scale Checked :=DIVIDE([Sales Amount],SELECTEDVALUE(‘Scale’[Scale],ERROR(“Single selection required”)))