V2EX POST
645 subscribers
138 photos
31 videos
99 files
101K links
v2ex新贴定时推送,可按需置顶本频道然后关闭通知
Download Telegram
万物皆可集成系列:低代码释放用友 U8+深度价值(2)—数据拓展应用

在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与 U8+系统的对接集成,本次给大家带来的是如何将用友 U8+系统中的数据进行价值扩展和实际应用。
我们以生产物料齐套分析为例来说明如何利用低代码将 U8+系统中的系统进行扩展和应用。在开始之前,先来看看什么是生产物料齐套。

### 生产物料齐套的定义

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135120405-1164442637.png)

生产齐套分析在生产计划安排中有重要作用,主要用于企业在生产安排上线前进行物料的齐套分析,其目的是为了更好的安排生产计划,避免上线停工滞料。齐套分析的结果对企业众多部门都有极高价值,例如企业的 PMC 部门、对物料进行计算和控制的部门,生产管理部门等等。在下面的分享中我们描述了如何通过 U8+与活字格进行对接,将 U8+系统中的生产订单数据在活字格中进行整理、统计,开发出一套齐套分析模块,帮助实现对生产订单、任务、任务明细等多个项目进行齐套管理。
除此之外,新开发的系统能够通过数据透视表的形式展示生产订单、生产任务以及任务明细,并针对不满足条件的信息进行提示预警,这样用户就可以一目了然地了解哪项生产任务配件不齐全以及数量的差量等。同时,还可以支持多级图表展示,图表的动态联动,让数据在浏览器中动起来。
首先我们来看展示效果:

- 齐套数据分析

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135206711-556080637.gif)

- 齐套图表分析

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135233614-1192504202.gif)

要想达成以上效果,有几个关键的环节需要注意:

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135246129-1472357399.png)

1 )数据整理
将 U8+系统中相关的数据进行整理,通过 SQL 生成相应的视图以供活字格应用程序进行访问。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135302435-1727803296.png)

2 )外联库访问
活字格有强大的外联库访问能力,我们可以查阅手册了解活字格连接外部数据库的能力:
https://help.grapecity.com.cn/pages/viewpage.action?pageId=72355085

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135317172-1153279281.png)

3 )齐套数据分析
通过多表头表格,我们可以实现数据的展示效果,使用条件格式可以将数量不满足要求的值显示为预警颜色,利用活字格的当前行以及动态查询实现数据动态关联显示的功能。


![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135352954-276201064.png)
![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135407952-838075115.png)

4 )齐套图表分析
在活字格页面中绑定表格,利用绑定图表的方式就可以实现该功能。通过编辑图表命令获取当前选中的类目以及值,就可以实现图表的钻取功能,效果如下:

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824135424837-797159301.png)

至此,我们就完成了 U8+系统数据联结和应用扩展的功能。如果希望将该部分应用与 U8+主体服务进行集成,可以参考:万物皆可集成系列:低代码释放用友深度价值( 1 )—系统对接集成或查看相关公开课内容: https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=55373&extra=page%3D1%26filter%3Dtypeid%26typeid%3D272
理论与现实总有偏差,实际的生产过程中,不管我们如何有效的制定计划,都会存在计划偏差的风险,我们能做的是关注计划的偏差,并及时进行调整。希望低代码可以帮助大家实现数据驱动管理优化,降本增效。
想要了解更多用友 U8+的案例可以参考:
https://gcdn.grapecity.com.cn/showtopic-54262-1-1.html

#139239 #齐套 #https #com #U8 #img2022 #cnblogs #blog #202208 #png
拒绝加班:巧用前端电子表格中构建公式树

还在为满屏的公式而“内牛满面”吗?还在为长串的公式解析而发愁吗? 还在定位错误的公式而苦恼吗?上班要写代码,加班还要分析这又长又臭的公式。你的发际线还好吗?

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824140805595-829993922.png)

本葡萄来拯救你的发际线啦!带来的不是洗发水,而是公式追踪!这一章,让本葡萄带你用前端电子表格的公式追踪构建公式树,快(解)速(救)分(你)析(的)公(脱)式(发)问题。

### 背景

在审计、财会、金融等对公式有着大量需求且需要进行分析的行业中,经常会遇见复杂的公式计算,并且需要知道每一步计算的结果或者引用的数据是否正确。这个时候,满屏的公式,仿佛在告诉你:别想下班!手动将公式一步一步分解,遇到短的公式还好说。遇到长的公式,不仅工作量大,而且容易出错,一不小心弄错了,就错过了末班车时间。那如何能够快速地将公式拆解,分析出其中的每一步计算步骤呢?
这里就可以用到前面说的,利用 SpreadJS 的计算引擎,把分析交给机器来做,分析完成之后,可以通过 SpreadJS 自身的形状功能来绘制一个清晰明了的公式树。不仅快且稳,重要的是可以早点下班,他不香吗?

ok ,那我们来看看效果。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824141721181-1993190997.gif)

### 实现步骤

想要实现这样的公式树,引入 SpreadJS 是必不可少的步骤,这里就不再赘述
怎么进行引入,主要就讲讲这个公式树以及相应的右键菜单是怎么实现的,快速入门可以参考下方链接的 demo:
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/workbook/initialization/purejs

可以看到上图除了用一个工作簿实例用于正常显示数据和公式之外,在下方也是一个工作簿实例,用于通过形状绘制公式树。公式树的实现其实可以更加灵活,比如弹出一个模态窗,模态窗中加载一个 SpreadJS 实例,或者完全自己用 DOM 来绘制也都是可以的。因为通过 SpreadJS 的公式追踪,就可以拿到公式相关的引用信息,至于怎么画出来,都是可以的。

我们可以把上方的工作簿对象定义为 spread ,把下方绘制公式树的工作簿对象定义为 spreadForShow ,在默认情况下,我们通过 css 将 spreadForShow 进行隐藏。
我们通过下面的代码将两个工作簿实例进行初始化。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824141812903-1458502440.png)

为了能够更加清晰看到单元格对应的公式,这边也添加了一个公式栏和 Spread 进行绑定,通过以下代码即可。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824141821927-1565049742.png)
![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824141837562-1980316933.png)

接下来就是创建对应的右键菜单“钻取”项,下图是实现添加右键菜单项的效果。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824141846693-476831456.png)

对应的,我们需要注册点击这个项之后的处理命令。该核心也就是作用主要在于,
document.getElementById("show").style.visibility = "visible";
是控制 spreadForShow 这个工作簿的显示。其余代码可以简单理解为创建命令的“模板”。详细注册命令可以参考以下链接:
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/worksheet/actions/custom-action#

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142133457-168152003.png)

注册完对应的命令之后,为了能够让这个项只在由公式的单元格中出现,可以重写 onOpenMenu 。在这个方法里面通过 getFormula 判断点击的单元格是否有公式。有公式,则往右键菜单数组里面添加“钻取”项。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142153109-594878180.png)

以上就是一些前期的准备代码,我们再来看下如何获取公式的引用信息。通过 sheet.getPrecedents(row, col)可以获取单元格中公式具体引用的单元格,返回的是一个对象数组。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142204968-1548661576.png)

为了能够在点击单元格的时候,提前将公式树绘制好,这里用了一个事件监听,当监听到选区改变的时候,分别调用创建节点以及绘制公式树的方法(后面会进行介绍)。然后将用显示公式树的 spreadForShow 这个工作簿进行隐藏。因为我们的主要逻辑是通过右键显示公式树,然后切换单元格的时候关闭公式树。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142239447-322850984.png)

下一步是创建公式引用的节点,为了能够在节点上展示该单元格相关的更多信息,一个的单元格创建一个对应的 node 对象,包括了单元格值,单元格位置以及单元格描述。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142301230-1882547616.png)

再往下就是从原始公式开始逐层往下找了。从原始的公式单元格出发,通过 sheet.getPrecedents(row, col);找到对应引用单元格之后。以找到的单元格为起点,再次往下找,直至找不到为止。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142319913-595896451.png)

将公式对应的节点逐一找完之后,就可以开始在 spreadForShow 工作簿上进行绘制了。我们就分别绘制用于展示数据的矩形以及用于连接这些形状的连接器形状。下面的代码中 getRectShape 用于创建展示数据的矩形,里面通过代码设置了文本颜色、填充颜色、字体等。getConnectorShape 则是用于创建线条连接器,设置了线宽、颜色等。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142338585-435990456.png)

最后就是根据前面构造出来的节点,以及预定义好的形状方法进行公式树的绘制。在这个 if-else 中,如果节点是父节点,则通过连接器型装将子节点相连接,如果没有子节点则无需连接。在 creatNodeTree 方法中,定义的节点信息,通过拼接的方式,将节点信息设置在对应的矩形上。也就是一个一个节点往下绘制,直至绘制完成。

![]( https://img2022.cnblogs.com/blog/139239/202208/139239-20220824142356229-761213005.png)

怎么样?看完上面的介绍可以实现对应的功能吗?想不想立刻拥有如此强大的数据?没有 demo 的技术文章,就跟方便面没有调料包一样,索然无味。还不赶快下载 demo 尝试一下~
https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjI3NTA1fGNiZTgzNTU4fDE2NjA4OTY1Njh8NjI2NzZ8OTk3MTg%3D

#139239 #公式 #https #com #单元格 #img2022 #cnblogs #blog #202208 #png
万物皆可集成系列:低代码如何不成为数据孤岛

接口是计算机系统中两个独立的部件进行信息交换的共享边界。这种交换可以发生在计算机软、硬件,外部设备或进行操作的人之间,也可以是它们的结合。

翻译一下,就是每个系统都是独立的个体,如果想让不同的系统之间有数据的交互,那么接口就像是要给系统开个门,要想从我的系统中获取数据或者发送请求,那么就要从我专门开的门——接口,进入才可以。

低代码工具当然也会提供给各位对接接口的机会。接下来就为大家介绍如何在低代码应用中进行接口的创建和对接。

方式一:服务端命令(调用第三方系统的接口)
https://help.grapecity.com.cn/pages/viewpage.action?pageId=72357136
由于我们没有现成的第三方系统,那么我就用活字格来模拟一个第三方的系统。该系统中提供一个向表格存储数据的接口。

为了验证请求接口的调用者身份,目前可以使用和第三方约定一个类似于 key 的参数,以此 key 来判断访问接口人的身份。
这里模拟的第三方系统要验证的 key 为 balabala ,那么在第三方系统中就需要判断请求过来的参数中是否有 key=balabla 的参数,有的话再执行相应操作,否则不予执行。

为了模拟以上描述的效果,我就在服务端命令中使用条件命令判断 key 参数,如图:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143413218-1843355509.png)


