风雨同路8 年:2000-2008

2天内快速修改产品服务

在千变万化的工程需求中,产品有限的功能,能真正与你『风雨同路』吗?

『风雨同路』不是一句口号,为什么只有尚南公司的BlueQuery商业智能产品"能在变幻莫测的风雨中一直为你护航",因为我们的设计采用了全对象重用技术Full Object-Oriented(简称OO),OO并不是一个新概念,例如J2EE、.NET、PowerBuilder、Microsoft、SOA等等基础核心也采用了OO,但为什么只有尚南的BlueQuery 产品几天内就快速修改或增加功能?奥秘在那?玄机在那?

OO易学难精从BlueQuery 2.6 (即2002年第一代报表产品),我们就已经基于OO基础上设计,但结果是尚南最初产品设计彻底失败,因为修改与灵活性大大不足。2005年BlueQuery Enterprise V 设计目标之一就是考虑到它可以在未来的新业务或新应用模块中得到重用,简单来说,BlueQuery的主要目标包括以下:

  ● 重用与合成 能够在应用之间重用模块并能在内部应用之间实现互交换;

  ● 松散耦合 把服务使用者和服务提供者在服务实现和客户如何使用服务方面隔离开来;

  ● 灵活性 每一个应用都有一定的生命周期,因此它应该可以被重新纳入新的模块,支持新的业务需求;

  ● 开放性和互操作性 以便能在不同平台和环境下共享模块;

  ● 分布式 使模块可以被远程访问并被集中管理

『风雨同路』实例(难度五星 - ★★★★★),尚南公司从2000-2002年采用Microsoft Excel(以下简称Excel)进行二次开发,成功开发一套富有中国特色的中国统计报表简称"固定报表";于2007年6月,在金保工程中面对庞大的过千用户,"固定报表"的简单设计得到全国劳动部广范采用,问题是每一个用户采用"固定报表"都必需安装Excel,成本将非常昂贵,而尚南为风雨同路降低用户采购Excel许可证成本,所以提出免费为金保工程修改BlueQuery产品(一般厂商难于修改产品核心模块),尚南选用了用友华表(类Excel产品)取代Excel,优点在于不用安装Excel下实现免费分发与制作报表等功能,虽然用友华表 API与Excel API完全不同,尚南出奇地在没有修改固定报表模块一行代码下只用了4天时间完成产品整合与替换,如此快速的产品整合与替换工作,8年开发报表专家,用友华表副总经理董国杰先生也为之惊讶,并称赞BlueQuery的产品基础设计非常好,在国内未曾见过如此富有中国特色而完备的BI产品!这就是惜英雄重英雄!

以下举出一些『风雨同路』实例,每一个案例也有不同难度级别,以供参考:

难度
难度五星
难度四星
难度三星
难度二星
难度一星
星级
★★★★★
★★★★
★★★
★★
描述
达超难级别
不易把握
难度稍高
较容易功能
易如反掌功能


实例

香港考试局应用 (某集成商) (2007-5-18)

问题:

集成性

很多曾用过Cognos、Business Object、Brio BI产品的公司和集成商,最后却选择购买我们的产品,到底是什么原因使他们放弃著名品牌而选择国产BlueQuery呢?相信在IT软件界很多人都希望知道真相,但又有谁真正思考过这个问题呢?

原因是企业在前期选择报表或BI产品时重点多会放在报表产品的品牌,一般忽略了制作过程,销售人员在2小时产品演示中以美观、美观、美观引导客户,购买后的结果:

1. 实施预算时间超资
2. 实施中难于找寻BI产品实施人员(工资价格高)
3. 最终大大超出预算

还有一般集成问题多在工程尾期阶段才出现,前期选择难于判断;一方面,国外厂商不能跟据中国实际需要修改或增加功能;另一方面,国外厂商集成过程专家收费惊人,可喜的是BlueQuery为业界提供了一道良方!

以下是所有BI厂商也难于实现的集成例子:

1.难点要在展示的报表中画图及平分,根据所编写VML或动态合成的VML生成报表和图形。

2.可以根据URL返回的内容生成动态VML图形。
(
难度五星 - ★★★★★)

