• 博客(42)
  • 收藏
  • 关注

原创 BI前端实践 13:语义层把多库联合起来做多维分析

实践目标大数据时,可能被分割开存入多个数据库中以分摊计算量,这些数据库可能因为设计作用不同(比如是当期库和历史数)而导致其数据结构不一定完全相同。用元数据可以把它们统一映射成一个逻辑表,DQL Server将实时向各个分库发出SQL执行,取得结果数据再联合起来,给前端多维分析提供数据。多版本迭代的项目数据一个长期运营的项目,数据结构会存在迭代现象。比如不再发生变动的历史数据用另外的数据库存储;又或者数据结构随业务发生了变动或更换了数据库,用新结构的数据库存储以后的数据。新版本数据结构的命名规

2021-08-31 11:03:44 195

原创 MongoDB如何合并相同属性的不同字段

MongoDB作为文档型数据库,可方便灵活存储文档,属性相同或相似的数据可采用不同的形式来记录。如有集合 users, 其中用户 July 与 Tom 电话字段记录方式不同,一个多字段形式,一个数组形式,希望按 NAME 分组,合并其下的 TEL。具体数据如下:…… { "_id" : ObjectId("5fd305b4db8950e48f0cf196"), "username" : "July", "gender" : "F", "age" : 17, "TEL1" : "1881122329

2021-08-31 11:00:46 810

原创 如何把多个列数不定的 Excel 合并成汇总表

例题描述有电镀检验报表.xlsx,当月每日的检验数据各存在一个sheet中,从F列开始是电镀缺陷类型,各sheet中的缺陷类型和列数不完全相同。11月16日数据如下图所示:现在需要用这些每日数据做汇总报表,按日期汇总统计每天的投入数、合格数、合格率,列出所有的缺陷种类每天发生的次数,目标报表如下图所示:这个汇总的棘手问题是每日数据中缺陷种类列数不定,数据结构不相同,需要对每天的数据做合并处理。解决的思路是先把每日数据转置为行式,形成检验日期、缺陷种类、缺陷数共三列的数据,如下图。

2021-08-31 10:57:27 552

原创 BI 前端实践 12:隐身的汇总表提速多维分析

实践目标数据量大的基础表,做多维分析时会比较慢,通过汇总表预先缓存一些聚合数据,然后在元数据中设置好基础表和汇总表的关系,最后达到这样的效果:在界面上做多维分析感觉不到汇总表的存在,后台的DQL Server能自动选用合适汇总表提速查询。大数据量的基础表和基于它的汇总表项目中的订单表可能有上亿条数据,基于它做分组汇总,速度会比较慢,这时如果预先把一些常用的汇总数据计算出来,并存入专门的汇总表,再做分组汇总分析时,直接从汇总表得到数据就会比较快,如订单表中的订单金额(amount)、订单日期(de

2021-08-30 10:27:09 122

原创 MongoDB 怎么合并多属性子文档

MongoDB能通过嵌套子文档,可方便灵活记录子文档的多个属性,了解更多的内容细节。如有集合 blog, 其子文档 access 下有 append、edit、manager、read,希望按 NAME 分组,合并其下的 uids,且数据不重复。具体数据如下:{ "_id": ObjectId("99014006e4b0aaac99a104ae"), "access" : { "append" : { "uids" :[ ObjectId("94f9bfb0aa6a19084789ca9a")],

2021-08-30 10:24:54 373

原创 如何把数百个列数不定但格式相同的 Excel 汇总合计

现有几百个格式相同的 Excel(日报):Excel 格式和内容如下:其中行数和列数不确定,但所有 Excel 的列是相同的。现在需要将几百个 Excel 按项目金额种类和员工求和汇总,形成如下汇总表(所有 Excel 数值相加):使用集算器实现步骤:1. 安装运行集算器2. 编写SPL脚本脚本列出来看下: A 1 =directory@p("43/") 2 =A1.(file(~).xlsimport@t(;,2

2021-08-30 10:22:07 274

原创 BI 前端实践 12:隐身的汇总表提速多维分析

实践目标数据量大的基础表,做多维分析时会比较慢,通过汇总表预先缓存一些聚合数据,然后在元数据中设置好基础表和汇总表的关系,最后达到这样的效果:在界面上做多维分析感觉不到汇总表的存在,后台的DQL Server能自动选用合适汇总表提速查询。大数据量的基础表和基于它的汇总表项目中的订单表可能有上亿条数据,基于它做分组汇总,速度会比较慢,这时如果预先把一些常用的汇总数据计算出来,并存入专门的汇总表,再做分组汇总分析时,直接从汇总表得到数据就会比较快,如订单表中的订单金额(amount)、订单日期(de

2021-08-27 14:50:16 99

原创 如何从巨大的文本中随机抽样少量行

现有文本huge.txt,前 5 行内容如下:f1 f2 yewhhgfifsbplrxankqazzewzkhfxjetiprfvyinchmdventatkry lwxazkmczmpcluechdtfgwapgvyzfxqczcuvadkfqrcciptmpo viqxbdjjzkdcytdnjiuexottvgdjkafhykbotjsupyuybvgycqhfsdlypuftbezga mmoermrlbovwmfnxgctizucfccatwlvugnqvikhbg

2021-08-27 14:46:57 257

原创 行列方向都合并时汇总重复项

列转行,汇总,再行转列。关键函数:pivot和groups举例有 csv 文件 csv1.csv,如下:有 csv 文件 csv2.csv,如下:现在需要把这两个表按行列合并,同时汇总重复项,结果如下:编写 SPL 脚本: A 1 =file("csv1.csv").import@tc() 2 =file("csv2.csv").import@tc() 3 =A1.pivot@r(id;col,val) 4 =A2

2021-08-27 14:42:43 128

原创 BI 前端实践 11:多维分析使用有层次的维度

实践目标有些维度有层次关系,比如产品的多级类别;年、月、日;国、省、市,这几个有层次关系的维度有可能存储在同一个字段中,比如005006008中包含了三级类别的编码,日期字段中则隐含了年维、月维。通过在语义层中预定义这些层次关系,把隐含的维度明晰定义出来,以方便界面中做多维分析。认识维度的层次修改测试库,给产品表增加分类ID、引入日期两列。一个产品可以归类为一级类别、二级类别、三级类别三种,分类ID的编码特点是每3位代表一个级别。各级分类的名称在产品分类表(product_categor

2021-08-26 12:11:38 366

原创 MongoDB如何分组后获取每组的最新记录

在统计应用项目中,经常遇到分组后,想了解每组中的日期最新记录的状态。如有集合 project, 想了解executionProject每组日期最新的 suiteStatus,数据如下:{ "_id" : ObjectId("55d4410544c96d6f6578f893"), "executionProject" : "Project1", "suiteList" : [ { "suiteStatus" : "PASS", } ], "runEndTime" : ISODate("2015-.

2021-08-26 12:07:37 1047

原创 如何合并多个 CSV 的行和列

例题描述现有3个CSV文件book1.csv、book2.csv、book3.csv,用Excel打开如下图所示:现在需要把它们的行和列合并成一个文件,如下图所示:实现步骤1、 运行集算器可去润乾官网下载职场版,同时下载一个免费授权就够了,首次运行时会提示加载。2、 编写脚本:把代码列出来看得清楚点: A 1 >dir="E:/csv/" 2 =file(dir+"book1.csv").import@tc(

2021-08-26 12:04:06 1784

原创 BI前端实践 10:基于语义层的权限控制

实践目标元数据中定义了整个数据库的表信息,在使用它时,要控制某些用户不能看某些表、某些字段、或不能看表中的某些数据。控制参与多维分析的表、字段范围由元数据生成的字典文件,之前已经认识过,它里面有个分类项功能,简单说就是挑选一些表、字段、维度,组成一个完整的大分类,给某些特定用户使用,从而限制他们看到的信息范围。比如下面的“员工分析”这个分类中,就去掉了订单、产品相关的表,区域表中去掉了区域级别字段:在多维分析jsp中设置使用上面这个orders.dct,同时设置使用“员工分析”这个分类项

2021-08-25 11:18:17 150

原创 MongoDB 怎么实现交叉汇总

交叉表作为一种常用的分类汇总表格,它可以用来显示表中某个字段的汇总值,并将它们分组;通过某一变量分组后作为行,然后用其它变量或变量的组合作为列,形成数据表进行统计分析。如有集合 events, 统计每个用户的各个事件的数量;按不同的人汇总事件数到表最后一列,按各事件汇总到最后一行,相关的数据与汇总表如下:UserID EventID Count Date 1 1 10 2020-01-02 1 1 15 2020-01-02 1

2021-08-25 11:14:33 262

原创 行列方向都合并时去除重复项

列转行,去重,再行转列。关键函数:pivot和group举例有 csv 文件 csv1.csv,如下:有 csv 文件 csv2.csv,如下:现在需要把这两个表按 csv2、csv1 的顺序行列合并,遇到重复项时按顺序取第一个出现的值,结果如下:编写 SPL 脚本: A 1 =file("csv1.csv").import@tc() 2 =file("csv2.csv").import@tc() 3 =A1.p

2021-08-25 11:11:39 268

原创 BI前端实践9:由DQL支持的关联多维分析

实践目标定义完元数据,部署到DQL Server后,再进行多维分析(OLAP)时,体会后续界面操作、概念理解上的难易,探究DQL查询语言对多维分析的实际提升效果;同时,进一步探测DQL查询能力的完备性。融入关联关系的元数据树上一节设置了关联关系的元数据orders.lmd中,表名、字段名设置成中文语义:部署到DQL Server中,在WEB多维分析系统里针对它做多维分析,能看到元数据中设置的关联关系已经体现到元数据树上,如订单表的销售ID展开后,关联到员工(销售)表:隐式的关联多

2021-08-24 10:53:41 213

原创 MongoDB 如何对子文档分段统计

按指定的分段区间进行分组,统计各段内的数据量。如有成绩集合 scores,按成绩分段,分别统计语文、英文成绩各分数段的人数,相关的数据如下:成绩分段划分为:[60, 70, 80, 90]也就是按小于 60, 60—70, 70—80,80—90, 大于 90 分段(区间左闭右开)。name age province subject zhou gao gao 24 guang xi [Chinese,80],[Math,84][English,84],[Ch.

2021-08-24 10:46:51 455

原创 两Excel表如何进行关联汇总

例题描述和简单分析有 Excel 文件“库存统计.xlsx”,数据如下所示:现在需要填充“库存表”,具体要求是,将入库列表及出库列表的 EFG 列,去重后放入库存表的 BCD 列,然后统计本月入库,本月出库及本月结存,本月结存 = 上月结存 + 本月入库 - 本月出库,上月结存假定为零。结果如下:解法及简要说明在集算器中编写脚本 p1.dfx,如下所示: A 1 序号 入库部门 入库日期… 2 序号 出库部门 出库日期… 3 =A1

2021-08-24 09:52:21 2043

原创 BI 前端实践 8:关联查询语言──DQL

实践目标通过对比DQL及它翻译出的SQL,初步认识DQL,体会它怎么支持有关联(JOIN)的多维分析。认识DQL观察上一节最后一个多维分析例子,前端分析时,DQL服务器上会打印出这样的日志:能看到提交到DQL服务器的查询语句是DQL,和SQL语法有区别。DQL服务器把它翻译出来成SQL后,才去原始数据库执行获得数据。原始数据库被DQL服务器包裹起来隐藏掉,并且更换了一种新的查询语言。这样的结构令人产生疑问:为什么多维分析不直接拼成SQL,DQL比起SQL来有什么便利,有什么区别,这就

2021-08-23 12:04:54 2578

原创 MongoDB 怎么实现行列转换

因业务需求,在 MongoDB 使用中需要处理行列转换。如有集合 scores, 记录了学生English、Math、PE三科成绩,需将 English、Math、PE 各科成绩分别作为列值显示。CLASS STUDENTID SUBJECT SCORE Class one 1 English 84 Class one 1 Math 77 Class one 1 PE 69 Class one 2 Eng

2021-08-23 11:56:18 1105

原创 横向拼接列不相同的表

横向拼接列不相同的表,等值连接,用join函数举例例1【数据都能对上】有三个 Excel 文件“emp.xlsx”,分别是数学、体育、英语成绩单,部分数据如下所示:现在需要把三门学科的成绩横向拼接到一起,结果如下:编写 SPL 脚本: A 1 =["math","PE","english"].(file(~/".xlsx").xlsimport@t()) 2 =join(A1(1):math,id;A1(2):PE,id;

2021-08-23 11:44:53 165

原创 BI 前端实践 7:预定义语义层改善 SQL 做多维分析

实践目标偶尔用SQL做多维分析会比较方便,但如果经常做这类事务,每次都可能写重复的SQL,就会存在麻烦,通过使用预定义的语义层改善这些问题。基于SQL做多维分析的烦恼l 数据库中的表名、字段名几乎都是英文,甚至是缩略字母,每次都需要用AS转成中文的业务名。l 时不时会有一些计算字段,用到时每次都要编写计算表达式。l 事实表中只有代码值,对应的名称值经常是存储在另外的维表中,每次要写JOIN。预定义元数据语义层打开编辑元数据的设计器({安装目录}/report/bin/dql.ex

2021-08-19 10:05:24 1813 1

原创 Java 中如何过滤 Excel 文件

现有数据库的销售表(sales)数据如下,ORDERID是主键:ORDERID CLIENT SELLERID AMOUNT ORDERDATE 1 LIHD 11 9893 2020/12/7 2 NYSD 1 8332 2020/12/7 3 RSDRG 10 4614 2020/12/7 4 LDCH 18 8807 2020/12/7 5 JXJDI

2021-08-19 09:56:25 390

原创 合并时去除汇总重复的列

有 Excel 文件 math.xlsx,是数学成绩,数据如下所示:有 Excel 文件 english.xlsx,是英语成绩,数据如下所示:现要求每个学生的数学和英语成绩的总分,结果如下:编写 SPL 脚本: A 1 =file("math.xlsx").xlsimport@t() 2 =file("english.xlsx").xlsimport@t() 3 =[A1,A2].conj() 4 =A3.groups(i

2021-08-19 09:54:04 86

原创 Java 如何取得 Excel 单元格值并做判断

现有Excel文件emp.xlsx,部分数据如下:EID NAME SURNAME GENDER STATE BIRTHDAY HIREDATE DEPT SALARY 1 Rebecca Moore F California 1974-11-20 2005-03-11 R&D 7000 2 Ashley Wilson F New York 1980-07-19

2021-08-18 10:13:51 879

原创 如何分类合并多个文件中的串信息

例题描述和简单分析有三个 Excel 文件“表 1.xlsx”、“表 2.xlsx”、“表 3.xlsx”,数据如下所示:需要把表 1、表 2 、表 3 的 B 列和 D 列作为条件对应,把 F 列的数据汇总,重复的数据只保留前面表中的一个,结果如下:解法及简要说明在集算器中编写脚本 p1.dfx,如下所示: A 1 =3.(file("表 "/~/".xlsx").xlsimport@t()) 2 =join@f(A1(1):b1,工作

2021-08-18 10:11:02 97

原创 BI 前端实践 6:自定义模板展示多维分析结果

实践目标了解怎么制作多维分析中展示结果的报表模板,演示一个模板中组合多种展示方式。制作一个报表我们用SQL类型数据集制作一个普通报表,查询employees库的部门经理表:制作好的报表,预览能看到数据:使用参数字段制作模板接下来通过修改上面这个报表制作成多维分析模板,来自数据集的固定字段要改成参数字段,先定义每个字段的参数:报表中通过${参数名}的方式使用这些参数字段:把模板保存到WEB-INF/files/rpx/目录后,就能用于

2021-08-17 10:38:13 3005 3

原创 MongoDB 如何导出 csv文件

将非结构化的 MongoDB 数据转换成结构化的数据,导出成 csv 文件,可供迁移到其它数据库等应用。如有集合 scores 成绩数据表,含有 subject 嵌套子文档记录各科成绩表,需导出生成 csv 文件。name age province subject zhou gao gao 24 guang xi {"name": "Chinese","score": 80}, {"name": "Math","score": 84},{"name": "

2021-08-17 10:35:08 1396

原创 Excel合并列相同的表时处理重复数据

重复数据分为以下两种情况:1、整行重复2、关键列重复在处理重复数据时,又有以下三种情况:1、只保留相同记录的其中一条2、只保留不为空的记录3、去掉所有重复数据举例例1【整行重复,去掉所有重复数据】有 Excel 文件 600.xlsx,部分数据如下所示:有 Excel 文件 100.xlsx,部分数据如下所示:100.xlsx的数据是 600.xlsx 的子集现在需要将 600.xlsx 中将出现在 100.xlsx 中的数据删除,结果

2021-08-17 10:33:16 835

原创 MongoDB 嵌套子文档导入数据库

MongoDB的嵌套子文档通过一对多关系,灵活的多字段记录了不同属性。如有集合 users, 其子文档friends下有字段 name, tel,希望数据结构化后导入 mysql 数据库。具体数据如下:{"_id" : ObjectId("5f57421c1796b4875dc90187"), "name" : "jim", "friends" : [ {"name":"tom", "tel":"186123500500"}, {"name":"jack", "tel":"181123500511

2021-08-13 17:02:37 307

原创 合并多个有多 Sheet 的 Excel

例题描述有文件夹里有多个Excel文件,每个文件有相同数量的sheet,且sheet名称都相同,同名sheet内的列数和列名都相同,如下图所示是workbook1.xlsx中的sheet:现在想要把各文件中的数据合并到一个文件output.xlsx中,同名sheet中的数据合并到原名的sheet里,只保留第一个文件sheet中首行的列标题,其它文件中只需合并数据行,如下图所示是sheet1:此题涉及列出文件夹中的文件、读取Excel文件中Sheet数据以及

2021-08-13 16:57:38 319

原创 BI 前端实践 5:自定义多维分析显示风格

实践目标修改默认的显示风格;动态选用预先设计的多套显示风格。修改默认的显示风格对employees表中first_name,gender两个维度进行分析,默认生成的表格是下面这样:通过修改WEB-INF/files/style.rpx可以重新定义这些格子的前景色、背景色、或对齐方式等外观,可以看到默认的外观和页面显示一致:有标题、分组、指标三类单元格,指标可以从1~n多设计几个,选出多个指标字段时,会依次采用:重新做报表时,看到重新设计的显示风格已

2021-08-12 10:20:39 187 1

原创 如何从数据库导入 MongoDB

将数据库的表数据导入 MongoDB 中,对表结构能实现子文档关系的,且按 MongoDB 嵌套结构规范导入。MongoDB 基本的嵌套结构有两种,分别是 Map 结构形式与 Array 结构形式,其它多层嵌套结构均是在这两种基本结构的基础上组合而成。下面以 mysql 数据库为例说明,如有表 scores 成绩数据表,每个学生的成绩,即字段 SUBJECT, SCORE 可转换成子文档关系,数据如下:CLASS STUDENTID SUBJECT SCORE Class one

2021-08-12 10:18:00 605

原创 行式文本文件合并

1. 同构合并在某个文件目录下有多个文本文件,这些文件表头和列结构完全相同,只是数据行数和数据内容不同,需要将这些文件的数据全部合并到一个文本文件中,共用同一个表头。示例:在e:/orders目录下有每日的订单文本文件,每个文件的结构相同,第一行是列名,第二行开始是数据,如下图所示,请将它们合并成一个订单表文件orders.txt。esProc SPL脚本如下: A 1 =directory@p("e:/orders/*.txt") 2 =A1.conj

2021-08-12 10:15:42 154

原创 MongoDB 如何实现子文档分组汇总

MongoDB作为当前最流行的非关系型数据库,能通过嵌套子文档,实现一对多的关联关系。应用开发中,常会遇到对嵌套子文档结构的记录,进行分组汇总,如有数据:{ "warehouseNsId":"10","brandId":37,"financeOwnerId":1231882808817905665,"amount":0,"items":[ {"goodsNsId":"1353","price":"256.00","count":3}, {"goodsNsId":"1799","price":"25

2021-08-11 18:03:09 317

原创 行式 Excel 文件合并

1. 同构合并在某个文件目录下有多个Excel文件,这些文件表头和列结构完全相同,只是数据行数和数据内容不同,需要将这些文件的数据全部合并到一个Excel文件中,共用同一个表头。示例:在e:/orders目录下有每日的订单Excel文件,每个文件的结构相同,第一行是列名,第二行开始是数据,如下图所示,请将它们合并成一个订单表文件orders.xlsx。esProc SPL脚本如下: A 1 =directory@p("e:/orders/*.xlsx") 2

2021-08-11 18:01:07 196

原创 BI 前端实践 4:自定义多维分析界面

实践目标了解多维分析界面的构成,然后实现界面上功能的取舍定制,用frame方式把多维分析嵌入自己的界面。解析多维分析界面对dept_manage表的数据做多维分析,下面是完整的study2.jsp以及展示页面主要有三个部分:上部工具条、分析操作区域、分析结果报表窗口(允许有多个报表窗口)。上部工具条是一些功能按钮;分析操作区域可以连续创建多个分析报表,每个报表针对不同的数据集。控制功能按钮的显隐顶部的工具条只想显示保存/打开两个按钮,用JS变量guid

2021-08-10 10:11:11 740

原创 MongoDB 怎么根据内嵌中的字段排序

集合数据为嵌套列表结构,根据嵌套文档中符合条件的子文档中的字段实现排序。如有集合 demo,其数据如下:{ "_id" : ObjectId("59fb2e93670c90000ab85efb"), "relateId" : NumberLong(124), "list" : [ { "relateId" : NumberLong(206), "position" : 10 }, { "relateId" : NumberLong(208), "position" : 4 } ], "create

2021-08-10 10:09:08 928

原创 把数据表横向填入列

常见的Excel数据表,都是数据记录位于行方向,即记录数据都在同一行。但也有一些特殊的Excel表格,数据记录是位于列方向。要生成这种表格,需要先将序表列标题和数据进行行列转置,然后用SPL中的xlsexport@w函数来保存。举例有财务数据表book1.xlsx,数据如下图所示:现在需要重新生成如下图所示的表格:编写SPL脚本: A 1 =T("E:/work/book1.xlsx") 2 =[A1.fname()]|A1.(~.array()

2021-08-10 10:06:18 156

原创 BI 前端实践 3:较大数据量的 SQL 多维分析

实践目标体验较大计算量和较大结果集SQL在多维分析中的响应表现,用缓存方式提高响应速度;多维分析的报表中展示大量明细数据时,用大报表技术避免耗用过多内存、甚至内存溢出。大计算量SQL做多维分析下面这个SQL查询出平均工资最高的五万员工,需要大表employees(30万条)、salaries(284万条)关联、做分组汇总、最后按平均工资排序:页面在60秒之后才显示出结果:把性别拖到左表头上,统计这五万人中男、女性员工各有多少,这个动作仍然需要等待60秒才会

2021-08-09 15:09:33 385

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除