创建好这个服务端命令,就相当于对外暴露出了一个接口,而接口请求地址就是服务端命令中名称下的 url 。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143455342-943705784.png)


```
接口名:addData
HTTP Verb:POST
URL: http://xa-hzg-erik:8080/AAA/ServerCommand/openApi
Request Body:
{
"openApi": [
{
"secretKey": "balabala",
"msg"?: "xxxxx",
}
}

```

有了这个接口,我们就可以借助我们的发送 HTTP 请求命令向这个接口发送对应的数据了。

这里要注意的是,如果直接在单元格命令上使用发送 HTTP 请求命令的话,这样是存在跨域的问题的,如图:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143505807-2140504964.png)

为了避免跨域的问题,我们需要在服务端命令里面使用发送 HTTP 请求命令,以防止跨域问题的发生。

那么我们在工程中新建一个服务端命令,根据接口要求,我们需要发送 secretKey 和 msg 两个参数,配置如下图:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143524212-1476642620.png)

命令配置:
![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143536408-774180903.png)

可以设置返回结果:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143558684-49233909.png)

配置好服务端命令后,在页面上调用该服务端命令测试一下:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143618289-1425270218.png)

请求发送成功了~!

我们再看下模拟的第三方网站是否执行了请求:


![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143632712-1782056488.png)

可以看到,我们的请求已经执行成功,第三方网站已经将数据成功存入数据表中。
服务端命令(第三方系统调用活字格开放的接口)
这个就很简单了,只要在活字格系统中创建自定义的服务端命令后,服务端命令名称下对应的 url 就是活字格提供的接口地址。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143646672-1143257008.png)

结合前文,为了确认身份,可以约定一个 key 参数的办法,进行身份的验证即可。
方式二:写 WebApi 的方式生成接口
这种方式一般针对与复杂的接口逻辑功能,比如想通过代码的方式实现 token 认证等方式,那么就需要借助此方法实现。

这里的话,为大家演示一下,如果使用 WebApi 的方式向表格中添加数据。

如何进行服务端编程呢?具体的步骤可以参考我们的帮助文档:

https://help.grapecity.com.cn/pages/viewpage.action?pageId=53350185

我们在这里简单的做一个向表格中添加数据表数据的服务端 WebApi:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143740286-1509966627.png)

这里的接口名就是方法名——TestPostApi ,请求方式为:POST 。

同样的,在活字格工程中,设置服务端命令,还是使用我们的发送 HTTP 请求命令,如图:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143754046-102924459.png)

接下来,我们调用服务端命令即可,测试效果如下图:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143859171-893687515.png)

同样的,如果想开放给外部接口,接口地址就在开始中:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220902143915388-851707928.png)

看到这里相比各位也对发送 HTTP 请求命令有了一个大致的了解了吧~

文内实例文件下载体验:

[请求调用文件下载地址]( https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjI4MjgzfGI3NTA2NjY0fDE2NjEzMDc5MjB8NjI2NzZ8OTk3MTg%3D)
[模拟第三方网站]( https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjI4MjgyfDRjNmM4OTEzfDE2NjEzMDc5MjB8NjI2NzZ8OTk3MTg%3D)

#139239 #https #com #接口 #服务端 #img2022 #cnblogs #blog #202209 #png
BI 系统的分布式部署原理和技术实现

### 1.什么是分布式

关于“分布式系统”的定义,我们先看下书中是怎么说的。《分布式系统原理和范型》一书中是这样定义分布式系统的:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统”。
关于这个定义,我们直观的感受就是:
首先,这种系统相对来说很厉害,由好几台主机组成。以谷歌、亚马逊等服务商而言,他们的数据中心都由上万台主机支撑起来的。
其次,虽然很它很厉害,但对于外人来说,是感觉不到这些主机的存在。也就是说,我们只看到是一个系统在运作。以最近的“亚马逊 S3 宕机事件”为例,平时,我们压根不知道亚马逊所提供的服务背后是由多少台主机组成,但是等到 S3 宕机才知道,这货已经是占了互联网世界的半壁江山了。
从进程角度看,两个程序分别运行在两个台主机的进程上,它们相互协作最终完成同一个服务(或者功能),那么理论上这两个程序所组成的系统,也可以称作是“分布式系统”。
当然,这个两个程序可以是不同的程序,也可以是相同的程序。如果是相同的程序,我们又可以称之为“集群”。所谓集群,就是将相同的程序,通过不断横向扩展,来提高服务能力的方式。
举一个生活中的例子来说明:
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,两个厨师的关系是集群。
为了让厨师专心炒菜,把菜做到极致,再请了个配菜师负责切菜,备菜,备料 ... , 厨师和配菜师的关系是分布式。
一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。
一个配菜师因故请假了,但是其余的配菜师还是该啥就干啥,只是没请假的配菜师任务均匀的加量了,但他们的任务和职责是不变的,这是集群。
店里生意很好,当店长接到订单后,看哪个厨师活儿不重,就将新的订单分给谁,这就是负载均衡。
集群:多个人在一起做同样的事 。
分布式 :多个人在一起做不同的事 。
负载均衡:决定将任务以某种规则分给谁做。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220906133616585-213193986.png)


![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220906133657875-490445787.png)

### 2.为什么使用分布式部署
了解了什么是分布式之后,为什么要使用分布部署呢;
首先分布式部署优点很明显,主要体现在下面 4 个方面:
**系统可用性提升**
传统的集中式计算或集中式存储在遇见单点故障时很容易造成整个服务不可用,分布式下的服务体系,单台机器有故障,不致于造成整个服务不可用。
**系统并发能力提升**
比如双 11 活动,平时订单少 50 台机器就够了,到了 11 订单量剧增,服务器增加到 100 台,每台机器之间相互独立,互不影响。
**系统容错能力提升**

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220906133752554-404264903.png)

同一组服务分别部署在北京上海杭州,杭州的机房突发断电或者火灾,杭州机房的流量会被自动分发到北京和上海的机房,不影响用户使用。
**低延迟**
参考上一个图,北京的用户请求自动分发到北京,上海的用户请求被分发到上海,服务器会根据用户的 IP 选择距离自己最近的机房,降低网络延迟。
同样分布式部署带来好处的同时也会有一些缺点,只要是下面 3 个方面:
**分布式服务依赖网络**
服务器间通讯依赖网络,不可靠网络包括网络延时,丢包、中断、异步,一个完整的服务请求依赖一连串服务调用,任意一个服务节点网络出现问题,都可能造成本次请求失败。
**维护成本高**
传统单体式服务只需要维护一个站点就可以。
分布式服务系统被拆分成若干个小服务,服务从 1 变为几十个上百个服务后,增加运维成本。

**一致性,可用性,分区容错性无法同时满足**
这个是最主要的,这三种特性就是平时说的 CAP 定理,在分布式系统中,这三种特性最多只能满足两种,无法同时满足,需要根据实际情况去调整牺牲掉其中哪个。

### 3.BI 系统的分布式部署原理和技术实现
随着数据的爆炸性增长,BI 系统需要处理的数据越来越多,动辄 TB 级,甚至 PB 级,于是服务器宕机,反应迟钝,查询缓慢等各种性能问题接踵而来,BI 系统的用户,心里简直又苦又难~~~

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220906133921222-692543296.jpg)


各路 BI 厂商也意识到这些问题,纷纷推出各种解决方案。

这里提供一种使用分布式部署解决方案。
架构图如下:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220906133931537-1725392723.jpg)

那么分布式部署呢,主要是对 ReportWorker ,CotWorker ,DashboardWorker 组件进行横向扩展,这几个组件主要是负责仪表板和报表运算的组件,可以部署多个以提供系统的计算性能。
为了降低用户部署成本,提供了在线的远程部署方式,UI 界面化操作,可以在线添加节点,远程为每个节点部署需要的组件,以及对节点组件进行在线启停,进一步降低用户部署成本。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220906133942879-1046661152.png)

同时也可以在线的运维管理和系统诊断功能,可以查看系统资源消耗,系统日志下载,方便对 BI 系统进行运维管理,降低用户的运维成本。
大家如果感兴趣欢迎访问各种在线 demo,体会 BI 工具为数据可视化带来的便利: https://www.grapecity.com.cn/solutions/wyn/demo00

#139239 #分布式 #配菜 #部署 #https #com #分布式系统 #厨师 #img2022 #cnblogs
内卷时代下的前端技术-使用 JavaScript 在浏览器中生成 PDF 文档

### 背景

在计量领域中,计量检定是一种重要形式,主要用于评定计量器具的计量性能,确定其量值是否准确一致,实现手段包括计量检验、出具检定证书和加封盖印等。
在检定证书这一环节,存在一个难点,就是无法在线预览以及智能生成。

1 、证书管理不能满足用户精准打印、特殊字符或多页打印的需求。因为在计量行业中,精密仪器较多,往往会存在一些特殊字符的应用或者会使用某些较为复杂的测量单位。
2 、系统不支持批量证书更新以及批量打印等功能,在常见的场景中,出具证书是需要进行批量导出的过程。
3 、无法满足实时打印预览或者 PDF 预览,这样直至打印前都无法确定打印的格式、范围等是否符合需求。
在这篇分享中,我们将帮助大家着重解决两个问题:

1 、在浏览器中生成 PDF 文件;
2 、解决中文以及特殊字符导出 PDF 乱码的问题。

