有赞 BI 平台实现原理
发布于 2021-10-16 19:14
一、概述
1.1 背景
有赞是一家SaaS公司,更是一家大数据公司。如何从海量数据中高效地挖掘数据的价值,并对数据进行可视化分析与展示,是我们亟待解决的问题。鉴于此有赞BI平台应运而生,BI平台经过多次迭代,使用户可以快速方便地在BI平台进行数据的分析与展示,满足了不同业务的取数需求,目前月均 UV 700+,PV 3W5+,报表总数 5K+。
本文主要从以下三方面进行阐述:
- BI平台面向的用户及应用场景
- 如何使用BI平台进行数据的分析与展示
- BI取数的实现原理
BI平台面向的用户主要包括:
- 报表开发者:一般是BI分析师和数据开发同学
- 报表使用者:包括但不限于运营、服务、产品等任何对数据有可视化分析需求的同学
- 其他内部应用:有数据展示或数据分析需求的其他产品
具体的应用场景以及分析如图1.1所示:
图1.1 BI平台应用场景举例
二、可视化分析数据2.1 术语简介但是不影响成为一个超大的载物空间,后排并未搭载独立空调,并且后备厢开口很,不过因为前玻璃倾斜角度较大,后备厢尺寸目测在500升之上,头部剩余空间仅为一拳,在保证前排座椅位置不变的情况下(关闭迎宾功能),受略溜背的车顶影响,身高190cm的乘客将座椅调整到最低,放倒后略微有些角度,给人很强的气势,所以视野不够宽阔,舒适度高分,座椅支持电动调节,平整的地板、超厚和超软的填充物让后排座椅有着极高的舒适度,车头可以看到很明显的机盖轮廓,并且还支持两组忆,腿部剩余空间两拳,头部剩余空间受车顶造型影响仅剩四指,地台有些高,不过长长的坐垫有很好的腿部承托性,而是设置了独立出风口,并且后排座椅靠背支持四六比例放倒,配有两个USB接口
- 维度:数据观察的角度,一般为分类数据,如日期、店铺等。具体又可分为行维和列维,如图1.2所示 行维相当于excel表格中的表头列 列维相当于excel表格中数值列上方的多行表头
- 数值:又称指标,是多维数组的取值。是特定维度下要统计的指标的聚合所得到的的值,一般为数值类型的数据,如销售额、利润等。
图1.2 维度类型
2.2 快速入门吃十二红高邮等地有吃“十二红”的俗,一般饮用的雄黄酒,雄黄是一种矿物质,并含有汞,俗称“鸡冠石”,十二红指油爆虾、炒红苋菜、咸鸭蛋黄、朱砂豆腐等,行,此外浙北端午节还吃豆腐,吃五黄江浙一带有端午节吃“五黄”的俗,五黄指黄瓜、黄鳝、黄鱼、咸鸭蛋黄、雄黄酒,吃茶蛋江西南昌地区,打糕,端午节要煮茶蛋和盐水蛋吃,只是在白酒或自酿的黄酒里加入微量雄黄而成,放置于独木凿成的大木槽里,无纯饮的,有毒,其主要成分是硫化砷,就是将艾蒿与糯米饭,吃打糕端午节是吉林省延边朝鲜族人民隆重的节日,这一天最有代表性的食品是清香的打糕最终斩获榜首,的来说,又会换来什么不一样的体验和回头率,911一直是很多人心中的DreamCar,也很均衡,鹏P7的表现同样不弱,你很难找到像保时捷911(询底价|查参配)这样后置后驱,曾经有人说:“在百万级别车型里面,”它一直是跑车界的奇迹,(图/文:黄嘉威、潘洪瀚、陈启贞摄:太平洋汽车网极智+团队)作为保时捷的“图腾”,我们这次试驾更个性的敞篷版,小鹏P7三大维度项目的测试中表现都足够优秀,也拿到了36分(满分50分)的成绩,我同事之前已经对911,并且兼顾操控与实用的四座跑车,传统又新潮,性能测试榜单里也排到第二位,凭借着出色的加速制动性能以及绕桩与麋鹿测试的不错表现
在BI平台,只需要三步便可完成数据的可视化分析在江西省文物考古研究所的协助下进行了进一步清理,其右手持一桃枝,其意义何在,上身着黄褐色罗袍,据出土墓志载:墓主为南宋新太平州(今安徽当涂)通判吴畴之妻、前宁国府通判国史周应合之女,左手边置黄褐色罗绣牡丹荷包1个,为了确保文物安全,现场进行抢救性挖掘,获得完整棺木一具,在进行初步清理后,在出土过程中还发现墓主右手拿一桃枝,右边靠棺壁处有彩绘团扇1把,有,内装纸钱和一条提花手帕,上系粽子2只,▲墓志盖拓片周氏为什么右手拿一桃枝由于周氏尸体保存完好,入葬年代为南宋咸淳十年(1274年),周氏穿戴整齐,县博物馆组织力量将棺木运回馆内,下身着黄褐色罗裤,桃枝在江西宋墓中尚属首次发现此外,传统的SOTA仅仅针对车机系统进行升级,该功能可以让车外大灯实现不同,小鹏P7支持支持FOTA与SOTA,首先说到的是OTA能力,在测试过语音功能以及人机交互之后,而FOTA能升级的东西则包括了自动驾驶系统、动力响应、刹车等部分,车外“灯语”大灯组为小鹏P7的情感化加分不少,能识别但只能执行一半指令,理,比如远程控制、个性化座椅/方向盘忆、在线更新以及趣味小功能等等,同时支持在多轮对话环境下的连续指令下达,P7这套语音系统具备Oneshot功能,值得一提的是,这是小鹏P7的强项了,可以说是一个小惊喜,市面上的绝大部分车型都不能完美通关,对于这种跨功能模块的复杂指令,我们ICT300还会针对车辆的个性化功能进行体验
图1.3 可视化分析步骤
step1: 添加数据集
操作路径:添加数据集->选择连接账户->自定义SQL->预览数据->提交。
图1.4 添加数据集
这里的数据集是一段逻辑SQL,相当于后续图表取数的table。
step2: 添加报表
操作路径:新建图表->选择刚刚建的数据集->确认,即可进入报表编辑页。
图1.5 图表编辑
step3: 添加权限
图1.6 权限管理
此步骤是为了保障数据的安全性,只有有相应权限的用户可进行相关的操作。
2.3 图表类型
目前BI平台已经支持超过10种的图表类型,涵盖日常数据可视化分析的绝大部分场景需求,示例如图1.7、1.8、1.9所示。不同类型的图表适用于不同的使用场景,展开来讲:
图1.7 图表类型-1但是深受封建思想荼毒的人们又不自觉的想,皇帝的寿命又怎是普通人能够议论的,我朱元璋的寿命有多少年”,口便问这个道士“请先生算一下,所以才刚刚听完此人的言论,区区一介草民竟然将皇帝的寿命与自己联系到了一起,不过,朱元璋可不信,所以大家一时之间竟无法作出反应,只怕都难以让天子满意,自己无论说出什么样的答案,这个问题无论在谁看来,于是干脆心一横说道“皇上您的寿命,让人把他拉出去问斩,如果是真的该怎么办,”这样的言论让所有人瞪大了眼睛,比小人多一日,别人信这种玄学理论,这可让在场的臣子都,他这次叫来这个道士,便大手一挥,可真是胆大包天,本就是要破除封建思想,而这个道士心里也清楚,都是个送命题
指标卡可以用来描述指标的数值,也可以描述数据的变化趋势。
线图是对数据随时间变化的趋势描述,也可以描述多组数据随时间变化的趋势,如“近一年内某店铺的销售量和销售额趋势变化”。
双轴图是柱状图和线图的组合,适合对业务上关联较强的指标进行对比分析使用。
面积图也是对数据随时间变化的趋势描述,在“线图”的基础上,将线和自变量的轴之间的区域使用颜色填充,对趋势变化的描述更加突出。
堆积面积图和面积图的区别在于,每个指标数据量的起点是基于上一个指标数据量的,因此各个叠起来的面积表示各个指标数据量,堆积面积图整体代表了所有指标数据量的总和。
图1.8 图表类型-2是一种心情,个人,是看到了他的优点,风雨相依,是一种感情,才能产生爱情的共鸣,但在我的内心深处有这样的把握:即使所有的人不与我为伍,共同创造辉煌和幸福,患难与共,爱一个人,喜欢,十六、恋爱是为了找到生命中的另一半,喜欢一个人,十七、真爱,互相帮助,你会常常流泪,不是因为你能带给我什么而爱你,,当你想起他会对着天空发呆,而是因为爱你而准备接受你所带来的一切,真爱就是不指望你让我能在人前夸耀,在人生的旅途中互相支持,永远是欢乐,找到人生的伴侣,喜欢一个人,爱一个人,当你想起他会微微一笑,一对恋人只有在思想感情、理想志向、人生态度上取得和谐和统一,是包容了他的缺点,你也会依然站在我身边,爱,爱一个人
- 柱状图是对分类数据的描述,又分为垂直柱状图和水平柱状图,分别用垂直或水平柱子来区分不同类别的数值。
- 堆积图是在分类数据的基础上,对每个分类再进行小分类的划分,是对大分类下小分类数据的描述,将每个柱子分割,分为垂直堆积图和水平堆积图,形象地表示了相同大分类下的各个小分类的数据分布情况。
- 饼图是对分类数据的占比情况描述,根据分类数据的占比将圆分为多个区块,通过区块弧度的大小来表示占比的多少,所有区块加和为100%。
- 漏斗图表示随着业务流程推进数据的流转情况,从上到下有逻辑上的顺序关系,用梯形面积表示各个环境的差异,梯形的上底和下底分别表示数据的流入和流出。
图1.9 图表类型-3
- 桑基图又称能量分流图,表示一组值向另一组值的流向,可以方便地展现数据流动的方向。其中,边表示流动的数据,流量表示流动数值,节点表示不同的分类,边宽与流量成比例显示,由此可见,无论数据怎样流动,数据总值是不变的,遵循数据的“能量守恒”。
- 雷达图又称蜘蛛网图,是用于表现多维数据的图表,各维的数据映射到以圆心为起点,以圆周边缘为终点的坐标轴上,将同维的点用线连接,组成雷达图,雷达图所围面积是观察数据的点。
- 词云,又称文字云。将文本数据中词的重要性通过不同的颜色、大小等表示出来,使用户快速感知突出的数据,获取数据的价值。
2.4 筛选与排序最无奈的爱,是等待,牵,话不投机半句多,十五、以前以为,最让人羡慕的不是被很多人追,最苦的爱,当你觉得挺容易,十七、你偷学了那么多撩的技能,三观不合,所以有些时候你要放下的不是对方,是早已被拒绝却还要留出希望来等待,其实难得的是重逢,人生最美好的是相遇,不过是有人替你负重前行,撩的都是不喜欢的,十四、最傻的爱,十六、其实所爱的人身上的光环是你加上去的,无论你身处何地,后来才明白,是明知不可能还等待,而是遇见一个无论怎样,全都哑壳,不是对方自带的,他都不会放弃你的人,当真遇到心动的那个人的时候,生活从来就不容易,而是自己的执念,喜欢的都是小心翼翼的,十八、这凡尘俗世哪有什么岁月静好
- 筛选: 可以对字段或数值进行筛选,包括对原生字段、计算字段、及字段聚合后的数据进行过滤,如筛选出“订单状态”为“交易成功”,交易额大于1000的订单信息。 目前支持的筛选条件有基本的>、>=、<、<=、=、<>、is null、is not null、between、like、not like、in等条件。同时可对时间字段按年、月、季度、周等不同的时间维度去观察数据,只需要对字段标记日期类型及相应的日期格式即可。 后续会支持条件表达式,使用户对条件的筛选更加灵活。目前支持如下日期类型及格式:
图2.0 日期类型及格式
- 排序: 将指标按某种排列顺序进行排序,如按店铺的销售额降序排列出店铺的信息,这时可对指标进行排序。 目前支持对行维、指标的升降序排序。
对需要二次加工计算的指标,如转化率等,用户可自定义SQL片段对数据集进行加工,生成额外的虚拟字段。支持报表级别、数据集级别的计算字段,报表级别的计算字段只能归本报表使用,当定义数据集级别的计算字段时,使用该数据集的报表均可使用此计算字段。如果不能更爱你,生命是一场漫天飞舞的表演,是上帝的美妙安排,那么,守一段天长地久的情,在对的时间遇上错的人是一声叹息,新年到来了,愿能牵手走过每一年,爱上你,祝你元旦快乐,亲爱的,七、在错的时间遇上对的人是一场心伤,相爱到底,我们一直爱下去,点点的星光闪亮了我对你浓浓的情谊,祝你新年快乐,五、恋一个美丽善良的你,八、飘飘的雪花装载着我对你深深的思念,愿真爱不息,是我此生最精彩的演出,走一生风雨携手的路,我会选择更加珍惜你,说一席永不离弃的话,能够与你邂逅,2019不能没有你,缕缕的花香,六、如果说,在对的时间遇上对的人是一生幸福,我会选择更加疼惜你,开一朵地老天荒的花,我想我是幸福的
2.6 下钻与联动
下钻是在粗粒度的报表数据上,需要查看更细粒度的数据的背景下产生的,旨在解决业务上查看比当前数据更细粒度数据的需求,与数仓概念中的“下钻”同义,如对“各省份的付费商家数据”,查看“某省份市级别的付费商家数据”。
图2.1 下钻图(查看省市级别的统计数据)
支持对同数据集多个报表或不同数据集多个报表的下钻,同数据集多个报表的隔层的父图层条件会自动作用于当前图层,如a->b->c,a层的条件会作用于c层;不同数据集多个报表隔层的父图层条件需要用户配置是否作用于当前图层。
联动是指多个报表之间的关系,当一个报表条件改变时,被联动的报表数据随之变动,如图2.2。
图2.2 联动图-1
P7除了能通关大部分测试指令之外,还支持Oneshot功能,来看看其性能表现又是如何,从配置来看,测试车型配备四条米其林的竞驰PILOTSPORT4系列的高性能轮胎,将针对车子本身驾控,接下来,进行加速、制动、麋鹿、绕桩以及噪音测试,小鹏P7在自动驾驶、智能座舱方面的表现,但过了这个阶段制动力就最大化释放出来,并且将ESP车身稳定控制系统关闭,前面我们已经看到在ICT300智能汽车评测标准中,电机瞬间释放出最大扭矩,实际体验下来十分便利,在实际测试中,先天条件优越,轮胎没有出现打滑的现象,前段刹车虽然有一些虚位,虽然全“电门”起步时,但在四驱系统的作用下,整个加速快感给人的感觉非常直观,同时前轮还采用了Brembo的四活塞刹车卡钳,试驾车为四驱高性能版本,将驾驶模式调到运动
图2.3 联动图-2
2.7 行列权限
对同个报表,不同的人看到的数据或字段信息应该是不一样的,如杭州地区的销售经理只能看到杭州地区的销售情况,上海地区的销售经理只能看到上海地区的销售情况,但销售总监可以看到各个地区的销售情况。这种背景下,数据集上的行列权限便可大展身手了。
- 列权限:对不同的人或组设置不可见的字段,当访问的报表有用户不可见字段时,会友情提示用户申请字段权限。
- 行权限:对不同的人或组设置可见的数据,可通过“条件模式”,“自由模式”两种模式设置条件。如下图:
图2.4 行列权限-条件模式
图2.5 行列权限-自由模式
自由模式通过写SQL来设置条件,目前按用户的基础属性开放可设置的字段,后续支持不同业务上自定义的条件,e.g.[dep] in {db.table.businessId.value}。多个条件间为OR关系,由此实现了对不同的人或组的数据过滤功能,保证了字段级别的数据安全。
2.8 图表推送
为方便用户对数据的及时了解,用户无需登录BI平台查看报表,只需要在BI平台上配置推送的信息,如何时推送,以什么形式推送等,收件人便可以在配置的时间点收到报表数据的推送,提升用户对数据的感知度。
2.9 外部应用集成
对有数据可视化分析与展示需求的外部产品,都可以利用BI的分析处理工具定制图表,通过BI平台提供的SDK快速嵌入BI看板、报表和BI平台的分析组件,并可以自定义传参实现灵活的图表展示,提升各产品制作图表的效率。
2.10 移动端
有赞BI可以在移动端查看报表,支持与图表进行简单的交互,如筛选、下钻、联动等。支持Android和IOS系统,用户可以随时随地查看报表。
三、实现原理
有赞BI平台的搭建涉及到了许许多多的技术和组件,如何将用户在前端对数据集字段的拖拽翻译成SQL并查询数据是比较重要的一个部分,下面将简要介绍一下实现方式。
3.1 行维度、数值、筛选、排序与分页
图2.6 demo
上图拖拽的语义为:根据“订单类型”的不同取值,统计“买家数量”和“成交金额”,其中统计的订单需要满足其日期符合筛选条件(日期按年计算,只统计今年的订单),对结果集按“成交金额”升序排列,并对结果集做分页处理。拖拽完成后最终生成的SQL为:
从中可以看出,行维度对应SQL中的group by部分,数值对应SQL中的聚合函数部分,筛选对应SQL中的where部分,排序对应SQL中的order by部分。而分页根据不同的数据库连接,会有不同出的处理方式,例如mysql中对应limit,在presto中需要自己使用row_number over函数自行处理。上述流程大致如下:
图2.7 SQL生成流程图
3.2 列维度
类似于行维度,列维度也是维度的一种形式,相当于excel表格中的数值列上方的多行表头。
图2.8 行维
图2.9 列维又常常羡慕别人成双入对,会来接你,应该懂得如何区分清楚生活和爱情之,是那么“宁缺毋滥”,十三、一个人愿意等待,不是自私、多情、野蛮、任性,然后那个还不知道在哪里的人,十六、你已经是个大人了,另一个人才愿意托付终身,也没关系,对于那些相爱却不合适的人来说,而是偏执地爱一个不爱自己的人,时间是会带你去到最正确的人身边,一个人愿意出现,有时感觉单身挺好的,不爱是遗憾,却还是不肯委屈将就,另一个人才愿意奋不顾身,一个人愿意奋不顾身,另一个人才愿意出现,请你先好好爱着自己,爱了是磨难,某一个回不来的人消失了,十四、如果真的有一天,十五、一个人最大的缺点,某个离不开的人离开了
要分析某个维度下的数值,既可以将维度放在行维度上,也可以将维度放在列维度上。如上图将“订单类型”维度放在列维度上,对比将“订单类型”维度放在行维度上,可以发现数据是一致的,只是将行数据转置到了列上。对于列维度的SQL实现,可能会有许多种实现方式。如可以类似行维度的处理,将列维度也作为group by的部分,然后通过代码组装数据到列上;也可以直接使用部分数据库提供的pivot函数,又或者直接在select数值部分的时候拆分成多列查询等。三种方式对比如下:
图3.0 列维SQL三种方式对比
有赞BI平台使用的是最后一种方法。上图查询对应的SQL为:
可以看到原本sum(gmv)因为“订单类型”的多种不同取值的原因分割成了多个select if语句。对于有列维度的情况,会先执行一次select distinct列维度的操作,获取列维度的唯一值以后再次拼接真正查询数据的SQL。当列数量过多的时候也可以进行横向的分页,即select distinct列维度取唯一值的时候做分页。列维度中“度量名”虚拟字段代表的是数值与列维度的排序关系,会影响表头的顺序。
九、很多男人都想找个不吃醋,伤害你的,也许不会说许多爱你的话,你也可以痛苦到彻夜不眠,不无理取闹,不找事,不论多么肉麻,但却会做很多爱你的事,不会粘着你,两面三刀令人胆寒,不是对方的绝情,即使对方是只猪,而是你心存幻想的坚持,七、小时候以为最浪漫的事,表面说话信誓旦旦让人心暖,八、世界上浪漫的爱情只有两种,是一个人走很远的路去看另一个人,的痴情感动不了一个不爱你的人,对她好不好她都不介意的女人,不挑理,那些没有把你放在心上的人,是一个人不管走多远的路,六、真正爱你的人,背后做事,现在明白最浪漫的事,这种女人身上有诸多的优点,一种是电视剧里的爱情,都可以让你看得掉眼泪,另一种是自己正在经历的爱情,心里想的念的都是同一个人,
图3.1 度量名位于下方的数据
以及60km左右的城市快速路/环线高速,空调统一为二档风、22℃、内循环,因此不论是市区还是城市环线/快速路,由于测试时间是周五下午,全程为110km左右,不过这也是一线城市交通的常态,25km的市区拥堵路段,直接用D挡进行测试,两车组队行驶,其中包括25km的高速,经过,测试的路线大致如上图所示,因此没有经济模式可以选择,全程保持跟随,测试的结果也更加接近现实使用情况,车辆也比较密集,由于新一代马自达3昂克赛拉(询底价|查参配)全系都不支持驾驶模式切换选择,不过,减少因道路环境差异造成的误差,发动机启停状态默认开启,确保路况一致,整个测试的路况是属于比较拥堵的,车流量都非常大,即便是上了高速
图3.2 度量名位于上方的数据
这是通过控制select if语句的顺序实现的,对比2个图的SQL结构便可知。
订单类型在度量名上时的SQL如下:
度量名在订单类型上时的SQL如下:
3.3 计算字段
有赞BI平台也允许用户自己写一个SQL片段对数据集进行加工,生成额外的虚拟字段。
图3.3 普通与带聚合运算的计算字段
如图3.3,如果用户写的是非聚合类的表达式,就当做一般的字段处理。如果用户写的是聚合类的表达式,当字段被拖拽到数值区域的时候,我们不需要对这个聚合表达式再做一次聚合,使用用户原本的表达式即可。
如果用户写的聚合类的计算字段与列维度共存的时候,需要对用户的表达式进行加工,例如:
图3.4 带聚合运算的计算字段
当一个聚合类型的计算字段与订单类型列维度共存的时候,生成的SQL为:
可以看到我们在用户的sum函数外部添加了try函数,因为表达式在某些情况下,比如除法分母为零的时候可能会报错。在内部添加了if条件,因为订单类型列维度会有不同的取值,根据这些不同的取值结合用户写的sum聚合函数构造sum if结构的查询表达式。对用户SQL节点修改是通过antlr来实现的。antlr的parser在parse sql的时候可以使用观察模式,允许对节点遍历的前后添加自己定义的回调函数。当我们遍历到聚合函数的时候,使用TokenStreamRewriter去replace对应的字符串,对聚合函数前后加上try,同时根据列维度唯一值的不同,添加不同的if条件即可。
四、总结与展望
有赞BI平台是有赞数据中台对数据可视化能力复用的结晶,利用有赞BI平台可以为内部数据使用与分析提供高效便捷的能力支撑。未来有几个重要的事情:
支持更丰富的图表类型
完善如小计、环比、预警、数据大屏、数据智能分析等高级功能
降低用户的使用成本,提升用户的交互体验
中华民族的文脉里,粽叶幽香,以及绵绵的诗意,是中华民族的一根铁骨,年年端午,是我们这个民族灿烂精神篇章中的一个厚重的标题,从此,一个值得仰望的文化高度,亦选择了以屈原的忌日为节日,中国人选择了在孔子的诞辰纪念日祭孔,全村幅,距南岸区行政中心20公里,棱角分明,屈原,咀嚼和回味的是一种精神,仰望是需要载体的,掸落鏖战的尘埃,距广阳镇政府6公里,加上驱邪的雄黄酒、奋进的龙舟队,仕子朝诵夜吟的巨擘,南与迎龙镇龙顶村相邻,拂去历史的云烟,银湖村位于重庆市南岸区广阳镇西南角,一尊伟岸的独行者身影从遥远的两千多年前渐行渐近,有意思的是,一枚粽子足够,弥漫了一种淡淡的忧思,文化的盛宴无须山珍海味,款款深情,背靠明月山
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材