描述:

三天内完成修改!

 

 

问题:    

3. 自定义函数支持JavaScript。BlueQuery原只支持VBScript,VBScript与JavaScript是完全不同,例如Java长整型日期值的转换等(VBScript不支持长整型)。(难度四星★★★★)

描述:

定义后可在报表、公式、查询条件中直接使用,就象本地函数一样。如:
function JavaDateValToString(lDateVal)
{
var d = new Date(lDateVal);
var s = d.getFullYear() + "-" + (d.getMonth()+1) + "-" + d.getDate() + " " + d.getHours();
if(d.getMinutes() < 10)
s += ":0" + d.getMinutes();
else
s += ":" + d.getMinutes();
if(d.getSeconds() < 10)
s += ":0" + d.getSeconds();
else
s += ":" + d.getSeconds();

return s;
}

二天内完成修改!

问题:    

4. 难点要在BQ开发环境中访问任意J2EE Web站点,实现任意Web的登录验证,然后在BQ报表、脚本中使用。(难度一星★)

描述:

两小时完成修改!

 

尚南文化:

『风雨同路』- 尚南专业团队,细心聆听,将客户一个一个的集成梦想,变成一个一个的事实!我们的团队在每一个寒暑晚上也加班加点,我们的专业团队平均每天只睡四小时,七年风雨不改,365天的工作,不需要假期,我们的战士已升华到另一个境界,我们的使命: 融汇中西文化与科技,创造民族优秀资讯产品!

 

实例

中国银行东莞分行 (2007-5-18)

问题:

集成性

1.银行分行快速查找远端总行的Flat File数据(因安全理由,在总行无需另行安装系统下,实现查取数据)

基于FTP文件做远端查询
WEB服务器端不用安装系统下,自动通过Common代码中的FTP账号登录FTP服务器,下载文件,然后基于下载的临时文件查询出结果。好处简单、易用、快速,分公司能快速查找远端总行的Flat File数据。

基于FTP文件做远端查询
WEB服务器端不用安装系统下,自动通过Common代码中的FTP账号登录FTP服务器,下载文件,然后基于下载的临时文件查询出结果。好处简单、易用、快速,分公司能快速查找远端总行的Flat File数据。

(难度四星 - ★★★★)

对公客户经理管理和考核系统
(中国银行东莞分行)

描述:

两天内完成修改!

a. 附加通用功能QueryFRomFTP是基于远程FTP文本文件做查询的例子,输入远程文件路径,即可出结果(自动通过Common代码中的FTP账号登录FTP服务器,下载文件,然后基于下载的临时文件查询出结果)
b. 也可以把该查询放到$/Template/Dataset下,作为查询模板,基于该模板做出的查询就具备了FTP功能。
c. 之所以把代码放在Common中,是为了重用。

 

问题:

扩展性

2. 前端数据校验技术

(难度五星 - ★★★★★)

五天内完成修改!

A. 代码表(CSV)数据导入

目前码表主要来源于两种格式的文件:Excel和文本文件,Excel中的数据通过BQ的"基于Excel做查询"和ETL功能,可轻松导入到数据库。但后者是非标准文本数据文件(Tabbed Text、CSV等),一般通用产品都无法处理,只能手工规范格式,去处非法数据后才能处理。如果是一次性工作问题不大,但如果是经常性的工作,这样就很麻烦,并且增加了手工操作出错的风险。

BQ新版本增加了处理该类非标准格式文本数据的通用方案,能自动识别数据正确处理。

数据格式如下:(虚假数据)

core_data_export v5
encrypt:yes

select dw_m1,dw_x4,dw_i9,kfc_p4,verify from check_data

49844 产品A 42307 49056 6749 -788
17912 产品B 11744 12967 1224 -4944
8233 产品C 3203 4767 1564 -3466
25936 产品D 22331 18427 -3904 -7509
3626 产品E 1118 1596 479 -2029
739 产品F 163 113 -50 -627
。。。
72990 产品R 91206 102951 11744 29961
117843 产品L 145061 131880 -13181 14036
9685 产品H 16182 7321 -8862 -2364
19306 产品P 25619 21270 -4349 1964
7786 产品Z 4385 5296 912 -2490