在浏览器中生成 PDF 文件。前端生成 PDF 文件纯依赖于客户端的浏览器资源,对于不同的终端,导出 PDF 的难度会比服务端有所增加。市面上主流的浏览器有三四家,例如 Chrome 、Safari 、FireFox 等,每个浏览器对于文字内容、CSS 属性处理都不一致,有可能某些配置在某个浏览器上可行,换了一个浏览器之后就有可能天差地别。另外,对于原生的 PDF 文件来说,仅包含英文字体,不包含任何中文字体,因此当导出的内容中含有中文字体编码时,就会显示乱码,所以通常情况下,我们都需要为 PDF 进行字体注册操作。

### 前端常见导出 PDF 方法

目前常用的前端生成 PDF 文件的方法大致有以下几种。
1 、HTML2Canvas 的方法将 HTML 转换成图片后,在将图转 PDF 文件。这种方法比较适合单一页面。
2 、jsPDF 直接 H5 转成 PDF 。

除了上述的方案之后,使用 SpreadJS 直接在线设计布局,并且可以直接生成 PDF 文件。 带来的好处是什么呢?可视化的操作、代码量少并且可以适配不同的浏览器环境。当然也会有一定的缺点,对于字体较多的文件,需要注册不同的字体,字体文件越大,占用的带宽就越大。另外,当文件比较大的时候,有可能会存在性能问题,不过这个也几乎是前端导出 PDF 文件的一个瓶颈。那么较为理想的方案便是可以在前端( SpreadJS )设计、展示,最后交由后端来单独导出或者批量导出。

### 在浏览器中生成 PDF 文件
介绍了那么多,我们还是回到本篇文章的主题,如何通过前端来生成 PDF 文件。需要用到 SpreadJS 以及导出 PDF 相关的功能,首先需要在页面上引入相关的资源。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162733674-833295908.png)

然后创建一个用于承载表格实例的 DOM 。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162743323-369981049.png)

初始化表格控件并加载已设计好的表单,或者也可以通过 setValue 的接口实现简单的赋值操作。


![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162758829-668201757.png)

想要表单按照指定的要求导出,可以通过代码设置打印相关的配置,也可以用设计器来进行设计。下面是配置打印信息相关的代码。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162813256-1482182527.png)

最后,通过调用 savePDF 方法,将工作簿对象转为 blob ,我们可以通过 window.open 来进行 pdf 的预览或者通过一些保存文件的插件直接将这个 blob 保存为 PDF 文件。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162825068-611084022.png)

这是 open 之后的效果,我们可以直接通过浏览器导出 PDF 文件或者是调用浏览器的打印接口实现打印。(demo 在附件名为 PDF 文件夹)

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162839228-344019036.png)


### 解决中文以及特殊字符导出 PDF 乱码

正如前面所说的,在国内,使用中文的报告是一件再常见不过的事,在计量检测等相关场景,特殊字符的使用也较多。在没注册对应的字体之前,导出的中文字体和特殊字体都显示的是乱码。因此,还需要处理导出中文以及特殊字符 PDF 乱码的问题。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162900589-1547401261.png)

前面提到了注册字体,那我们的字体应该怎么来?要什么格式的字体呢?首先,先确认我们的表单需要用到哪些字体,然后去找对应字体的 ttf 文件(电脑上或者是一些字体网站上都有,需注意版权问题)。找到之后将其转为 base64 格式的文件。具体如何转,可以找一些在线的文件转换器,不过在线的有可能会因为字体文件太大而崩溃,或者有能力的大佬可以自己写一个转换的工具。然后通过下面的方式去把我们的字体文件存储为一个 js 文件放到我们的项目中。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162914071-827963844.png)

初始化表单这些就和上面的操作基本一致了,下面就是关键的注册字体步骤了。我们定义了一个 font 对象,里面只定义了常规( normal )的字体,里面的 simkai.ttf 就是我们上面的创建的字体文件。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162929084-1269491631.png)

还有一点需要注意的是,虽然注册了字体,但是要设置对应的中文字体。或者换过来说,你需要在表单上设置什么字体,就去注册对应的字体。
那我们再来看看特殊字符,注册字体与中文字体的步骤是一致的,特殊在于为了想要在页面上显示特殊字符,我们需要通过 css 的 font-face 来指定一个 font-family 。例如创建了一个叫 sunway-font 的特殊字体,想要在页面上显示。


![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162939318-993302155.png)

最后就是通过 savePDF 方法导出 PDF 文件,可以看到 PDF 的中文和特殊字符都可以正常显示。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908162950320-1291117201.png)


怎么样?学“废”了吗?不妨试试,“卷”起来。

本文所用代码下载地址:
https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjI5OTEyfDdlNmI2YmExfDE2NjIwMjE0MTd8NjI2NzZ8OTk3MTg%3D

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220908163013586-1450130776.png)

更多在线 demo 示例代码: https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html

#PDF #139239 #字体 #https #com #文件 #img2022 #cnblogs #blog #202209
100+大屏模板免费领!葡萄城 BI 行业应用方案重磅发布!

近年来,数字经济的蓬勃兴起为企业在数据智能领域的创新发展构筑了广阔的舞台,数据作为基础战略资源和关键生产要素的地位日益凸显。
数据可视化大屏作为一种用于数据分析的热门应用,能够帮助企业有效挖掘海量数据资产、实现差异化竞争。
但我们发现在实际应用场景中,设计出完美适配行业典型应用场景、不同场景下的业务需要、能够快速应用于各类项目、美观炫酷的大屏,并不是一件容易的事。
如何快速制作炫酷的数据可视化大屏并使其能够应用于项目,是当前亟待解决的问题。
葡萄城 Wyn 商业智能软件紧跟嵌入式分析发展趋势,结合葡萄城 40 年控件研发技术,让产品具备业界领先的嵌入式集成能力。
历经多年积累,Wyn 技术团队总结出多个以用户、场景为中心,多行业、多业态、多终端的 BI 数据可视化解决方案,将于 9 月 23 日(下周五) 14:00-15:30 为您带来一场精彩的行业应用方案发布会,帮助智能制造、智慧工程、智慧教育、智慧运维、智慧金融等各行业客户全面提升数据分析能力。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220920144807661-13422092.png)

同时,本场发布会将为您提供各类典型、易用多行业“数据可视化大屏”经典模板,并为专业数据人剖析“行业可视化大屏设计”背后的行业痛点,针对不同行业 “对症下药”,进行有效数据分析和治理,让数据可视化大屏真正源于“业务”、用于“业务”。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220920144957218-344865742.jpg)

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220920145005870-14884245.jpg)


通过观看本场发布会,您可以:
- 了解领先 BI 技术应用前沿趋势
- 获取针对制造、金融、医疗、建筑等 15 个行业的 BI 解决方案
- 深入掌握 BI 大屏在数据可视化项目中的应用场景和方法
- 领略百余个数据可视化大屏的应用效果与风采
- 免费获取 100+大屏模板,500+设计素材

扫描下方海报二维码,立即预约观看并获取免费模板!本次活动还为您准备了华为 FreeBuds Pro 蓝牙耳机、SKG 颈椎按摩器 K3 升级款和品牌双肩电脑包等多重大牌好礼,将在直播中免费抽奖送出。福利满满,不容错过~
(温馨提示:请您准确填写邮箱,本次发布会结束后,葡萄城将通过邮件为您发送大屏模板与素材!)

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220920145034705-483608556.jpg)

#大屏 #139239 #可视化 #数据 #应用 #BI #https #img2022 #cnblogs #com
低代码对接腾讯云-阿里云短信平台

### 一、什么是低代码
“Low-Code”是什么?第一次接触这个名词的还是被面试官问到是否知道低代码的时候,这种场合不知道三个字是绝对不能出现的。
所以我强装镇定回答到:“低代码,了解一些。”
面试官说,“那你说说你的理解。”
大型社死现场莫过于此。回家后我不假思索地打开搜索:Low-code development platform 。

我们来看看 Wikipedia 的定义:

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171011140-1910933840.png)

从 Wiki 的这段定义中,我们可以提炼出几个关键信息:
- 低代码开发平台( LCDP )本身也是一种软件,它为开发者提供了一个创建应用软件的开发环境。对于程序员而言,低代码开发平台的性质与 IDEA 、VS 等代码 IDE (集成开发环境)几乎一样,都是服务于开发者的生产力工具。
- 与传统代码 IDE 不同的是,低代码开发平台提供的是更高维和易用的可视化 IDE 。大多数情况下,开发者并不需要使用传统的手写代码方式进行编程,而是可以通过图形化拖拽、参数配置等更高效的方式完成开发工作。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171051349-1373090448.png)


### 二、低代码核心能力

与传统开发相比,低代码在学习门槛、应用搭建速度、系统运营维护、报表能力以及总成本投入方面具有明显的优势,我们将它的核心能力分为以下九个部分。

**数据模型引擎**
内建小型数据库,可直连主流数据库,提供可视化数据模型(表、字段、关联关系等)与查询视图设计能力,提供专业模型驱动开发体验。

**业务逻辑引擎**
提供可视化业务逻辑设计和调试能力,可自由编排运行于服务器和页面的业务逻辑,实现前后端分离,灵活性堪比编码开发。

**页面渲染引擎**
可视化页面设计器集成大量开箱即用的 UI 组件和外观样式,支持固定布局及响应式布局,可将任意调整页面元素位置及样式。

**工作流引擎**
工作流引擎与业务逻辑引擎无缝结合,支持自由定制流程中各节点的各项规则和关联的业务处理;支持在线工作流编排与调整。

**智能报表引擎**
将报表控件技术引入低代码开发,提供专业级报表设计能力,支持定制统计报表、中国式复杂报表、类 Word 报告,可实现精确报表套打。

**系统集成引擎**
供系统集成所需的数据库直连、WebAPI 构建与调用、用户认证与权限同步机制等能力,无需编码即可实现数据集成、应用集成和门户集成。

