FineBI:工具体验地址!
一、计算两个日期间的工作日天数
1. 概述
1.1. 预期效果
公司来了一批实习生,工资按工作了多少天进行结算。希望可以通过「开始时间」和「结束时间」,计算出他们一共工作了多少工作日。
1.2 实现思路
通过给日期进行标记,对两个日期的标记数相减,即可获得两个日期间的工作日天数。
2. 操作方式
2.1 处理日期表
1)日期表的内容格式如下表所示:
若用户自己的节假日时间与表格不同,可以对其进行更改。
2)将「日期表」上传到 FineBI 。并添加自助数据集「节假日标记表」,勾选「日期表」的所有数据。如下图所示:
3)新增一列,对日期进行 0、1 标记。是节假日的标记为 0 ,非节假日标记为 1 。如下图所示:
4)新增一列,对「0、1标记」列按照日期升序进行累加。如下图所示:
累加后的表如下图所示,可以通过「累加标记」字段直接计算得出两个日期之间的工作日天数。
例如2011-03-14与2011-03-08之间的工作日天数,只需要用对应的「累加标记值」相减:(45-41)+1=5天。
特殊情况:若开始时间是节假日,比如说 2011-03-05(节假日)与 2011-03-09 之间的工作日天数,就只要 42-39=3 即可。
2.2 计算工作日天数
1)上传「人员表」,新建一个自助数据集,并勾选人员表的所有字段。如下图所示:
2)添加 左右合并。选择「节假日标记表」的「日历、是否为节假日、累加标记」字段,合并依据选择「开始时间」和「日历」。如下图所示:
这样我们就可以将人员表中的开始时间用数字标记,并知道开始时间是否为节假日。
3)更改字段「累加标记」为「开始时间标记」,更改「是否为节假日」为「开始时间是否为节假日」。如下图所示:
4)同样的,再进行一次左右合并。选择「节假日标记表」的「日历」字段和「累加标记」字段,合并依据选择「结束时间」和「日历」,如下图所示:
此步将结束时间与它们的标记对应。
5)将「节假日标记表-累加标记」改名为「结束时间标记」。
6)新增列,计算出开始时间到结束时间之间有多少个工作日,有两种情况。写成函数后如下图所示:
7)保存自助数据集。
2.3 效果预览
计算得出的工作日天数如下图所示。例如:James 从2016-08-31实习到2016-07-04,一共实习了 43 个工作日。
二、获取指定日期后N个(时/分/秒)的日期值
1. 概述
1.1 问题描述
日期函数在平时工作与生活中使用非常广泛,在日期中添加或减去指定的时间间隔也显得尤为重要。
目前官方提供了一些日期函数的运用。详情参见:日期函数
但有时,需要获取「指定日期后N个(时/分/秒)的日期值」,如何处理呢?
1.2 实现思路
使用 TODATE 与 DATETONUMBER 函数结合计算。
2. 示例
2.1 新增字段
创建自助数据集,以当前时间now() = 「2021-03-30 15:28:53」为例,通过「新增字段」,分别获取2小时后、2分钟后、2秒后的日期值,公式如下图所示:
同理:新增字段「2小时后,2分钟后,2秒后」,公式分别为:
todate(DATETONUMBER(A1)+ 2 * 3600 * 1000) |
取2小时后 |
todate(DATETONUMBER(A1)+ 2 * 60 * 1000) |
取2分钟后 |
todate(DATETONUMBER(A1)+ 2 * 1000) |
取2秒后 |
公式解释:
序 |
公式 |
说明 |
1 |
=todate(DATETONUMBER(当前时间)+ N * 3600 * 1000) |
将当前时间转换成毫秒级+N时*每时3600秒*每秒1000毫秒,最后通过todate函数转换成标准日期值 |
2 |
=todate(DATETONUMBER(A1)+ N * 60 * 1000) |
将当前时间转换成毫秒级+N分*每分60秒*每秒1000毫秒,最后通过todate函数转换成标准日期值 |
3 |
=todate(DATETONUMBER(A1)+ N *1000) |
将当前时间转换成毫秒级+N秒*每秒1000毫秒,最后通过todate函数转换成标准日期值 |
注:公式中的字段需要从左侧字段框中选择,不能手动输入。
2.2 效果查看
保存自助数据集,如下图所示:
三、判断某日期字段是否在指定时间段内
1. 概述
1.1 预期效果
用户有时需要判断某个时间字段是否在指定时间段内,例如,判断「开票时间」是否在「入账时间」和「发货时间」之间,如下图所示:
1.2 实现思路
需要实现时间之间得比较,用 if 函数进行判断。
2. 操作步骤
示例数据:判断时间.xlsx
上传 Excel 数据集至 FineBI 中,如下图所示:
2.1 创建自助数据集
添加自助数据集,选择 Excel 数据集,并勾选所有字段,如下图所示:
2.2 判断时间
点击「+」,添加「新增列」,如下图所示:
命名新增列为「判断结果」,输入公式:if(AND(开票时间>入账时间,开票时间<发货时间),”是”,”否”) 点击「确定」,如下图所示:
注:公式框中的函数、字段都需要点击左侧的选择区域选择,不能手动输入。
公式说明:
公式 |
说明 |
AND(开票时间>入账时间,开票时间<发货时间) |
判断「开票时间」是否在「入账时间」和「发货时间」之间 |
if(AND(开票时间>入账时间,开票时间<发货时间),”是”,”否”) |
若条件为真,为“是”,否则为“否” |
四、时间函数处理null值
1. 概述
1.1 问题描述
时间字段中若有空值(null),或者时间格式不正确时,在使用公式计算时间字段时会将空值和时间格式不正确的值默认为当前时间,如下图所示:
1.2 解决思路
使用 if 函数对空值进行处理。
2. 操作步骤
2.1 操作步骤
改原有的公式 YEAR(时间) 为if(ISNULL(时间),””,YEAR(时间))
如下图所示:
五、两列时间数据取其中一列
1. 描述
场景描述:在人员简历表中,可能出现员工填写较随意的情况,比如有的人填写了中学毕业时间,有的人填写了大学毕业时间。因为员工的学历不一,因此无法通过一列数据判断该员工的最后毕业时间,此时就需要从多列数据中获取到员工的毕业时间。
应用示例:比如下图原始数据包含A和B两列数据,需要新增一列数据 C,C 的获取条件为当 A 为空的时候,拿到的是 B;B 为空的时候,拿到的是 A;当 AB 都有数据的时候,获得最大值。
如何实现:在 FineBI 中,目前可以通过 IF 函数判断来实现该场景,即判断 A 为空,取 B;B 为空,取 A;A、B 均不为空,根据 A、B 大小取值;下面我们详细介绍下在 FineBI 中实现以上示例的步骤。
2. 操作步骤
2.1 添加数据
1)下载示例数据:人员简历表.xls
2)在业务包中选择添加表>EXCEL 数据集,如下图,将「人员简历表」导入业务包中。
3)导入成功的数据预览如下图:
2.2 创建自助数据集
添加导入的表字段 A 和 B,并在左侧步骤栏选择新增列,如下图:
命名新增列为 C,获取新增列的公式如下图,为if(isnull(A),B,if(isnull(B),A,if(DATESUBDATE(A,B,”d”)>0,A,B)))。使用的函数为 if、isnull和DATESUBDATE,分别用于判断条件、判断是否为空和比较日期大小。
注:公式中的时间字段 A 和 B 不能直接输入,需要单击字段选择。
点击确定保存该新增列,则数据预览处即出现该新增列 C,如下图:
2.3 效果查看
此时我们点击右上角的保存按钮保存该自助数据集,并在业务包界面单击更新进度,显示完成后进入数据预览处,可以看到包含新增列 C 的自助数据集数据。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!