第16天知识点:如何获取一行中首个和末个非空值?
超市的水果区一般会根据季节供应当季的应季水果,比如荔枝一般会在4月-7月大量供应,而冬枣一般会在10月-12月左右供应。针对这些季节性产品,它们的首次销售月份和末次销售月份肯定是不一样的。
那如果想要达到下图的效果,提取每个产品对应的首次销售额及末次销售额,该怎么做呢?
其实对于提取一行中的首个非空值及末个非空值,这种场景还是蛮常见的,那我们先来看一下在Excel中是如何操作的吧。
INDEX(B2:F2,MIN(IF(B2:F2<>"",COLUMN(B2:F2)-1)))
按【CTRL+SHIFT+ENTER】
(2)【末次记录】计算:在H2单元格输入公式:
INDEX(B2:F2,MAX(IF(B2:F2<>"",COLUMN(B2:F2)-1)))
按【CTRL+SHIFT+ENTER】
(3)选中G2、H2区域,向下拖拽将空白区域填满即可
公式解读:
(1)这是一个数组公式,所以输入完公式后必须按住【CTRL+SHIFT+ENTER】才能返回正确结果
(2)以提取A产品对应的首次记录为例,在这里对应G2单元格:
INDEX(B2:F2,MIN(IF(B2:F2<>"",COLUMN(B2:F2)-1)))
这个数组公式包含了四个函数,我们由内向外分别来解释一下作用:
COLUMN(B2:F2)-1:返回B2:F2单元格对应的列数减一,比如B2单元格返回的结果就是1,C2单元格返回的结果就是2,依此类推。
IF(B2:F2<>"",COLUMN(B2:F2)-1):B2:F2<>""表示B2:F2单元格不为空,整个函数的含义就是如果对应单元格不为空,那么就返回上一步的结果,否则返回FALSE。
注意,这里的IF函数只有两个参数,这种形式的IF函数经常应用于求满足条件的最大值和最小值,而返回值FALSE并不等同于0,这一点值得注意。
MIN(IF(B2:F2<>"",COLUMN(B2:F2)-1)):返回上一步结果中的最小值,以A产品为例,B2:F2单元格返回的结果分别为:1,2,3,4,FALSE,所以该步骤返回的结果是1。
INDEX(B2:F2,MIN(IF(B2:F2<>"",COLUMN(B2:F2)-1))):在B2:F2单元格中,返回上一步结果所对应的单元格(也就是B2)中的值,即10。
这就是Excel对应的做法,因为用到数组函数,所以对一部分小伙伴来说应该还是有些难度的。
接下来,我们看看FineBI中的做法。首先,我们先来了解一个新函数:NVL函数,语法非常简单易懂,但提取首个非空值和末个非空值效果却是杠杠的。函数具体用法可参考下方函数笔记:
(2)新增公式列--新增列名【首次记录】--输入公式:NVL(1月,2月,3月,4月,5月)--点击确定。
(3)新增公式列--新增列名【末次记录】--输入公式:NVL(5月,4月,3月,2月,1月)--点击确定。
最终结果如下:
怎么样,是不是非常简单,还很好理解。
不比不知道,一比吓一跳,原来提取一行中的首个非空值和末个非空值还有这么简单的方法。
个人感觉,这一轮FineBI完胜!你觉得呢?
今天的学习内容就到这里,感兴趣的小伙伴自己动手试一试吧!
|