**权限控制机制**
内置用户、角色及组织管理功能,提供多种认证、鉴权模式,可轻松实现精细化的数据和业务权限控制;支持在线权限配置能力。

**编程扩展接口**
开放前后端编程接口及插件扩展机制,提升产品级原生开放能力,可通过编程扩展接口完成复杂系统集成、性能调优等工作。

**多样化应用部署**
同时支持云平台部署和私有化部署,可根据企业对数据可控的多样化需求,将应用部署到局域网、私有云或公有云。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171205716-1495907929.png)

### 三、低代码对接短信云平台

作为一个低代码产品,涉及到监控预警、流程通知的时候,短信功能就显得额外重要。如果要实现短信功能的话,直接对接现有的短信云平台,无疑是最快的方案。
以阿里云为例,我们来看看低代码开发平台活字格是怎么对接其短信功能的。
首先我们可以在阿里云的找到对应的短信接口调用说明。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171225995-1678820858.png)

然后根据活字格特有的插件机制,[服务端命令插件示例:MyServerCommand]( https://help.grapecity.com.cn/pages/viewpage.action?pageId=72367204),引入阿里云的提供的 SDK,参考其示例代码封装成一个插件。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171259972-65162035.png)

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171307514-49171004.png)

安装插件并重启活字格设计器后,服务端命令中就可以找到刚安装好的“阿里云发送短信”命令。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171317324-963804136.png)

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171325612-753741519.png)

测试发送结果如下。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220921171338586-1318366099.png)

到这里我们就完全实现了使用低代码平台对接阿里云短信,值得说明的是,活字格的插件机制可是非常惊艳的,当开发者开发了一个插件之后,不仅自己可以使用,还可以分享给其他的使用者,且使用起来跟内置功能是无差别的。
大家如果想了解更多低代码相关知识可以查看:
https://help.grapecity.com.cn/display/lowcode

#139239 #https #com #代码 #img2022 #cnblogs #blog #202209 #png #插件
如何通过执行 SQL 为低代码项目提速?

见多了 SQL 为代码开发提速,那么当低代码遇到 SQL 会擦出怎样的火花呢?本文将低代码和 SQL 结合进行介绍,让大家了解如何通过执行 SQL 为低代码项目提速。
### 背景
自从计算机诞生的一刻起,如何让计算机能够按照人类的需求进行工作,满足人类的需要就成为了一个问题,于是便诞生了计算机语言。最初的计算机语言是由 0 和 1 构成的机器语言,用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合,运行快,但是不容易使用,上手困难且难易理解。为了克服机器语言的缺点,人们将机器指令的代码用英文助记符来表示,代替机器语言中的指令和数据。便诞生了第二代编程语言——汇编语言,汇编语言在一定程度中克服了机器语言难以学习使用的缺点,同时保证了执行速度快的优点,但是汇编语言的通用性,可读性还是很低。于是就诞生了以人类的日常语言为基础的一种编程语言,就是第三代编程语言——高级语言,像我们熟知的 JAVA 、JS 、C#等都属于第三代编程语言。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160223603-248120232.png)

高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好地描述格中算法,而且更易学习掌握,也是目前被程序员所使用的最为广泛的语言,但是,第三代语言对于业务人员来说还是难以理解。需要在编程上有专门的训练才能使用。于是便诞生了第四代语言,即面向问题的语言。第四代语言是非常高级的语言,用户只需要简单的培训即可参与编程,解决特定的问题。同时,第四代语言比第三代语言更接近日常语言,更容易编程,更广泛地被非专业程序员所使用。像我们今天的主角——SQL 就属于第四代语言,使用者并不需要告诉计算机要怎么做,只需要告诉它执行命令内容即可。而低代码平台诞生可以追溯到第四代语言,第四代语言的主要特点就是简单易学、上手快。那使用第四代语言 SQL 再加上本来开发周期就短的低代码,能擦出怎么样的火花呢?
### SQL 与低代码的碰撞
我们先来看看没有使用 SQL 功能的低代码是如何开发一个项目与数据库进行交互的,这里使用企业级低代码开发平台-活字格为例向大家介绍。活字格中是有数据库这个概念的,而且活字格在更新迭代的过程中也有从“无执行 SQL 功能”到“有执行 SQL 功能”的一个变化,这一过程正好可以作为展示执行 SQL 为低代码提速的最好例子。
早些时候,大多数的低代码平台没有直接执行 SQL 功能,平台通过一些类似 SQL 功能去实现数据处理,比如活字格中的 odata 、数据表操作等功能,以实现执行数据表基本的 DML 操作。但是一旦明对更加复杂的业务场景,需要执行 SQL 才能实现时,就不免显得捉襟见肘。其性能对比执行 SQL 命令也有显著差距,可以看到使用执行 SQL 命令原本需要 73 秒才能做完的插入 5000 行数据操作,现在 1.5 秒的时间就可以完成了。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160244654-1524234966.png)

由此可见在低代码项目中执行 SQL 可以大大提升低代码项目的搭建速度,提升低代码开发效率,使得开发效率本来就较高的低代码项目效率更高,那说了这么多执行 SQL 的优点,如何在低代码项目中执行 SQL 呢。还是以活字格这款企业级低代码开发平台来举例。
使用 SQL 功能可以实现很多复杂的功能,比如:编写和调用存储过程、创建临时表、创建表索引、创建多个联合查询等。这里找两个简单的例子给大家介绍一下如何在低代码项目中使用 SQL 。现在有数据表的设计如下:课程表(课程号、课程名、学分)、学生表(学号、姓名、性别、专业)、分数表(学号、课程号、分数)。然后现在的需求是输入课程名和学生名来查询这个学生的分数,那在活字格中怎么做呢,我们一起来操作下。
首先设置前端页面,将活字格中的文本框单元格类型,按钮单元格类型,设置在活字格的设计器页面中。


![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160258603-1883002962.png)

新建一个服务端命令,增加参数学生名,和课程名参数,命令中新建执行 SQL 命令,数据库选择内建库(如果使用外联数据库也可以通过连接字符串直接在外联数据库中操作),添加学生名和课程名参数,参数值直接从服务端命令接收的参数值中获取即可,写 SQL 语句如下 SELECT 分数表.分数 FROM 分数表 join 课程表 on 分数表.课程号 = 课程表.课程号 join 学生表 on 分数表.学号 = 学生表.学号 where 学生表.姓名=@学生名 and 课程表.课程名 =@课程名;将执行 SQL 结果,也就是返回值写到变量 SQL 数组中。由于执行 SQL 命令返回的结果是一个 json 对象数组,所以需要使用循环命令去取得数组中的每个 Json 对象,再去取值即可。这里示例中当确定了姓名和课程名之后,分数就确定了,也就是 SQL 查询的结果中只有一条记录,所以循环第一次就可以使用返回命令将分数的值返回出来。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160310869-1797573850.png)

在页面中的按钮再使用调用服务端命令,调用构建好的 SQL 命令。学生名和课程名选择设计好的文本框,将返回值返回到页面中的分数。这样就实现了这个需求了。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160321490-395636748.png)

我们可以看一下执行效果,学生名输入张三,课程名输入语文,点击查询,分数便显示 88 。
![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160337039-1926738769.png)

这样,这个需求在低代码中就可以通过执行 SQL 实现了。我们来换一下需求,改为输入一个学生名查询出这个学生全部课程的成绩。还是以活字格为例,我们只需对上面的一些步骤做更改即可。
首先,设置页面的步骤中,将课程名和课程名后的文本框删除掉,分数区域改为设置一个表格,表格中有课程列和分数列。


![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160350468-1124135932.png)

服务端命令中删除课程名参数,服务端命令中的执行 SQL 命令也删除课程名参数,修改 SQL 语句如下 SELECT 分数表、分数、课程表、课程名 FROM 、分数表 join 课程表 on 分数表、课程号 = 课程表、课程号 join 学生表 on 分数表、学号 = 学生表、学号 where 学生表、姓名=@学生名,直接将查询的数组结果返回出去。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160405340-2097837323.png)

在前端调用时,将调用服务端命令的结果保存在 SQL 数组变量中,然后直接使用导入 Json 数据到表格命令将 json 对象数组导入到表格。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160420527-346386866.png)

可以看到,在浏览器中文本框输入张三,点击查询,即可查询出张三全部的课程和分数。由此可见,通过执行 SQL 可以大大的提升低代码项目的开发效率,在需求变化是也能很高速的通过修改 SQL 语句和低代码工程实现更改后的需求。

![]( https://img2022.cnblogs.com/blog/139239/202209/139239-20220930160433299-193476505.png)

当然,这里只举了两个简单的例子来为大家展示如何通过执行 SQL 为低代码项目提速,一些更复杂的需求如编写和调用存储过程,创建临时表等,都是可以通过执行 SQL 在低代码项目中实现的。大家如果感兴趣得话,可以找找相关的低代码产品来更详细的了解一下。

如果想了解更多地低代码技术知识访问: https://help.grapecity.com.cn/display/lowcode

#SQL #139239 #代码 #课程 #分数 #https #com #执行 #img2022 #cnblogs
详解商业智能“前世今生”,“嵌入式 BI”到底是如何产生的?

嵌入式分析是使任何应用程序或用户更容易获得数据分析和商业智能的技术。
商业智能是通过分析业务数据辅助决策获取数据背后的 0 信息。
商业智能软件和技术包含了报表查询,OLAP ,数据挖掘及高级数据分析,最终用户自助分析及仪表板监控舱等功能。
嵌入式商业智能是一种技术能力,囊括了商业智能的功能和特征,并且成为了业务系统的一个重要的构成。


![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095351510-608970228.png)

#### 嵌入式商业智能发展背景

“商业智能”一词最早出现是在 Richard Millar Devens ,1865 的 Cyclopaedia of Commercial and Business Anecdotes 一书中,用它来描述“银行家亨利·弗兰西斯爵士的成功方式”。

**起源**

1958 年 IBM 的计算机科学家 Hans Peter Luhn 撰写的一片文章《 A Business Intelligence System 》中,开始描述 BI 的价值和潜力,今天他被公认为“商业智能之父”。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095423553-1822844353.png)