1032 rows
END_OF_DATA

这需要排除首尾几行额外的数据,在BQ新版本中增加了对该类型文本数据的处理,可以选择文本文件的开始行和结束行,对于码表的数据,可以选择以中部数据(中部的数据肯定是正式数据了)为基准,自动检测数据的开始行和结束行。如下图:

刷新该查询,即可将数据导入并生成数据集。每列的数据类型会按前100行为基准自动检测,但也可指定每列数据类型,如手机号码,自动检测为数字型,可指定为文本型。

通过BQ的ETL功能,可将数据集数据导入到Oracle、SQL Server等各种关系数据库。

B. 代码表(CSV)数据的修改与变动处理
当码表项目改变后,需要同步更新到数据库。BQ ETL能自动产生更新脚本,可将该脚本加入任务计划,定时更新,也可运行该脚本马上更新。只需将改变后的文本或Excel文件拷贝到指定的目录就可以了。

C. 数据的导入与校验 (样客户自行定义校验规则)
各地报考数据以与码表相同的文本格式上报,由NEEA经校验后加载到一个统一的数据库,如有非法数据,则需要逐行挑出,生成错误报告,返回上报地要求校核重报。传统做法是通过编程对数据进行逐一校验,编程工作量很大且不易维护。

利用BQ的动态代码与表达式技术,很容易做出一个支持自定义校验规则的模板,只需写出校验表达式,即可进行数据校验,一般的通用校验(通过VB函数和表达式能做到的校验)就不用编程,部分复杂校验(如身份证合法性校验)只需在_global_脚本中提供一个校验函数也就可以了,将编程工作量减到最小,而且非常容易维护。BQ既是一个功能强大而易用的BI产品,也是一个开发平台,可自定义或开发界面,也可编程,编程语言语法兼容VB。如下图:

无法直接写出校验表达式的校验算法,可辅以自定义函数解决,如身份证合法性校验:
校验表达式可写:CheckCid("%C8%"),即对第8列数据调用函数CheckCid进行校验,在_global_中实现该自定义函数CheckCid:

 

Public Function CheckCid(ByVal cid As String) As Boolean
Dim nLen As Long
nLen = Len(cid)
If nLen <> 15 And nLen <> 17 And nLen <> 18 Then Exit Function

'*计算新身份证的校验位 - 身份证最后一位
If nLen = 18 Then
Dim nSum As Long, check_number As Long, check_char As String
nSum=Mid(cid,1,1) * 7
nSum=nSum+Mid(cid,2,1) * 9
nSum=nSum+Mid(cid,3,1) * 10
nSum=nSum+Mid(cid,4,1) * 5
nSum=nSum+Mid(cid,5,1) * 8
nSum=nSum+Mid(cid,6,1) * 4
nSum=nSum+Mid(cid,7,1) * 2
nSum=nSum+Mid(cid,8,1) * 1
nSum=nSum+Mid(cid,9,1) * 6
nSum=nSum+Mid(cid,10,1) * 3
nSum=nSum+Mid(cid,11,1) * 7
nSum=nSum+Mid(cid,12,1) * 9
nSum=nSum+Mid(cid,13,1) * 10
nSum=nSum+Mid(cid,14,1) * 5
nSum=nSum+Mid(cid,15,1) * 8
nSum=nSum+Mid(cid,16,1) * 4
nSum=nSum+Mid(cid,17,1) * 2
check_number = 12-nSum Mod 11
If check_number = 10 Then
check_char = "X"
ElseIf check_number = 12 Then
check_char = "1"
ElseIf check_number = 11 Then
check_char = "0"
Else
check_char = CStr(check_number)
End If

If UCase(Right(cid,1)) <> check_char Then Exit Function
End If

CheckCid = True
End Function

码值校验函数则相对简单,如课程码值校验函数如下:
Dim ds_kc As SunDataset
Public Function CheckCode_KC(ByVal code As Long) As Boolean
'从数据库查出全部课程码,放在全局数据集ds_kc中,为提高效率,校验完毕不关闭,供后续使用
If ds_kc Is Nothing Then
Set ds_kc = New SunDataset
ds_kc.CreateDataset "SELECT {NEEA}.DM_KC.Code FROM {NEEA}.DM_KC", -1
End If

