无需学习Python,一个公式搞定领导想看的大屏
摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
不要让“做不了”成为数字化转型的障碍
随着数字化的脚步加快,越来越多的企业开始注重数据的展示和报告。原有数据的整合,清洗,二次加工变得越来越普遍。为了实现以上功能,企业不得不花大量的人力、物力去做原始数据的加工,但是由于业务场景的快速变化,导致原有代码里面写死的数据处理逻辑和现实的需要产生严重的偏离。针对这些,迫切希望有一个能自己实现数据处理,然后将处理结果进行多维度展示的工具。那么今天,就给大家推荐一款软件工具——Wyn商业智能软件。
作为一款BI软件,Wyn商业智能软件本身支持各种炫酷的可视化展示能力以及自助式BI分析能力,基本可以满足企业绝非大部分数据展示的需求。灵活的嵌入式能力,让使用者可以真正做到无感代入。而且随着产品的发展,更多强大且灵活的表达式也被依次引入,使得他可以面对越来越多的用户场景,今天,给大家带来几个常见的用户场景,来看看如何用公式一键实现领导想看的所有数据,轻松做出一张领导满意的大屏。
强大的数据分析能力-表达式分析(附带Demo)
介绍表达式之前,先大概介绍一下软件的应用界面和一些基本的使用方法。(本次重点介绍的是Wyn商业智能软件仪表板设计器层面的直接分析方法。所有方法都可以直接在仪表板上添加)
分析表达式支持两种:计算列和度量值。
计算列:是指在原表的基础上新增一列,新增的列相当于新的字段被使用,通常被用作过程计算的分析和创建新维度分析,也可以用作直接计算使用。
度量值:度量值需要做一定的聚合运算,它会在你绑定分类的基础上,去计算你设置的表达式,所以更多是在维度分析的基础上做计算分析,产生的结果也只能被用在数值字段上,因为其中的数据本身就是被计算出来的结果。
表达式界面基础介绍:
有几点可以特别留意一下:
1)在书写表达式的时候,通常可以将比较困难的表达式拆分为多个表达式。例如(a+b)*c,我们可以先将a+b计算的结果作为一个新的计算列,然后这个计算列会作为一个新的字段被再次复用去乘c,这样就可以抽取共享字段,提高复用性。
2)合理利用Filter、calculate等过滤函数,可以一定程度加快表达式的计算,当不再需要某些值时,减少过多的if使用,而是直接将这些数据过滤掉,提高表达式速度。
可以使用“//”写注释,同时,在一些表达式里面加上自己的备注,方便以后阅读和其他人的接手。
3)在使用的过程中 ’ ’ 单引号中间是写“表名”、 []中括号中间写“字段名”、 “”双引号代表“字符串”。例如: ’销售明细’[订单金额] 代表的是销售明细表的订单金额字段,在多个表没有字段名重复的时候,可以直接使用[]引用字段,不带表名。(注意:所有都是英文字符)
具体详细了解可以参考帮助文档的介绍(https://www.grapecity.com.cn/solutions/wyn/help/docs/wax),这里就不多做赘述了。直接开始表达式介绍:
- 同比-环比
相信在很多分析场景中,同比和环比永远都不会缺席,无论是在月度分析,季度分析还是年度分析的。大家都会关注相对于上个时间维度,或者同期维度的变化情况。这也是基础的、领导想看到的数据对比方式。
同比分析:
年度同比其实就是计算当前年的总合计和上一年的总合计,然后计算同期增长率即可。
所以第一步,计算去年合计:
var basetable = SelectColumns(
'同比测试',
"年度", '同比测试'[下年度],
"订单金额",'同比测试'[订单金额])
return Calculate(
SumX(basetable,[订单金额]), Values([年度]))
上述表达式中,首先创建了一个临时表,在临时表中新增两个字段,年和金额。其中,年取的是当前年的下一年,也就是年度+1。而这个年就是下一个表达式中我们用作过滤的条件。
第二个表达式先用新建的表做一个金额的求和,然后再去过滤“年”字段(values[年度])。因为实际取值的时候,会根据关联过滤,取到对应同比的值,再去计算同比即可。具体可以参考下面图解。
Divide('同比测试'[当前年合计] - '同比测试'[去年合计], '同比测试'[去年合计])
最后一步就是求同比,这个表达式就很简单,使用今年合计减去去年合计,然后除去年,就是增长率了。
环比分析:
有了同比的基础,环比其实也是同样的道理。同比是取去年的,而环比是取上个季度或者上个月度的。以同季度为例,表达式如下:
var basetable = SelectColumns(
'同比测试',
"年度", '同比测试'[环比年度],
"季度", '同比测试'[环比季度],
"订单金额",'同比测试'[订单金额])
return Calculate(
SumX(basetable,[订单金额]), Values([年度]))
其原理还是一样的,首先新建一个临时表,使用临时表的环比年度和环比季度做计算。这里可以参考上一个同比年的理解,当计算对象为前三个季度时,自然无需做任何处理,自然加一即可,但是当你是第四季度时,这时候不存在第五季度,所以就需要配合年度,年度先加一,然后季度返回第一季度,也就是返回第二年的第一季度。做好之后,按照上面的方式做计算和过滤,传年做过滤即可。
数据准备好之后,就是展示环节了。简单的将系统所做的数据拖拽到页面上,就可以看到效果了:
至此,一个同比-环比的分析就做好啦。
- 区间分析
在经营分析场景中,往往会看到满屏的销售数据,不同地区的销售额度杂乱无章的摆放着,没有做任何区分。这个时候就需要对最终的数据做区间分析了。比如想知道销售额度在100w-200w的有哪些地区,200w-300w的哪些地区。
针对这种场景,应该怎么实现呢?先一起来梳理一下思路:
首先明确是否要按不同地区求金额的总和,然后要把这些地区划分出来,按不同销售额度来进行划分。这样就可以将数据划分为多个区间进行分析。具体的实现方法如下:
var sales = SUMX('订单明细','订单明细'[购买数量]\*'订单明细'[订单单价])
var sales1 =
calculate(sales,Values('销售大区'[大区]))
var categories=
SWITCH(
TRUE,
sales1 \< 8000000, "小于800万",
sales1 \>= 8000000 && sales1 \< 12000000, "大于800万小于1200万",
sales1 \>= 12000000 , "大于1200万"
)
return categories
上述的第一步就是求金额的总和,求出来后就要按照大区做一个过滤。这个过滤会在数据绑定时自己做过滤,然后把求出来的金额按照想要的区间进行划分,从而就可以得到新的字段(计算列),同时可以对数据做了划分。接下来就是数据展示的环节了:
- RFM模型分析
除了上面介绍的常见应用,在销售指标方面RFM模型也是非常重要的一个衡量指标。它可以用来分析客户价值,让分析者能更清楚的知道哪些客户更重要。
- R (Recency),最近一次消费时间间隔
- F (Frequency),消费频率
- M (Monetary),消费金额
一般来说,最近一次消费的间隔越短、消费频率和消费金额越高,客户价值越大。而基于这个原理,就需要去计算对应的平均R,F,M分别是多少,然后再去对比这个客户相对于平均值是大于还是小于。大于平均值的自然就是价值更高的。
有了思路就开始,先计算平均R,F,M
R_Avg
CALCULATE(
AVERAGEX(
SUMMARIZECOLUMNS(
'Customer'[Name],
"rdayValues",
datediff(
'Sales'[Rday],
'Sales'[Rmax],
day
)
),
[rdayValues]
),
REMOVEFILTERS('Customer'[Name])
)
上述datadiff求的就是客户最后消费日期距离业务最新成交日期的天数,然后全部求平均值。因为是平均值,所以也要去除过滤器,否则绑定分类的时候会自动做分类。
F_Avg
CALCULATE(
AVERAGEX(
SUMMARIZECOLUMNS(
'Customer'[Name],
"fCount",
calculate(
DISTINCTCOUNTX('Sales','Sales'[Order Number])
)
),
[fCount]
),
REMOVEFILTERS('Customer'[Name])
)
这里其实就是求客户消费的不重复计数,也就是DISTINCTCOUNTX,然后再求所有的平均值和去除过滤,和之前一样
M_Avg
CALCULATE(
AVERAGEX(
SUMMARIZECOLUMNS(
'Customer'[Name],
"mValues",
calculate(
'Sales'[M]
)
),
[mValues]
),
REMOVEFILTERS('Customer'[Name])
)
最后就是消费金额的平均值,表达式中的【M】已经做了聚合,然后依旧是平均和去除过滤。
上述都是计算的平均值,也就是计算的对比字段,用来衡量客户的消费情况,之后就是计算每个客户自己的值。上述表达式中我们可以看到,每个最后都用到一个removeFilters。这个作用就是去除过滤。而作用就是Wyn实际计算会根据你绑定的分类做统计,也就是值会因为绑定的分类而不一样,所以每个客户的实际值计算也就很简单,把上面的所有表达式去除AVEGAGEX,去除removeFilters。也就是去除求平均,去除过滤器。就是每个客户自己的数据:
R:DATEDIFF( 'Sales'[Rday], 'Sales'[Rmax], Day )
F:DISTINCTCOUNTX('Sales','Sales'[Order Number])
M:SUMX( 'Sales', 'Sales'[Quantity]\*'Sales'[Net Price] )
然后用每个客户自己的值去和平均值做判断,就可以求出这个客户是不是更有价值。通过这样的方式,可以把所有的数据做一下区分:
R↑F↑M↑:重要价值客户
R↑F↑M↓:一般价值客户
R↑F↓M↑:重要发展客户
R↑F↓M↓:一般发展客户
R↓F↑M↑:重要保持客户
R↓F↑M↓:一般保持客户
R↓F↓M↑:重要挽留客户
R↓F↓M↓:一般挽留客户
那么就针对这个求它的价值,三个维度其实都是同理的:
R:IF( 'Sales'[R]\<='Sales'[Ravg], "R_UP", "R_DOWN" )
F::IF( 'Sales'[F]\<='Sales'[Favg], "F_UP", "F_DOWN" )
M:IF( 'Sales'[M]\<='Sales'[Mavg], "M_UP", "M_DOWN" )
到此为止,一个客户价值分析的数据模型便已经成型。一起来看看最终的展示结果吧:
介绍了这么多,相信大家也看到了Wyn商业智能软件强大和炫酷的界面。这里只是简单的介绍了几种方法,实际包含几十种不同的表达式,从时间、文本、数字等多层面都对数据可以分析。而且除了文章中提到的表达式,Wyn商业智能软件还提供了图表上可直接设置的排序、过滤、排名和字段格式化能力。让使用者轻松地就可以做出来一款完整的BI看板。
Wyn商业智能软件除了在BI设计层面可以做表达式计算,在数据获取层面也可以做表达式计算、分组计算以及权限控制等完整的功能。作为一款B/S架构的软件,客户只需要能访问服务器即可做出属于自己设计和展示的大屏。
除此之外,Wyn商业智能软件提供了上百个不同的接口,让使用者可以无感的嵌入到已有的系统或产品中。调用者可以单独做查看,单独调用接口获取平台数据等等。并且本身附带完善的权限控制,保证信息不外漏。同时,也可以做单点登录的集成,使用系统已有的公司人员组织管理数据。如此炫酷的软件,还不快入手尝试。
扩展链接:
项目实战:在线报价采购系统(React +SpreadJS+Echarts)
Svelte 框架结合 SpreadJS 实现纯前端类 Excel 在线报表设计
无需学习Python,一个公式搞定领导想看的大屏的更多相关文章
- shell脚本学习之6小时搞定(1)
shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...
- 忘带U盘了??别急!一行python代码即可搞定文件传输
近日发现了python一个很有趣的功能,今天在这里给大伙儿做一下分享 需求前提 1.想要拷贝电脑的文件到另一台电脑但是又没有U盘2.手机上想获取到存储在电脑的文件3.忘带U盘- 您也太丢三落四了吧,但 ...
- Jquery一个slideToggle搞定div的隐藏与显示
Jquery一个slideToggle搞定div的隐藏与显示 <!DOCTYPE html> <html> <head> <script src=" ...
- 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定
1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...
- 使用tkinter打造一个小说下载器,想看什么小说,就下什么
前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...
- 如何让两个div在同一行显示?一个float搞定
最近在学习div和css,遇到了一些问题也解决了很多以前以为很难搞定的问题.比如:如何让两个div显示在同一行呢?(不是用table表格,table对SE不太友好)其实,<div> 是一个 ...
- 【python3】Python十行代码搞定文字转语音
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:万能搜吧 都是copy的百度SDK文档,简单说说怎么用. 1.没安装Py ...
- 文字转语音?我只用十行Python代码就搞定了!
详细使用教程 1.没安装Python的小伙伴需要先安装一下 2.win+r输入cmd打开命令行,输入:pip install baidu-aip,如下安装百度AI的模块. 3.新建文本文档,copy如 ...
- iOS之下拉放大,上推缩小,一个方法搞定
先来看看效果吧. 讲讲大概的实现思路:1、创建头部的视图和tableview,需要注意的是tableview要设置contentInset,contentInsent 的顶部要和头部视图的背景图的高度 ...
- 收不到Win10正式版预订通知?一个批处理搞定
目前,已经有不少Win7.Win8.1用户在系统右下角收到Win10正式版的预订提示窗口.点击接受预订后,系统会将Win10正式版所需的安装文件提前下载好,7月29日正式发布的时候,就可以第一时间升级 ...
随机推荐
- Solon v2.2.10 发布,助力信创国产化
Solon 是一个高效的 Java 应用开发框架:更快.更小.更简单.它不是 Spring.没有使用 Servlet.JavaEE 接口,是一个有自己接口标准的开放生态.可以为应用软件国产化提供支持, ...
- Flask 上下文是什么 ?
哈喽大家好,我是咸鱼.今天我们来聊聊什么是 Flask 上下文 咸鱼在刚接触到这个概念的时候脑子里蹦出的第一个词是 CPU 上下文 今天咸鱼希望通过这篇文章,让大家能够对 Flask 上下文设计的 ...
- mysql 自动挂掉
今天在看后台的时候,发现登录不上去了,登录页面是可以访问,但是就是登录不上去,上了后台看了一下,说mysql连接超时,然后我重启了一下服务器,发现依然报mysql的错误,我尝试连接mysql, 报了一 ...
- C# 监听窗口分辨率/DPI变更
当程序运行,窗口已经加载后,如果修改屏幕分辨率,会影响窗口的正常显示. 举个案例: 悬浮窗口,显示在屏幕右下角.当分辨率.文本显示比例变更后,窗口位置可能会超出屏幕范围. 所以当屏幕变更时,我们需要知 ...
- 如何利用Requestly提升前端开发与测试的效率,让你事半功倍?
痛点 前端测试 在进行前端页面开发或者测试的时候,我们会遇到这一类场景: 在开发阶段,前端想通过调用真实的接口返回响应 在开发或者生产阶段需要验证前端页面的一些 异常场景 或者 临界值 时 在测试阶段 ...
- 2020-09-16:谈谈TCP的控制位?
福哥答案2020-09-16:#福大大架构师每日一题# 福哥口诀法:紧确推和复同终(紧急位URG,确认位ACK,推送位PSH,复位位RST,同步位SYN,终止位FIN). [答案来自此链接](http ...
- 2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: “A man, a plan
2021-10-12:验证回文串.给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串 .输入: "A man, a ...
- WSGI介绍
- uni-app Flex布局
Flexbox #Flex 容器 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. nvue布局模型基于 CSS Flexbox, ...
- 【GiraKoo】面向对象开发系列之【封装】
[技术分享]面向对象开发系列之[封装] 理解 封装是面向对象程序开发的基石. 程序开发,最核心价值,是数据. 程序其实是读取数据,操作数据,保存数据等一系列操作. 那么经过良好组织过的数据,将使编程事 ...