**演变:20 世纪 80 年代末**
1956 年,IBM 发明的硬盘彻底改变了数据存储,越来越多的数据被创建和存储。也就在这个阶段产生了第一个数据库管理系统,统称为决策支持系统( DSS )。
20 世纪 70 年代,出现了几家 BI 厂商。
1988 年,在罗马举办的数据分析联盟会议是一个商业智能的里程碑。

**转折点:20 世纪 80 年代-90 年代**
1988 年会议后,商业智能就开始向现代化演进。1989 年,分析师 Howard Dresner 再次将“商业智能”带入大家的视野,他将商业智能作为涵盖数据存储和数据分析的统称,避免了繁琐的名称,如 DSS 或 EIS 等。数据仓库技术的发展大大推动了商业智能的发展,传统存储在各个地方的业务数据开始集中在一起。应运而生的技术还包括 ETL (数据抽取、转换、加载)和 OLAP (联机分析处理),该阶段被称为-商业智能 1.0 。


**商业智能 1.0**
20 世纪 90 年代末和 2000 年初,数十家 BI 厂商进入市场,在此期间,BI 包含两个基本功能:生成数据和报告,并以可视化的方式展示。商业智能 1.0 面临的两大问题:复杂性和时效性。
当时存在两个主要难点:
1 、大多数人无法自助使用,强依赖 IT
2 、由于数据沉默,制定和提交报告给决策者需要更多的时间

**商业智能 2.0**
二十一世纪是一个明显的转折点,随着技术的发展,解决了复杂性和时效性的问题。
BI2.0 的实时处理技术允许企业依据最新的信息作出决策。
互联网社交的发展,也让商业智能广泛的传播,越来越多的人知道并理解商业智能。
BI 已经不再是一个锦上添花的软件,它代表的是一种企业竞争力,只是这种竞争力还没有被更多企业感知。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095559092-61571714.png)

**现代商业智能 3.0**

实现自助式和增强数据可视化,结合数字孪生,3D 建模,GIS 地图实现数据可视化,并结合当下最新发展的 AI 技术进行 AI 交互挖掘很深层次信息。是 BI 的发展领域和现代化特征。
随着云计算、SaaS (软件即服务)、大数据的发展和成熟,商业智能开始被更多的企业使用,高度易用的设计让业务人员也可以使用,无需 IT 的支持。

#### 2022 年及以后的嵌入式商业智能 (BI) 采用趋势

所有公司都在努力建立一种数据驱动的文化,预计到 2025 年大多数企业的数据量将达到 175 泽字节。如此大量的数据,意味着我们需要更加强有力的手段去组织管理。为了挖掘这些数据的价值,公司必须收集、组织、分析、整合和分发这些数据。这就是业务分析的用武之地,也是为什么越来越多的公司采用它并利用 BI 来发挥自己的优势。
让我们看一下 2022 及未来几年的嵌入式 BI 发展趋势

**BI 市场规模统计**
BI 市场由其他相互交织的行业发展推动,特别是在分析、大数据和人工智能市场。美国仍然是最赚钱的市场,但中国的增长率最高。

2021 年,BI 软件市场规模在全球范围内的收入为 228 亿美元。预计 2027 年将增长 44%,收入预计将达到 328 亿美元。到 2027 年,中国的增长率最高达到 119.8%,其次是美国( 37%),紧随其后的是德国和日 36.7%,然后是英国( 31.5%)。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095711605-1237346188.png)

**BI 投资**
BI 是组织技术堆栈中较为成熟的业务系统之一。越来越多的员工正在使用 BI ,与此同时,越来越多的公司正计划雇用全职 IT 人员来管理商业智能计划。2021 年,BI 在 B2B 技术买家 (38%) 的支出中排名第四。网络和视频会议以 64% 位居榜首,其次是在线协作和项目管理以及营销,分别占 53% 和 41%。这些数字可以在很大程度上归因于疫情居家办公影响的。尽管目前的员工可以访问和使用 BI ,但到 2021 年,73% 的 CIO 正在考虑为分析平台招聘全职 IT 员工,这在 CIO 全职技术职位计划中排名第二。

虽然统计数据显示公司计划雇用 IT 员工来管理 BI ,但自助式 BI 解决方案对用户非常友好。授权员工使用 BI 可以带来更快的洞察力、增强的团队协作、员工的整体满意度等。
即将到来的趋势确实表明,未来几年每位员工的 BI 支出预计将增加 30%:

- 2022 年 6.96 美元
- 2023 年 7.35 美元
- 2024 年 7.76 美元
- 2025 年 8.17 美元
- 2026 年 8.57 美元
- 2027 年 8.96 美元

BI 软件的成本差异很大。使用嵌入式商业智能,可节省采购成本及维护成本,可扩展许可模式为您的业务提供了增长空间,而无需增加许可费用。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095759043-1781825359.png)

**BI 感知到的重要性**

许多行业(即商业、金融和保险)多年来一直在使用 BI ,并且已经部署了成熟的 BI 集成。不过,展望未来,更多利基行业开始看到实施 BI 软件的必要性和好处。由于行业需求和流程千差万别,因此在搜索 BI 系统时,必须找到能够支持所有业务类型的嵌入式 BI 解决方案。嵌入式商业智能需包括仪表板和报告,满足各行各业的特定需求。尽管在过去三年中感知到的重要性有所下降,但对于采用 BI 解决方案而言仍然很重要。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095819029-870428056.png)

行业 BI
BI 被认为是满足许多行业业务目标的必备条件。但是,某些行业比其他行业更重视 BI 。
按行业划分,云 BI 作为一个关键且非常重要的系统,在以下方面最为明显:
- 技术 (77%)
- 教育 (76%)
- 医疗保健 (61%)
- 商业服务 (50%)
- 金融服务 (50%)
- 零售 (38%)

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095916164-1353240518.png)

另一方面,政府( 42%)和制造业( 28%)在采用率方面得分最低。这些数字可能是由于各种原因造成的,但政府的一个明显原因是数据的敏感性。在搜索 BI 系统时,找到具有可扩展安全性的系统至关重要,这样 IT 团队就可以轻松管理角色、权限、许可证、用户和安全性。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012095929458-995592458.png)


![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221012100648361-354303988.png)

移动 BI 变成企业产品选型的加分点,随时随地的洞察数据变得重要。新一代的商业智能产品涌现,传统商业智能被迫淘汰或者转型“敏捷 BI”。

#### 总结
本文从嵌入式 BI 的发展历程讲起,为大家详细介绍了嵌入式 BI 出现的背景、发展现状、市场应用与不同行业中 BI 的重要性,大家如果想了解针对不同行业的 BI 在线 demo 体验一下:

https://www.grapecity.com.cn/solutions/wyn/demo

#BI #商业智能 #139239 #https #com #嵌入式 #img2022 #cnblogs #blog #202210
照片生成 3D 动漫头像

有没有大佬有思路或者是什么项目能够参考一下的。

需求是通过单张照片生成类似下面这种 3D 人脸动漫头像,也可以是类似苹果的拟我表情这样的

![]( https://img2022.cnblogs.com/blog/1267954/202210/1267954-20221016002804588-227452812.png)

#1267954 #3D #https #img2022 #cnblogs #com #blog #202210 #20221016002804588 #227452812
万物皆可集成系列:低代码通过 Web API

数据录入在应用中是最常见也是最繁重的一项工作,而对于基础数据的维护更是要保证其准确性。比如需要录入身份证信息时,手工输入的效率低还容易出错;报销填发票时,要从一张一张的发票中找到金额、开票日期等一堆信息,一直重复着复杂的工作,类似的场景数不胜数。但现在,我们可以完全通过百度 AI 文字识别功能解决以上问题,文字识别准确性高、稳定性强、简单易用,而且适用于多种场景,同时可以节约录入时间,减轻工作量,提高工作效率。
在之前的内容中我们已经介绍了活字格如何与其它系统、应用对接,今天来说说在活字格中如何使用百度 AI 来智能识别身份证,驾驶证,行驶证,银行卡,营业执照和增值税发票。

#### 项目实战

为了更容易地使用百度 AI 智能识别的功能,我们将其封装成了插件,因此您需要先[下载]( https://marketplace.grapecity.com.cn/ApplicationDetails?productID=SP2104270013&productDetailID=D2207210001&tabName=Tabs_detail)并在设计器中安装插件;其次,需要登录[百度智能云]( https://login.bce.baidu.com/),在"文字识别"服务中创建一个新的应用,并获取 API Key 和 Secret Key 。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151146239-374227370.png)

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151154516-1736220924.png)

以上准备工作完成后,就可以进行开发工作啦:

1. 数据库中新建 WebConfig 表,并且配置获取到的 ApiKey ,SecretKey

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151222084-1562073886.png)

2. 在页面使用文字识别插件时,为了保证正常使用插件,需要添加 3 个辅助单元格
- 添加遮罩图片单元格,命名为 message (命名不能修改为其它值)
- 添加图片名称单元格,类型为文本框,该值等于上传图片单元格的值,设置文字识别命令,这样上传图片后会触发文本框命令,从而进行识别
- 添加遮罩动画单元格,类型为图片,可用来设置图片识别时的加载动画,命名为 loading (命名不能修改为其它值)
注意:A1 单元格是要被插件使用的,添加文字或者设置名称均可以。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151328828-1564382322.png)

3. 选择不同的识别类型,会创建对应的返回结果,将返回结果写到对应的单元格上并进行后续操作,也可以将识别结果字段以单元格名称进行绑定哦。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151343942-1708064864.png)

4. 当类型是增值税发票时,由于发票识别可能会有多行明细,因此需要有一个表格来接收数据,表格名需要保持一致,表格中的列如下图所示。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151357683-229654708.png)

按照以上步骤开发完成后,并不一定就万事大吉,运行时也可能会遇到些奇奇怪怪的问题,接下来我们就看看可能会遇到的坑:
1. QPS 超限额

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151408584-1196327798.png)