'检验指定码值是否能在结果集中找到
Dim nResult As Long
ds_kc.QuickFindRow 1, code, nResult
If nResult > 0 Then CheckCode_KC = True
End Function

配合BQ的动态文书功能,按预定的模板,可以自动生成错误报告或下发通知,如:

D. 批量数据的导入与校验

在模板中提供了批量数据导入与校验功能,指定一个目录位置,即可检索出该目录下的报考信息,并从代码表检索出地区中文信息,显示地区名方便选择处理。文件名按:BMxxyyy.txt / KSxxyyy.txt格式,xx为地区代码,yyy为年份与考次。按"批量处理所有文件",能对所有文件进行数据校验、聚合(生成中间表)、加载到数据库,并按地区逐个生成错误数据报告。

 

集成性

其它新增功能:

SunDataGrid支持CheckBox
1) 在编辑方式中增加:Edit By CheckBox
2) 对应单元格的值为0或空将使CheckBox处于非选状态,反之为选择状态
3) 选择CheckBox,将使相应的单元格值变为1,不选将使之变为0。如果要全选第一列,将第一列全部设置为1即可。

新版本脚本功能得到加强,已不再是“脚本”,完全可作为专业级开发工具,支持面向对象,支持代码管理。
1) 脚本工作区可自动分析出当前脚本的Sub和Function,双击可跳到相应的函数或过程入口处,方便代码编辑和管理
2) 增加“转为类”功能,可将当前脚本(非事件脚本)转为一个类,输入类名(请遵守编程标准命名法)即可,这样快速使代码OO化(面向对象),极大提高代码重用性、可维护性和可扩展性。
3) 定义一个类后,在其它脚本就可通过new创建该类的实例,如附件实例:
Dim obj as TestClass
obj.Test
如果想编辑器自动列出TestClass的方法供选择,可选择菜单“脚本 - 所有页 - 打开uses模块”,这样,当输入obj.时,就会列出TestClass中的所有公有方法,供选择,方便编程
4)多个引用脚本可联合调试,在任意脚本设置断点,发现错误可即时修改,修改完毕按“脚本 - 所有页 - 保存当前页”,即可将当前页代码保存到其脚本对象中
5)按脚本编辑器的左边1/2/3...序号切换各个脚本。


 

尚南文化:

『风雨同路』- 尚南修改与增加通用功能是完全可以实现的!尚南不只要做全中国最好的产品,我们的愿景: 成为令人景仰、羡慕和向往的资讯产品与服务提供商!愿景是要用时间、血、泪和意志创造出来!

愿景依据:

2006年中国商业智能十大热点新闻 来源网站:TechTarget

2006年中国商业智能最佳产品平台供应商、最佳报表工具供应商 来源网站:ChinaBI

2006年荣获"首届广东软件创新大赛"银奖第一名 由国家863软件专业孵化器广东基地、广东软件行业协会以及广东省学生联合会联合主办

....

实例

广东省公安项目 (华南资讯) (2007-3-27)

问题:

性能优化

1.管理全广东省出入境数据,达TB级海量数据Oracle 10g / 10多台刀片式服务器集群服务,因数据量庞大平均要30分钟后才能查取数据,Oracle DBA也解决不了的速度优化问题。

(难度五星 - ★★★★★)

背景:华南资讯是新加坡成功上市的高新科技企业,2006年度成为广东省交纳最多税金的五大IT公司之一,是非常有实力的IT集成商,技术团队成员超过五百人。目前,公司的客户涵盖了公安、社会保险、民政、电力、电信、国土、税务、交通、水利、金融、石化、制造、商业零售等行业。

《广东省出入境管理信息系统》是该公司重点项目,报表展示采用了BlueQuery产品,海量数据成为华南资讯技术团队头痛的问题!

 


《广东省出入境管理信息系统》


广州华南资讯科技有限公司

描述:

两周内完成速度优化!30分钟优化到10秒内完成查取同样数据,速度大大提升。我们的卖点不但是产品,还有专业的服务支持团队。

