其实还有个函数与COLLAPSE的用法相似,但是功能相反,它就是EXPAND函数,这篇文章就来看看它是怎么用的,以及有哪些应用场景。EXPAND函数也只能用于可视化计算,官方对该函数的介绍是:检索与当前上下文相比具有更多细节级别的上下文。如果提供了表达式,则在新上下文中返回其值,从而允许在层次结构中导航并在更详细的级别进行计算。简单来说,EXPAND函数展开当前的视觉上下文,向子级也就是更明细级别的上下文中计算;而COLLAPSE函数折叠当前的视觉上下文,从父级也就是更高级别上取数。1. 只有轴作为参数时,检索比当前上下文更低级别的上下文,可以用作CALCULATE函数的调节器。最大值 = CALCULATE(MAX([销售额]),EXPAND(ROWS))
- 在产品名称上下文中,由于没有更明细的级别,所以它返回的值还是本产品的销售额。
- 而在产品类别上下文,返回是它的子级,也就是产品名称销售额的最大值。
- 最后一行总计,它的子集是产品类别,所以返回的是三个产品类别销售额的最大值。
这里需要注意的是,由于本级别的子级,也就是明细级别,会存在多个值,所以需要使用聚合函数,来对多个值进行聚合,返回多个值的最大值、最小值、平均值、合计值等。这是不同于COLLAPSE函数的地方,因为每个上下文的一层父级只有一行,不需要使用聚合函数。并且只有在可视化计算中,才能将度量值直接用于聚合函数的参数,如果你建普通的度量值也这么写,这是不允许的。由于这个矩阵的层级都位于行标题,所以轴用的是ROWS;如果你的层级位于列上,还可以改成COLUMNS,关于方向轴的具体用法见前面RUNNINGSUM的介绍。如果要向下展开2级的最大值,第2参数可以写成2(省略时默认为1,展开下1级),上面的可视化计算公式改成:最大值2 = CALCULATE(MAX([销售额]),EXPAND(ROWS,2)) 由于只有最后一行总计行,可以向下展开2个级别,所以只有它发生了变化,返回的是第二层明细,也就是子级的子级,产品名称的最大销售额。EXPAND的参数也可以不用轴,而用固定的层级字段来代替,还可以这么写:最大值3 = CALCULATE(MAX([销售额]),EXPAND([产品名称])) 这种写法,无论是哪个层级,它将会固定的向下展开产品名称级别进行计算,返回产品名称的最大的销售额。 除了上面的写法,EXPAND函数与COLLAPSE一样,也有第二种写法。 2. 用表达式和轴同时作为参数,则可以直接返回明细上下文的值,不再需要CALCULATE。最大值4 = EXPAND(MAX([销售额]),ROWS)
最大值5 = EXPAND(MAX([销售额]),[产品名称]) 这种写法更加简洁,结果与上面用CALCULATE的对应写法完全一样。还有一个类似的函数EXPANDALL,它和EXPAND一样也有上面两种写法,不过它的轴只能是轴参数ROWS/COLUMNS,不能是字段,它聚合最低层级,也就是最明细层级的数据。最大值6 = EXPANDALL(MAX([销售额]),ROWS) 通过上面的介绍和EXPAND函数计算的结果,可以看出,对于明细行,其实它和原度量值的结果一样,它的效果在于每个层级的总计行,所以可以利用它来定义总计的数据。上面用MAX函数返回的是最大值,还可以用其他聚合函数,比如用AVERAGE函数,让总计行等于下级的平均值。平均销售额 = EXPAND(AVERAGE([销售额]),ROWS) 还有关于总计行不等于明细行之和的问题,以前用的是SUMX函数来修正,现在也可以通过可视化计算的EXPAND来解决这个问题了。 如果想让总计行等于明细行之和,只需要新建可视化计算:客户数 总计修正 = EXPAND(SUM([客户数]),[产品类别]) 以上就是关于EXPAND函数和基本应用场景的介绍,更多关于可视化计算的系列文章请参考:深入了解Power BI可视化计算(1):RUNNINGSUM运行总和
深入了解Power BI可视化计算(2):MOVINGAVERAGE移动平均
深入了解Power BI可视化计算(3):占比和COLLAPSE 函数
深入了解Power BI可视化计算(4):像Excel一样轻松引用"单元格"
|