原因:只是创建了应用,但没有开通对应的 API 接口。可以在概览中,点击领取免费资源,把每个服务类型下的接口都全选,然后点击 0 元领取,当然也可以直接开通或者购买。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151424827-1977063780.png)

2. 识别失败,请检查配置重新尝试

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151441411-2025915971.png)

原因:
● ApiKey ,SecretKey 配置错误
● 上传的文件类型和识别的文件类型不一致
● 识别结果返回的单元格不是可以输入的单元格,一般设置为文本框即可


![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221020151456183-1148498612.png)

通过百度 AI 智能识别功能,我们可以将一些证件信息获取下来,至于接下来要怎么用这些数据就随意啦。以下是工程文件附件,供大家参考哈~
https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjM2NDc5fDgzYjNiYWVlfDE2NjU1NjIwMzJ8NjI2NzZ8OTk3MTg%3D

大家如果对更多低代码系列文章感兴趣: https://www.grapecity.com.cn/blogs/categories/huozige

#139239 #https #com #识别 #img2022 #cnblogs #blog #202210 #png #单元格
万物皆可集成系列:低代码对接阿里物流 API 实现快递跟踪

随着各大电商网购平台的发展,快递业已形成一个规模庞大的产业,据统计,全球快递企业已超过千家,而快递查询对于电商平台而言是最基础的功能之一,通过输入快递单号,不用区分具体是哪家快递公司,即可查询到快递的实时状态。目前的主流方法都是调用第三方快递查询接口,下面就介绍一下在活字格中如何调用 API 接口来进行快递查询,并将结果展示在页面上。

本例子使用的 API 是阿里云市场的一个[全国快递物流查询接口]( https://market.aliyun.com/products/57126001/cmapi021863.html?spm=5176.730005.productlist.d_cmapi021863.ebSZX2#sku=yuncode1586300000),有 100 次免费调用的机会,购买成功后,可在**已购买的服务**中查看到购买成功的 API 商品情况。调用方式使用简单身份认证方式,需要用到**接口地址**以及**AppCode**。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221027171502475-474500255.png)

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221027171510041-1189921951.png)


在活字格中,首先需要创建服务端命令来实现接口调用,其中参数是快递单号,使用发送 HTTP 请求命令,根据接口的文档要求,需要做如下几个配置:

1. 请求方法为 GET ,填写请求地址,接口的地址拼接上快递单号

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221027171617791-1168382083.png)


2. 设置请求头,名称为 Authorization ,值为“AppCode + 半角空格 + AppCode 值”

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221027171632814-1929231860.png)


3. 通过返回命令将接口的数据返回

接下来就是在前端页面调用写好的服务端命令,然后将返回的结果进行展示。活字格提供了 JSON 反序列化命令来进行数据解析,然后可以使用导入 JSON 数据到单元格进行数据的展示,使用 ElementUI 的时间线插件可以很方便的展示快递的详细情况。

![]( https://img2022.cnblogs.com/blog/139239/202210/139239-20221027171642779-275164561.png)


使用活字格,不用写一行代码就可以实现以上功能,而且整个开发过程半个小时就能搞定,下面有本例子的工程文件,修改一下样式就可以使用啦。

https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjQwNDQ2fGM1YTliYjAyfDE2NjY4NjE4ODd8NjI2NzZ8OTk3MTg%3D

#快递 #139239 #https #com #接口 #img2022 #cnblogs #blog #202210 #png
BI 智慧工程行业应用方案丨文末获取三重资源包

**文末获取资源包丨 BI 智慧工程行业应用方案详解,不要错过!**
## **我国工程行业现状**
对于我国现阶段的工程行业来说,建设项目普遍具有规模化、群体化和复杂化等特征,而通常不具备项目管理能力的业主方须参与建设过程,并需要承担许多管理工作。

对从业者来说工作中责任风险,大量成本、时间和精力将被消耗在各种界面沟通和工作协调上,甚至会出现众多参建方相互制衡和各项管理目标失控等复杂情况。

总结起来说,主要有以下三点问题不可忽视。

传统建设工程的目标、计划、控制都以参与单位个体为主要对象,项目管理的阶段性和局部性切断了项目之间的内在联系,导致项目管理存在明显的管理弊端。
“专而不全”、“小而分散”型企业的参与,通常会导致项目信息流通不完整,导致信息孤岛现象,整个建设项目缺少统一的计划和控制系统。
工程管理的复杂性和施工现场的多变性,传统的管理手段无法做到建筑企业和施工单位项目的精细化管理。

为了更好帮助工程企业的数字化转型,葡萄城推出智慧工程行业应用方案,下面是应用方案部分内容概览,从目前行业痛点、解决方案和客户案例等几个部分详细为大家介绍。

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160405824-328882792.png)


## **工程企业数字化痛点**
对于工程企业来说,不同的企业之间的运作方式不同,但是有存在一些行业的标准规范,行业迅速发展,效率与质量需要同步发展,二者之间的矛盾无法平衡;同时这些企业的业务系统庞大,历史数据复杂,导致数据分析任务繁重,往往会出现数据处理不当,数据零散不成体系,导致数据的使用率低,价值得不到充分发挥这些问题。

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160415863-31178522.png)

## **智慧工程升级挑战**
智慧工程是指运用信息化手段,通过三维设计平台对工程项目进行准确设计和施工模拟,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析,提供过程趋势预测及专家预案,实现工程施工可视化智能管理,以提高工程管理信息化水平,从而逐步实现绿色建造和生态建造。

工程项目管理是项目管理中的一个重要和专门的领域。在限定的时间内,对资源作好计划、组织、指导和控制,以实现一次性项目的既定目标。而在建设智慧工地,完成企业数字化转型,实现项目综合管理的过程中主要有以下三个方面问题:

企业整体规划不足
企业缺乏系统规划
信息化投入不足

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160428980-693815662.png)


## **智慧工程解决方案**
为了攻克这些问题,保证参建方相关成员可以进行多方协同,实现实时进度、质量、预控安全、风险警示、人员管理、环境检测,通过数据可视化分析,建立保障预警机制等,我们推出出了葡萄城智慧工程解决方案。通过多个系统的对接、多组织架构用户权限管控、用户权限管控等操作,完整实现建筑工程数字化。

下为解决方案部分展示:

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160441624-100099005.png)
![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160444825-1230309139.png)
![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160448571-140465561.png)
![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160452624-127266038.png)

该方案基于建筑工程业务核心,对接多种可视化模型,通过直观的数据可视化项目呈现,让智慧工程方案完美落地。

如果你还在为项目困扰,那千万不要错过下面的免费资源!

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160507168-1251121254.png)


扫描下方二维码添加小助手微信,获取**智慧工程可视化解决方案 + 课程详解 + 项目大屏素材,**回复“**BI 智慧工程**”,**海量免费资料**,**高质量 BI 行业精品资源分享群**,不要错过!

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221110160517836-1601957420.jpg)

#139239 #https #img2022 #cnblogs #com #blog #202211 #工程 #png #智慧
万物皆可集成系列:低代码对接 Web Service 接口

我们知道活字格支持不写代码实现双向 API 绑定,那么没那么主流的 Web Service 接口( SOAP 协议+XML 交互格式)呢?其实对接的思路没有那么复杂,得用 C#编码来对接的。
作为一款企业级低代码开发平台,活字格可以和许多第三方软硬件进行集成,灵活、高效使它不可忽视的优势。在之前的内容中我们已经介绍了活字格如何与其它系统、应用对接,今天来说说以天气预报 Web Service 的接口为例,如何使用活字格来对接它的 WSDL 接口。
[天气预报 WEB 服务接口说明 - 天气现象和图例 - WebXml.com.cn]( http://www.webxml.com.cn/zh_cn/weather_icon.aspx)


下面我们来看看实际操作的步骤吧。文末有代码示例下载地址,不要错过~

### 项目实战
第一步:在 Visual Studio 创建 ServerApi
由于活字格 6.1 切换了.Net Core ,我建议大家在创建 ServerAPI 的时候直接选择创建.Net Standard 框架的类库。
在我们帮助手册的这里,详细讲解了如何创建一个服务端 WebAPI
https://help.grapecity.com.cn/pages/viewpage.action?pageId=72366523

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221117170730301-2030213706.png)

第二步:引用 Web Service 服务
创建好.Net Standard 类库后需要引用 Web Service 服务,可参考这里
[在 ASP.NET Core 调用 WebService - .NET 开发菜鸟 - 博客园 (cnblogs.com)]( https://www.cnblogs.com/dotnet261010/p/12327310.html)

引用好 Web Service 服务之后,在 C#工程文件中可以看到对应的方法

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221117170819356-1022062161.png)

第三步:编写活字格 ServerAPI 代码

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221117170833516-1186297743.png)

第五步:对比 SoapUI ,处理 response 获取的值
这是 SoapUI
![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221117170850105-1654824317.png)

这是 response 获取的值

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221117170907292-1117762479.png)

根据你的业务场景,通过 C#编码方式对返回值做逻辑处理

第六步:设计器中用发送 HTTP 请求命令请求活字格的 ServerAPI

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221117170924216-1981073741.png)

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221117170930498-400645403.png)

打完收工~

按照这个步骤,你就可以使用活字格来对接 WSDL 接口了。
示例下载地址:
https://gcdn.grapecity.com.cn/forum.php?mod=attachment&aid=MjQ0NzYyfDE2YzQ2Y2I0fDE2Njg2NzU1NjB8NjI2NzZ8OTk3MTg%3D

### 拓展阅读