问题:

1. 事实表(Fact Table)问题

在一个多维数据集,有且只能有一个事实表,而如果统计量度分别来自两个表,一般数据仓库难于处理。

2. 维度表处理问题

在Microsoft Analysis Service中构建多维数据集时,微软限制对维度成员数目的计算时间不能超过30秒(SP3后延长到3分钟)。所谓维成员计算,就是对该维成员对应的字段求DISTINCT COUNT,这就限制了对于海量数据的事实表,维度不能直接来自事实表(对于上千万数据的事实表,DISTINCT COUNT某个字段会消耗很长时间)。

3. Oracle不支持自动分解日期字段问题

在建立多维数据集时,需要将日期分解为年、季度、月、日等不同级别,使用Microsoft OLE DB for Oracle,可自动分解日期字段,但该驱动对于Oracle 9i以上版本支持有问题,而使用Oracle本身提供的Oracle OLE DB Provider,又不支持自动分解日期字段。

4. 数据仓库完整性、正确性问题

数据仓库对数据的完整性、正确性要求很严格。

5. 日期条件值问题

日期维的处理,怎样智能地根据用户输入,转换为正确的日期维级别表达式的组合,并尽可能取最大级别以提高性能,最后实现多结果集的聚合汇总。

6. 增量更新问题

怎样将发证日期在2007年以前的作为一个分区,一次生成后,将不再改变?今年即07年,怎样每个季度或每个月作一个分区?每天晚上怎样更新最新分区的数据?

尚南专业数据仓库研发团队已成功一一解决以上问題。

环境与配置

数据源:Oracle 10g

数据仓库:Microsoft Analysis Service 2000

特性:

1) 以与关系型数据库相同的模式访问多维数据库,修改语义层定义后,原基于关系数据库的统计报表稍加修改甚至不修改,即可方便地转为多维模式

2) 扩展Microsoft SQL Server 2000多维数据库访问语言MDX(Multidimensional Expressions),实现多维数据库的IN和BETWEEN条件操作符运算

3) 对于日期时间条件,可根据输入内容自动调整时间维及其级别的条件表达式,从而在一张报表实现高速的年报、季报、月报、日报等,如:

输入:2007 表示:统计2007年的数据

输入:200701 表示:统计2007年1月份的数据

输入:2007Q1 表示:统计2007年1季度的数据

输入:20070101 表示:统计2007年1月1日的数据

输入:20070101 ~ 20070205 表示:统计2007年1月1日至2007年2月5日的数据

。。。

 

尚南文化:

风雨同路』- 尚南风雨同路的合作伙伴很多是大型集成商包括东软、中信等上市公司,产品能够面向最终用户与产品面向大型集成商,是绝对不同大型集成商不会因为回扣和应酬等公关手段才与你不断合作,因为报表占整个工程中20%-30%,成功才是合作的关键,大型集成商的业务需求是千变万化的,并且他们常常会提出国外产品也实现不了的需求,所以要与大型集成商合作成功并不容易。就以广州华南资讯科技有限公司为例2006年-2007年采用BlueQuery产品合作的项目不下十个包括:(项目涵盖了公安、社会保险、民政、电力、国土等多个部门)

  • 广州市财政局
  • 广东省电力调度中心
  • 武汉市劳动和社会保障局
  • 三门峡城市信用社
  • 广东省社保局
  • 广州市公安局
  • 广东省社会保险基金管理中心
  • 阳江市社会保险基金管理局
  • 广州市国土资源
  • 房屋管理局
  • 中山市社会保险基金管理局
  • 从化市医疗保险服务管理中心
  • 惠州市劳动和社会保障局
  • ....

奇怪的是华南资讯也有代理及选用国外Business Object、Cognos、Brio、Microsoft等出名BI产品,为何最终多次选用BlueQuery一个国产的品牌?只因尚南与客户『风雨同路』! 我们衷心期待能与您一同风雨同路』,请填写以下申请表让我们与您一同风雨同路』!电子申请表!

