BI学习笔记(Day 6)——函数专题

253 阅读8分钟

FineBI函数介绍

在FineBI中,函数用于处理数据和实现简单或者复杂的计算和分析。比如以下场景中我们可能会用到函数:

  • 数值计算,例如求和、平均、最大值、最小值以及计算出业务指标等;

  • 时间计算,比如获取当前日期、计算时间差、改变时间单位(取年或月)、格式转换

  • 文本处理,比如拆分合并文本、格式规范

    ……

函数的价值在于它们能够简化一些数据处理和分析的过程,并且可以实现复杂的计算和数据转换。通过使用函数,我们可以将多个步骤合并成一个,减少了繁琐的手工操作,同时也降低了出错的可能性。

FineBI函数的使用位置(常用)

①【数据编辑】中的“新增公式列”

②【组件】中的添加“计算字段”

③【过滤】中的“添加公式”条件

FineBI函数类型

数值函数

序号常用函数用途举例
1ABS对一个数值求绝对值ABS(-1.5)等于1.5
ABS(0)等于0
ABS(2.5)等于2.5
2MAX/MIN求最大值/最小值MAX(1,2,3,4,5)等于5
MIN(1,2,3,4,5)等于1
3ROUND保留n位小数ROUND(2.149,1)等于2.1
ROUND(-1.475,2)等于-1.48
4RAND生成0-1的随机数假如需要生成一个大于等于0,小于60的随机数,使用公式:=RAND()* 60
5RANDBETWEEN返回两个数之间的一个随机整数RANDBETWEEN(12.333,13.233)只会返回13
RANDBETWEEN(11.2,13.3)有可能返回12或者13
6MOD求余数MOD(-3,2)等于1
MOD(3,-2)等于-1
7INT/FLOOR/CEILING对数值取整:INT(向下取整)、FLOOR(向0取整)、CEILING(远0取整FLOOR(-2.5)等于-2
CEILING(-2.5)等于-3
INT(-4.8)等于-5

相关链接

日期函数

序号常用函数用途举例
1YEAR/QUARTER/MONTH/WEEK/DAY……返回日期中指定时间单位的数字YEAR("2000/1/1")等于2000
2DATESUBDATE获取时间差(周、天、小时、分钟、秒)DATESUBDATE(“2008-08-08”,“2008-08-06”,“d”)等于2
DATESUBDATE(“2008-08-06”,“2008-08-08”,“d”)等于-2
3DATEDIF获取日期差(年、月、日)DATEDIF("2001/2/28","2004/3/20","Y")等于3
4YEARDELTA/MONTHDELTA/DATEDELTA某个日期后的几年/月/日YEARDELTA("2008-10-10",10)等于2018-10-10
5NOW获取当前时间
6TODAY获取当前日期
7TODATE转换日期类型TODATE(1023542354746)返回2002年6月8日
8DATETONUMBER转换成时间戳(一般用于比大小)DATETONUMBER("2008-08-08")等于1,218,124,800,000

相关链接

文本函数

序号常用函数用途举例
1SUBSTITUTE替换指定字符SUBSTITUTE("database","base","model")等于“datamodel”
2REPLACE替换指定位置字符REPLACE("0123456789",5,4,"* ")等于“0123 * 89”
REPLACE("1980",3,2,"99")等于“1999”
3SPLIT分割字符串SPLIT(“hello,world,yes”,“,”)返回["hello","world","yes"]
4CONCATENAME合并字符串CONCATENATE("Average","Price")等于“AveragePrice”
5FORMAT文本格式转换FORMAT(date(2007,1,13), “MM/dd/yyyy”) 等于 01/13/2007
6RIGHT/LEFT截取前后个字符串/截取前几个字符串RIGHT("Finesoftware",4)等于“ware"
LEFT("Finesoftware",8)等于"Finesoft"
7MID求指定位置字符串MID(“Finemoresoftware”,9,8) 等于“software”
8FIND求字符串指定字符的位置FIND("i","Information")等于9

综合应用文本函数实例:统计字段中某字符出现次数

相关链接

逻辑函数

序号常用函数用途举例
1IF条件判断IF(各门店净利润>0,"good","bad")
2Switch多条件赋值适用于多层嵌套。
注:这里的多条赋值场景其实我们还可以用数据编辑中的“条件标签列”功能。
SWITCH(1+2,3,“今天星期三”,4,“今天星期四”,5,”今天星期五”)
注:多层嵌套条件赋值推荐使用条件标签列:条件标签列
3AND且,满足全部条件AND(1+7=8,5+7=12)
4OR或,满足任一条件OR(1+7=9,5+7=11)
5IN属于,判断表达式是否属于集合IN(1,1,2,3)=1
IN(城市,"北京","上海","广州"):城市字段中属于北京、上海、广州的行=1,其余行=0
DEF(SUM(销售额),[],[IN(城市,$组件参数)]):计算属于组件参数值的城市的销售额总和
6NOT不属于,判断表达式是否不属于集合NOT(1-2>0)=1 
NOT(IN(城市,"北京","上海")):城市字段中不属于北京、上海的行=1,其余行=0

相关链接

聚合函数

什么是聚合

  1. “聚合”和数据透视表的联系:在Excel中的数据透视表实际上也是一个聚合工具。当把数据放入数据透视表,并按照某种分类汇总信息时,他们是在对数据进行聚合。
  2. 在组件中的聚合:例如,一个商品销售数据表,包含了每天的销售额。如果要计算每个月的总销售额,需要按照月份分组,再把把所有天的销售额加起来,这个过程就是聚合。
  3. 优势与作用:通过聚合,可以把大量复杂的数据简化,并提炼出总体的信息为更易于理解和分析的形式,帮助做出更明智的决策。


相关链接

聚合计算和明细计算

image.png

相关链接

聚合函数&案例演示

  1. 聚合函数有哪些
序号常用函数用途
1SUM_AGG对指定维度(拖入分析栏)数据进行汇总求和
2AVG_AGG根据当前分析维度,返回指标字段的汇总平均值,生成结果为一数据列,行数与当前分析维度行数一致。
3COUNT_AGG对指定维度(拖入分析栏)数据进行计数(非空的单元格个数)
4COUNTD_AGG对指定维度(拖入分析栏)数据进行去重计数(非空的单元格去重个数)
.........
  1. 聚合函数的使用场景是什么?
    一般我们会使用聚合汇总后的值进行再计算。 随着分析维度的切换,计算字段会自动跟随维度动态调整。

  2. 为什么在组件中才可以使用聚合函数?
    编辑数据中都是针对个体的行级别的计算,组件中可以指定维度进行聚合计算

  3. SUM_AGG(A/B)和 SUM_AGG(A)/SUM_AGG(B)有什么区别呢?
    先相除再汇总还是先分别汇总得到各自的总值再相除

SUM_AGG(A/B)和SUM_AGG(A)/SUM_AGG(B)有什么区别呢?

  • 先相除再汇总还是先分别汇总得到各自的总值再相除

    image.png

相关链接

分析函数

DEF,即define的缩写,意为定义你想要的所有指标。你可以在分析主题的数据层以及在组件中创建计算字段时使用它。函数语法:DEF(聚合指标, [维度1,维度2,...], [过滤条件1, 过滤条件2,...]) 其中维度和过滤条件可以缺省。它由三个参数构成,首先是定义计算的方式,即语法中的“聚合指标”。第二个是执行聚合计算时的维度,第三个则是计算前对数据的过滤条件。

举例:计算2013年各省的销售总额:DEF(sum_agg(销售额),[省份],[年份=2013])

解释:参数2-维度中我们选择了【省份】,于是基于“省份”对参数1中的【销售额】字段进行【sum_agg】计算,同时,由于参数3-过滤条件中,限制了年份要2013年,所以只得出2013年的销售总额。

相关链接

FineBI函数最佳实践技巧

函数最佳实践技巧五步法

01【明确业务需要】:

场景背景: 某网站的运营人员想要就用户的激活登录信息分析出网站的用户留存情况,来制定接下来的用户运营策略。现有一张“用户登录信息”表,运营人员想要通过该表分析出用户的每日的新增用户数、当日留存率、次日留存率、三周留存率……

指标定义:
留存率 = 新增用户中登录用户数/新增用户数 * 100%
N日留存人数:指新增用户日(T)之后的第N日,依然登录的用户数
N周内留存率:指新增用户日之后,"注册(激活)-登录时间差"为 1~7N(含) 天的登录用户数 / 新增用户日总人数

注: 一般情况下登录时间晚于注册时间,但是可能会存在部分“游客”用户先登录体验后注册身份。

02【梳理计算步骤】
① 梳理字段:有登录时间、激活时间……等字段,各字段所代表的含义是……
② 是否需要规范字段/数据清洗
③ 求出每日的新增用户数,求时间差,求新增用户中登录的用户数
④ 相除求留存率 ……

03【找到合适的函数】
计算日期差(日)函数用DATESUBDATE/DATEDIF函数或者使用快捷功能“时间差”;
计算去重用户数用COUNTD_AGG函数或者用记录数(去重)

04【正确使用函数】

05【函数校验】

相关链接