[万物皆可集成系列:低代码对接企企云实现数据集成]( https://www.grapecity.com.cn/blogs/huozige-lowcode-docking-with-enterprise-cloud-to-realize-data-integration)
[万物皆可集成系列:低代码如何不成为数据孤岛]( https://www.grapecity.com.cn/blogs/huozige-how-can-lowcode-not-become-a-data-island)
[万物皆可集成系列:活字格对接泛微 e-cology]( https://www.grapecity.com.cn/blogs/huozige-lowcode-e-cology)

#com #139239 #https #cnblogs #cn #活字 #img2022 #blog #202211 #png
如何用 JavaScripte 和 HTML 实现一整套的考试答题卡和成绩表

相信在学校的你都有这样的体验,临近考试,要疯狂的“背诵”否则成绩单就要挂零,因为答题卡全部涂抹都是错的。
那么毕业多年的你,没有了考试,有没有一丝怀念涂答题卡的时候,有没有好奇这个答题卡到底如何制作,成绩表到底如何为每位同学定制动态生成的。
这些都要归功于“报表”工具
学校每年都会打印很多的学生成绩单,往往因为新增的课程和不同的教学体系,导致想要的结果复杂且多变的。那么如何使用一个工具就可以灵活的制作各种各样报表,面对多变的场景

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124181842587-1166542758.png)

上图就是我们制作出来的一个答题卡报表,而且它可以根据学生数量批量加载学生的信息数据,然后直接生成并且供我们打印。那他的优势也就显而易见了,自己设计的答题卡,题型和题量都可以自己来选择,灵活多变,且可以根据不同题型自己随意更新。也可以增加很多默认数据,毕竟自己设计打印的肯定也比购买的便宜嘛。
自己制作报表困难嘛?
有些人可能就想说,自己做是不是很麻烦,而且也不会用,学起来是不是还很吃力。小编就可以自信的说了,作为手残党的我也可以很快制作的,但是上限却很高,越发深入的使用,带来的肯定也是越多的经验,当你制作多了后,还可以关注更多的功能,不仅仅是制作显示出来,更好看的更多功能的才是我们的追求。
就比如下面这个报表,只需要简单的几步就可以实现。而且效果还不错。

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124181911216-1727990017.png)

#### 实战开始
首先我们要设计对应的报表,下面是报表设计的整体界面:
![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124181927120-169544267.png)

在左侧是我们需要使用的组件,也就是设计报表需要的元素,中间就是显示,最右侧可以控制一些属性设置和指定数据。这么一看就很清晰了,我们其实简单的拖拽就可以实现所需要的报表设计,简单方便,设计好之后可以导出下载都可以。光说这些肯定还是不够的,那么接下来就直接上实例:
### 毕业信息表
当我们统计学校不同学院的毕业信息时,可能需要根据从系统中查到数据然后拿出来,之后在自己计算所需要的数据,然后在在 Excel 表中一点一点的去写,特别时数据多点,我们的工作人员可能就会因为一张表而制作一整天。毕竟制作 Excel 表的痛苦大家应该都知道吧,那用 wyn 产品怎么实现的,手残党福利来了:
只需要简单的绑定需要的数据,然后把要显示的直接拖到页面上,然后写几个表达式。完成,可能本来一天的工作量,现在几个小时就 OK 了,是不是很诱惑啊。可以看下面两个图,第一个是设计界面,第二个是预览成果。

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124181945327-70477973.png)

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124181958682-384765006.png)


没错,就是简单的绑定这么几列数据,然后他就会根据我们数据源有的数据进行自动计算,自动扩展行展示。是不是很简单。
### 答题卡
那么答题卡的样子上面大家已经看到了,那有人问了,我们学生人很多啊,我不可能真的一个一个设计吧,就算只是一直复制粘贴,也很费时间。那在怎么解决呢,很简单这里只要绑定好数据的话,设置按人的分组,那他就会自动加载所有学生的了,而且对应的信息也对对应过来,这个时候我们打印就可以批量打印,并且不同学生显示不同信息。这种场景其实也可以应用在很多场景下,比如打印学生的准考证,学生的成绩单等等,其实都是需要批量打印的,那用这个产品就可以实现相同模板的批量打印。

### 学生成绩单
除了教师使用的,当然也有学生使用的啦,就比如我们最常见的成绩单
那么针对不同学生我们需要的是不同的成绩单,那这里就有个需求就是不同学生看不同的信息,自己查询自己的成绩单,自己打印自己的成绩单,那其实就像当于一个筛选嘛,那针对多变且不同的课程,往往很复杂。不同学生不同信息,那这个时候又是头疼的时候,那么使用 wyn 产品的就可以设计统一的样式,然后我们通过参数筛选,筛选出来自己的信息,比如我们通过学号查询自己的成绩单,就可以实现如下图:

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182037054-672773001.png)

### 项目实战
接下来给大家来点干货分享,如何使用前端报表控件 ARJS 通过拖拉拽实现大学成绩绩效表的设计。
1 、首先我们来解析下这张报表
该表主要分为三个部分:
表头:也是就是学生基础信息,包括学习:姓名、学院、专业、学号、班级、学历、毕业证号
![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182058410-2101154687.png)

明细部分:显示大学四年的考试绩效成绩,包含学期、课程名称、学分、成绩
明细部分你自己看发现其实是三个相同的模块

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182111891-571799891.png)

表尾部分:表尾部分主要是学分的统计、平均成绩、平均绩点

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182122635-1240085982.png)

2 、 拆分完这张表之后,那么就可以根据实际需求进行报表的设计
首先给报表添加页眉和页脚,页眉中通过文本框来设置表头需要显示的信息表头和页脚通过文本框来进行表尾的显示设计
中间内容区域,首先使用表格控件,然后利用表格控件的分组,分组条件根据绑定数据的中的数据字段学年和学期进行分组,

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182136795-1799011032.png)

明细内容是三个相同的模块,也就是在一个内容区域显三个相同区域。那么这可以使用报表字段的分栏属性来设置,

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182153618-1990961847.png)

3 、 最终设计好的报表设计样式

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182203221-1350940246.png)

4 、 最终预览结果:

![]( https://img2022.cnblogs.com/blog/139239/202211/139239-20221124182214116-387798891.png)

5 、 报表模板

相信能看到这里的小伙伴肯定也已经跃跃欲试了,这里我们为大家提供了多模板可以尝试。
模板下载:
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=152591&extra=page%3D1

#139239 #https #com #img2022 #cnblogs #blog #202211 #png #报表 #成绩单
写了一个爬虫,把自己以往的博客都爬到本地了

写了十几年的博客,分布在 csdn 还有 cnblogs 上。
个人主页都不如这些大站靠谱,要不就是个人服务器没续费,域名过期。

爬虫下载个人博客下了好多内容。可是有不完美的地方,就是下载图片的时候,有的图片年久失修,外链也下不了了。针对每个页面的图片都重新下载一遍,可谓比较费事。

有了这些博客,以后可以用 json 格式随便发到任何博客平台。例如 wordpress rpc 等。

然后深思,你能找回以往的博客,但是能找回以往的你吗?

#博客 #下载 #图片 #找回 #续费 #以往 #个人主页 #csdn #cnblogs #外链
BI 智慧仓储行业应用方案,让你的仓储物流不再复杂

## **仓储物流行业现状**
对于物流仓储行业来讲,面对激烈的市场竞争,日益升高的人工成本,不断提升的转运要求,以及搬运损毁效果和转运效率的低下,企业必须去提升市场的竞争力来站稳市场。仓储管理在物流管理中占据着核心地位。传统的仓储管理中存在诸多弊端,通过智慧物流,加大装备技术升级力度,提升自动化水平,实现机器替代人的战略,可有效解决仓储物流管理的现存痛点。

为了更好帮助物流企业的数字化转型,葡萄城推出智慧仓储行业应用方案,下面是应用方案部分内容概览,从目前行业痛点、解决方案和客户案例等几个部分详细为大家介绍。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090740568-134315195.png)

## **行业数字化转型方案**

信息化是企业推动业务快速成长与完善的关键因素。当前,信息化的落后与缺失意味着企业整体的缺失,反之亦然。企业对业务的信息化的需求是十分迫切的,仓储管理就是其中

一个很重要的环节。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090755053-1687167982.png)

## **数字可视化助力智慧仓储数字化转型**
随着科技水平的不断提升,数据可视化和智能化给大家带来了很大的便捷性,利用数字可视化将数据都结合起来,让数据自带魅力,最大范围的发挥它的最大效果,通过多种数字化技术和对应的结论,去进一步推动“智慧仓储物流”的实现。其次,智慧仓储物流是商业零售驱动物流背后贯穿整个供应链运营的所有环节,如何做好消费升级服务的保障落地对行业未来发展至关重要。加快智慧化技术升级、降低运营成本、对消费者进行精准服务是物流业转型升级的必经之路。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090812968-1470576818.png)

## **智慧仓储解决方案**
为了攻克这些问题,使用一站式数据可视化分析解决方案解决,通过对原始多个系统的数据进行实时采集、录入系统、在进行进一步的加工、分析、再造,其中包括对原始表和字段做的编辑,添加的一些过滤条件等等一系列操作,让数据拥有自我魅力,实现自我价值。

下为解决方案部分展示:

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090825353-1171806147.png)

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090832732-811265077.png)

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090839989-1156045115.png)

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090900567-1283276357.png)


该方案基于仓储物流业务核心,对接多种可视化模型,通过直观的数据可视化项目呈现,让智慧仓储方案完美落地。

如果你还在为项目困扰,那千万不要错过下面的免费资源!

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090924593-1556421138.png)

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209090930068-2044099534.png)


现在扫描下方二维码添加小助手微信,回复“**BI 仓储物流**”,即可免费获取**仓储物流可视化解决方案 + 课程详解 + 项目大屏素材资源包,**下载**海量免费资料**,加入**高质量 BI 行业精品资源分享群**,不要错过!

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209091104930-2112995275.jpg)

#139239 #仓储 #https #img2023 #cnblogs #com #blog #202212 #png #物流
BI 智慧仓储,带你体验数字化仓储物流管理

## **1 、行业背景**
智能仓储物流是以信息交互为主线,使用条形码、射频识别、传感器、全球定位系统等先 进的物联网技术,集成自动化、信息化、人工智能技术,通过信息集成、物流全过程优化 以及资源优化,使物品运输、仓储、配送、包装、装卸等环节自动化运转并实现高效率管理。能够有效提高企业的市场应变能力和竞争能力,为客户提供快捷、方便、准确的服务, 同时降低成本,减少自然资源和社会资源的消耗。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209133828284-1437073524.png)