哈哈!更奇怪的是,你有缘看到第三个案例!就是惜英雄重英雄,只要您在填写申请单时提出是Alex Chan介绍,我能保证前线销售人员一定会给您个大大的惊喜,原因就是感谢您认真看了我们的文章!请勿告诉别人,这是您与我之间的小秘密,谢谢!有全球最好的产品也要有识货之人!

实例

广东省电力调度中心 (2007-1-14)

问题:

易用优化

超简单查询构造器

1.非常简单易用,基本做到无需培训,看到即会使用
2.完全基于信息域(企业语义库),用户看不到也无需理会表关系(对于电力项目,用户喜欢看到真实的表名、字段名而不喜欢已业务用语化的数据列名称,可以直接拖放表建立完全等同数据库的信息域);
3.可以方便地输入语义化的时间条件,如:[今天]、[昨天]、[昨天]8:00到[今天]10:00,等等;
4. 可以方便地处理带时分秒的时间条件,如:查询2007-1-1号的数据,一般需要写[时间] >= 2007-1-1 00:00 And [时间] <= 2007-1-1 23:59:59,但在这里,只需按正常写即可(不要输入-):[时间] = 20070101;
5. 一个选项即可实现求上月同期、去年同期的数据;
6. 根据输入内容动态解释,一张报表即可做到年报、季报、月报、日报或自由时间段统计报表的功能;
7. 完全基于BQ API和Form开发,使用者可以随意修改、扩展该构造器的功能;
8. 可在Web浏览器中使用。

(难度四星 - ★★★★)

广东省电力调度中心综合报表平台

描述:

三天内完成修改!成为一个通用功能,只需要定义好语义库,BlueQuery就动态生成在I.E.中的超简单查询构造器!

界面与操作

超简单查询构造器操作过程 Flash 例子一 0.5MB

超简单查询构造器操作过程 Flash 例子二 2.5MB

增加日志功能

1) 查询、报表、多维分析、窗体对象的读、写和所有对象的删除操作会写日志;
2) 访问数据库、执行数据库命令(Delete/Update/Insert等)、批量插入数据到表等操作会写日志;
3) 日志文件在服务器端的InfoServer.log,大小超出10M时会在日志信息中提示用户备份并删除;
4) InfoServer启动后的日志信息可在InfoServer界面中实时查看/监控,为提高性能不会时刻写InfoServer.log,日志超过5000行或在InfoServer退出时才会写到InfoServer.log中。无论InfoServer.log有多大,系统都不会自动清除日志内容;
5) InfoServer启动后,在界面中只显示启动后的日志内容,不显示之前的日志内容。

 

实例

中国电信彩铃项目 (2006-8-30)

问题:

易用优化

使安装与更新更容易

不管是纯JAVA或非JAVA产品也遇到安装的问题,前者纯JAVA产品必需安装Java SDK不少于18MB,安装过程复杂,非JAVA产品也一样。

中国电信提出在线自动更新的要求,并希望用户不需要复杂安装或更新过程,实现用户真正的零安装。

(难度三星 - ★★★)

采铃综合决策分析平台

描述:

三天内完成在线自动更新功能!

在线自动更新目前Client端、插件均比较完美,可自动从Internet或Intranet升级。

1. 新的插件包共有8个cab文件,无pkg等其它问题

2. 可将cab放到任意URL,实现插件的自动下载安装


1) 对于Portal,搜索/替换Portal下的所有HTML文件,将codebase的URL替换为新的URL即可;
2) 对于发布的报表,可直接搜索/替换报表HTML中的codebase为新的URL,或搜索/替换<安装目录>/publish下的全部HTML的codebase为新的URL,则以后所发布的报表将自动应用新的下载URL;

3. 可自动判断相关组件,只下载必须的组件;

4. 如果不用OLAP,下载量越8M(含OLAP 25M);

5. 版本升级时,按以下规则自动重新下载更新插件。


1) 如果本地没有安装BQ(服务器或客户端),也没有下载过插件,在自动下载安装;
2) 如果本地已安装BQ或插件,则判断版本,如果本地版本高于或等于codebase中指定的版本号,则即使下载URL上有新版本也不会下载;如果本地版本低于codebase中指定的版本号,则会下载安装插件。但下载安装后,插件版本仍达不到codebase中指定的版本号,则不能显示报表。