## **2 、行业痛点**
对于物流仓储行业来讲,面对激烈的市场竞争,日益升高的人工成本,不断提升的转运要求,以及搬运损毁效果和转运效率的地下,企业必须去提升市场的竞争力来站稳市场。仓储管理在物流管理中占据着核心地位。传统的仓储管理中存在诸多弊端,通过智慧物流,加大装备技术升级力度,提升自动化水平,实现机器替代人的战略,可有效解决仓储物流管理的现存痛点。

## **3 、行业定义**
智慧仓储是一种仓储管理理念,是通过信息化、物联网和机电一体化共同实现的智慧物流,从而降低仓储成本、提高运营效率、提升仓储管理能力。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209134109396-1036434103.png)

## **4 、行业数字化转型方案**
信息化是企业推动业务快速成长与完善的关键因素。当前,信息化的落后与缺失意味着企业整体的缺失,反之亦然。企业对业务的信息化的需求是十分迫切的,仓储管理就是其中一个很重要的环节。

5 、数字可视化助力智慧仓储数字化转型

随着科技水平的不断提升,数据可视化和智能化给大家带来了很大的便捷性,利用数字可视化将数据都结合起来,让数据自带魅力,最大范围的发挥它的最大效果,通过多种数字化技术和对应的结论,去进一步推动“智慧仓储物流”的实现。其次智慧仓储物流是商业零售驱动物流背后贯穿整个供应链运营的所有环节,如何做好消费升级服务的保障落地对行业未来发展至关重要。加快智慧化技术升级、降低运营成本、对消费者进行精准服务是物流业转型升级的必经之路。
## **6 、对应的解决方案**
仓储数据和物流的可持续改进是不可区分的,那我们如何才能让数据有自我魅力呢?让数据有自己的结构色彩?

这里提供的一站式数据可视化分析解决方案,可以通过对原始多个系统的数据进行实时采集、录入系统、在进行进一步的加工、分析、再造,其中包括对原始表和字段做的编辑,添加的一些过滤条 件等等一系列操作,让数据拥有自我魅力,实现自我价值。

仓库数据统计:仓库总数、仓库容量、入库金额、库存金额、仓库位置等;

仓库货物统计:物品名称、仓库使用率、货物状态、预测货物出入库件数等;

仓库分析:各区域仓库分布统计、物流数量统计、预测数量等;

仓库情况:货物发送地情况、各区域的物流情况统计等。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209134149473-14012318.png)

### **智能仓储可视化大屏**
利用数字可视化技术分析和展示,分析仓库的综合使用情况,包括各区域的物流情况,物流数量,各区域的发货情况以及捡货动态。构建数字化智能仓储管理平台,从而进一步增强决策效率。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209134158871-206842433.png)

### **智能物流园区数字大屏**
利用数字可视化技术分析和展示,分析物流园区的综合使用情况,包括仓库位置、仓库数量,物品种类,仓库的使用率,出库统计,取货状态,以及仓库的运行状态等。构建数字化、智能化的管理平台,从而提高效率。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221209134206636-1255721288.png)

以上通过使用数字化管理平台来展示智慧仓储物流的具体分析情况,我们可以很清晰的看到各个模块具体的展示信息和内容。后期我们可以根据具体的实际应用场景,自行组合各个组件去实现需求,实现数字智能化和自动化控制,让一切尽在掌握。

大家如果对具体解决方案感兴趣可以查看: https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=157030&page=1&extra=#pid598831

## **7 、拓展阅读**
[详解商业智能“前世今生”,“嵌入式 BI”到底是如何产生的?]( https://www.grapecity.com.cn/blogs/wyn-how-the-embedded-bi-come-about)

[使用 WIX 进行商业智能 OEM 打包]( https://www.grapecity.com.cn/blogs/wyn-oem-packaging-with-WIX)

[数据可视化分析工具如何在国内弯道超车迅速崛起百花齐放?]( https://www.grapecity.com.cn/blogs/wyn-data-analysis-tools-how-to-technology-leadership)

#仓储 #139239 #物流 #仓库 #https #com #可视化 ### #img2023 #cnblogs
手把手教你玩转 Excel 数据透视表

**1.  什么是数据透视表**

数据透视表是一种可以快速汇总、分析大量数据表格的交互式分析工具。使用数据透视表可以按照数据表格的不同字段从多个角度进行透视,并建立交叉表格,用以查看数据表格不同层面的汇总信息、分析结果以及摘要数据。

使用数据透视表可以深入分析数值数据,以帮助用户发现关键数据,并做出有关企业中关键数据决策。

**2.  为什么使用透视表**

简单、高效、灵活、出错率低。

**3.   什么时候用数据透视表**

- 找出同类数据在不同时期的某种特定关系
- 以简洁友好的方式,查看大量的表格数据
- 对数值数据快速分类汇总,按分类和子类查看数据信息
- 建立交叉表格,将行移动到列或将列移动到行,以查看数据源的不同汇总
- 快速的计算数值数据的汇总信息、差异、个体占总体的百分比信息等
- 数据源经常变化

**4.   数据透视表的使用方式**

4-1 数据源

用于生成透视表的原始数据成为数据源。

数据源需要们组一定的规则才能成为一个合法的数据源,详细规则如下:

- 每列数据的第一行是该列的标题
- 数据源不能包含空行和空列
- 数据源不能包含空单元格
- 数据源中不能包含合并单元格
- 数据源中不能包含同类字段

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103146233-1431011303.png)


上图中,方框圈出的区域都属于不合法的数据区域。其中,绿色区域为合并单元格,黄色为空白单元格,蓝色为同类字段,均不符合对标准数据源的要求。

4-2 透视表刷新

透视表刷新粉两种方式,手动刷新和自动刷新。

手动刷新下,也分为两种情况,分别是数据源区域未改变及数据源区域发生改变。如果只是单元格数值发生变化,可以选中透视表区域右键刷新或者在透视表分析面板中点击刷新。而如果对数据源进行了删除或新增,则需要手动的去更改数据源。

自动刷新可以在数据透视表选项面板中选择打开文件时刷新数据或使用 VBA 自动刷新数据表。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103155937-497455573.png)


**5.   切片器**

透视表默认提供了筛选、排序等功能,但在需要多维度筛选分析数据或者多个透视表之间共享筛选条件时,默认的筛选按钮操作起来十分繁琐,并且不够直观,在这种情况下,可以使用切片器来达到数据筛选及共享条件效果。

切片器是 Office 2013 以上版本才有的功能,主要作用就是简化数据筛选,可应用在超级表或者透视表上。给文件中普通的区域套用表格样式之后,该区域会变成超级表,在此选择该区域,就可以插入切片器了,详细操作如下:

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103633151-799348536.gif)



切片器同样也可以应用于透视表,在一个 Excel 文件中,基于相同的数据源,可以生成多个透视表,这些透视表之间会共享数据透视缓存。此时基于某个透视表创建的切片器,选择报表连接,即可与其它透视表共用同一个切片器,实现筛选条件的同步,详细操作如下:

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103623560-1133198778.gif)


**6 透视表的应用场景**

6-1 教学管理系统

生成课表是教学管理系统中的一个高频需求点,使用透视表可以十分快捷地生成每个班级的课程表,具体操作如下:

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103613510-1905770436.gif)

除了制作每个班级的课程表之外,简单的改变透视维度,又可以生成每位老师的课程表:

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103557983-513648920.gif)

上边生成的透视表可以让老师们直观的看到自己每天的课程数量,也方便管理者更加直观地了解员工的工作量。

6-2 人事管理系统

人事管理系统中,高频的需求点就是对人员的分类汇总。例如,我们需要对公司所有员工按照性别进行分类,就可以基于人员信息生成透视表,具体操作如下:

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103544689-1342246583.gif)


该透视表,行维度为部门信息,列维度为性别,最终统计字段为员工姓名。只需简单几步,即可直观的看到人员性别的统计数据,再也不需要我们去做筛选后再统计数据了。初次之外,透视表可以应对复杂多变的统计条件,某一天,你的领导突然想知道公司人员的学历占比,此时你只需要

轻轻调节维度信息,就可以快速交工,又可以快乐的摸鱼了。基于透视表,可以生成更加直观炫酷的透视表,是时候在领导面前秀一波了。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103530639-43833259.gif)

除此之外,透视表也可用于区间数据汇总分析,例如,我们可以分年龄段统计人数。并且统计结果黏贴为普通区域,基于该区域生成一张有对比效果的图表,一起来看看吧~

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103515845-804113588.gif)

6-3 在销售中的应用

在销售管理系统中,一个高频的需求点就是根据销售订单,快速生成月报、季度报告、年报等等。使用透视表,只需要简单几步,即可完成报告的生成,再也不需要苦哈哈的手动去统计数据,之后再制作报表了。首先,我们基于销售历史数据生成一张透视表,并按照销售日期等维度制作一张基础透视表。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103503386-1211422938.gif)

接下来,我们对日期创建组,实例中以月维单位,实际项目中,可以根据实际需求,按照季度等其它单位创建组。

![]( https://img2023.cnblogs.com/blog/139239/202212/139239-20221226103451919-1462708050.gif)


透视表在实际业务中应用广泛,也可应用于报表的合并分析及拆分。


### **拓展阅读**
[React + Springboot + Quartz ,从 0 实现 Excel 报表自动化]( https://www.grapecity.com.cn/blogs/spreadjs-realize-excel-report-automation-from-0)

[电子表格也能做购物车?简单三步就能实现]( https://www.grapecity.com.cn/blogs/spreadjs-three-steps-shopping-cart-with-spreadsheet)

[使用纯前端类 Excel 表格控件 SpreadJS 构建企业现金流量表]( https://www.grapecity.com.cn/blogs/spreadjs-construction-of-enterprise-cash-flow-statement)

#透视 #139239 #数据源 #https #com #img2023 #cnblogs #blog #202212 #数据