冯东的博客

每天学一点,不断进取
posts - 86, comments - 319, trackbacks - 8, articles - 4
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理

2011年12月4日

上周年假,在家里歇了几天,提前回北京。周末抽空在RedHat5.4上装了cognos10,中途遇到些麻烦,下面与大家分享一下安装的过程
首先创建用户和组和安装文件夹等准备工作

[root@CogBISvr ~]# groupadd -g cog        #建立cog组
[root@CogBISvr ~]# useradd -g cog cognos    #建立cognos用户,并放到cog组中
[root@CogBISvr ~]# passwd cognos        #修改cognos的密码
Changing password for user cognos.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

[root@CogBISvr ~]# mkdir /cognos        #建立cognos安装目录
[root@CogBISvr ~]# mkdir /cognos/soft        #建立安装介质存放目录
[root@CogBISvr ~]# chown -R cognos:cog /cognos     #将目录的所有者设置为cognos

安装cognos需要提前设置好java环境,所以先要安装jdk,从oracle官方下载,然后传到linux上

[root@CogBISvr soft]# chmod +x jdk-6u29-linux-x64-rpm.bin    #赋予可执行权限
[root@CogBISvr soft]# ./jdk-6u29-linux-x64-rpm.bin         #开始安装(一定要用root用户进行安装,权限低的用户会报错)
Unpacking...
Checksumming...
Extracting...
UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu).
  inflating: jdk-6u29-linux-amd64.rpm  
  inflating: sun-javadb-common-10.6.2-1.1.i386.rpm  
  inflating: sun-javadb-core-10.6.2-1.1.i386.rpm  
  inflating: sun-javadb-client-10.6.2-1.1.i386.rpm  
  inflating: sun-javadb-demo-10.6.2-1.1.i386.rpm  
  inflating: sun-javadb-docs-10.6.2-1.1.i386.rpm  
  inflating: sun-javadb-javadoc-10.6.2-1.1.i386.rpm  
Preparing...                ########################################### [100%]
   1:jdk                    ########################################### [100%]
Unpacking JAR files...
        rt.jar...
        jsse.jar...
        charsets.jar...
        tools.jar...
        localedata.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
Installing JavaDB
Preparing...                ########################################### [100%]
   1:sun-javadb-common      ########################################### [ 17%]
   2:sun-javadb-core        ########################################### [ 33%]
   3:sun-javadb-client      ########################################### [ 50%]
   4:sun-javadb-demo        ########################################### [ 67%]
   5:sun-javadb-docs        ########################################### [ 83%]
   6:sun-javadb-javadoc     ########################################### [100%]

Java(TM) SE Development Kit 6 successfully installed.

Product Registration is FREE and includes many benefits:
* Notification of new versions, patches, and updates
* Special offers on Oracle products, services and training
* Access to early releases and documentation

Product and system data will be collected. If your configuration
supports a browser, the JDK Product Registration form will
be presented. If you do not register, none of this information
will be saved. You may also register your JDK later by
opening the register.html file (located in the JDK installation
directory) in a browser.

For more information on what data Registration collects and
how it is managed and used, see:
http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html

Press Enter to continue.....

安装完成,默认安装到了/usr/java/jdk1.6.0_29这个路径下
接下来进入cognos用户为其设置环境变量

[root@CogBISvr soft]# su - cognos        #切换到cognos用户下
[cognos@CogBISvr ~]$ vi .bash_profile         #编辑脚本

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export JAVA_HOME=/usr/java/jdk1.6.0_29        #增加JAVA_HOME变量

PATH=$JAVA_HOME/bin:$PATH            #加入到PATH中

export PATH

保存退出(ESC ->:wq->回车)

[cognos@CogBISvr ~]$ source .bash_profile     #使profile生效
[cognos@CogBISvr ~]$
[cognos@CogBISvr ~]$ java -version        #测试是否生效。输出正确
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)

放入cognos安装盘,进入安装目录/media/bisrvr101ml/linuxi38664h

[cognos@CogBISvr linuxi38664h]$ ./issetup     #执行安装程序
-bash: ./issetup: 权限不够
提示权限不够,查看一下发现用户和组都是数字
[cognos@CogBISvr media]$ ls -al
总计 30
drwxr-xr-x  3 root root 4096 12-03 09:33 .
drwxr-xr-x 26 root root 4096 12-03 08:52 ..
drwxrwxr-x  5 4205  364 2048 2010-10-16 bisrvr101ml
-rw-r--r--  1 root root   66 12-03 09:33 .hal-mtab
-rw-------  1 root root    0 12-03 09:33 .hal-mtab-lock
把安装程序拷贝到硬盘上进行安装
[cognos@CogBISvr media]$ cp -R bisrvr101ml /cognos/soft/bisrv101ml    #将安装程序拷贝到硬盘
拷贝完成后,进入到硬盘的目录中执行安装
[cognos@CogBISvr linuxi38664h]$ ./issetup     #执行安装程序
./issetup: error while loading shared libraries: libXm.so.3: cannot open shared object file: No such file or directory
安装报错,以libXm.so.3为关键字上百度搜索,发现论坛里有人已经解决了这个问题http://www.cognoschina.net/?action-blogdetail-uid-301-id-3917.html
需要安装libXp-1.0.0-8.1.el5.x86_64.rpm、openmotif-2.3.1-5.el5_6.2.x86_64.rpm 两个rpm包
然后在创建软连接,但是我安装完成后在/usr/lib64下创建软连接问题依旧。
想了一下,是不是调用的是32位的呢?卸载掉64为的,安装libXp-1.0.0-8.1.el5.i386.rpm和openmotif-2.3.1-2.el5.i386.rpm
两个32位的,问题解决了(安装rpm在root用户中执行)

[root@CogBISvr lib64]# cd /media/RHEL_5.4\ x86_64\ DVD/Server/
[root@CogBISvr Server]# ls |grep libXp-
libXp-1.0.0-8.1.el5.i386.rpm
libXp-1.0.0-8.1.el5.x86_64.rpm
libXp-devel-1.0.0-8.1.el5.i386.rpm
libXp-devel-1.0.0-8.1.el5.x86_64.rpm
[root@CogBISvr Server]# rpm -ivh libXp-1.0.0-8.1.el5.i386.rpm
warning: libXp-1.0.0-8.1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:libXp                  ########################################### [100%]
[root@CogBISvr Server]# ls |grep openmotif
openmotif22-2.2.3-18.i386.rpm
openmotif22-2.2.3-18.x86_64.rpm
openmotif-2.3.1-2.el5.i386.rpm
openmotif-2.3.1-2.el5.x86_64.rpm
openmotif-devel-2.3.1-2.el5.i386.rpm
openmotif-devel-2.3.1-2.el5.x86_64.rpm
[root@CogBISvr Server]# rpm -ivh openmotif-2.3.1-2.el5.i386.rpm
warning: openmotif-2.3.1-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:openmotif              ########################################### [100%]
[root@CogBISvr Server]# cd /usr/lib/
[root@CogBISvr lib]# ln libXm.so.4 libXm.so.3
到此为止,cognos的准备工作都已完成,执行./issetup就可以进行安装了。
安装的过程很顺利,修改好安装路径后一路next就可以了,安装语言选择英文,我选中文会乱码,估计是对应的字体没有安装
安装完成后,启动cognos configuration,配置contentsotre时发现一个问题,我用的是sqlserver2000配置数据库用户的密码时,密码框不可编辑
所以contentstore配置失败,后来用Xmanager的Xstart将图形界面在本地展现时才配置成功。
启动cognos,发现启动失败,查看日志发现dispatch注册content manager指向了其他服务器,非常奇怪,因为我没有任何其他的配置,后来把指向的cognos服务停掉,重新启动,一切正常。

posted @ 2011-12-04 15:48 冯东 阅读(23) 评论(0) 编辑

2010年11月8日

实现演示的视频已经发到论坛中http://www.cognoschina.net/club/thread-10286-1-1.html

第一次参加报表比赛时用JavaScript实现列表数值字段的排序,虽然这个很实用,但是JavaScript对不同内核的浏览器支持程度不一样,而且一般做报表的开发人员可能对JavaScript都不是很熟悉,所以虽然我认为我写的已经很详细了,但是还是有好多网友在使用的过程中遇到很多问题,问我应该怎么调试JavaScript,然而JavaScript却不是三言两语能偶说清楚的。后来我突然想到是不是可以利用追溯来实现排序呢?我试了一下午,终于有所成。后来我就因为其他事耽搁了个把月,今天利用周末整理一下。发给大伙

排序实现的思路这里就不提了,可以参考我前两天发的博文

用基于自身的追溯来实现排序,即:报表的钻取对象还是它自己,在钻取过程中将参数改变,实现排序。

以前两天发的任意字段列表排序例。打开排序的列表如下图所示

 

为了能够在追溯中改变参数,所以必须多创建几个数据项,我们先需要的数据项有5个,升序、降序(UP、DOWN)以及三个需要排序的列(A、B、C)。如下图所示:

 

数据项表达式就是参数所要接收的值。如图所示UP数据项的表示为’UP’。

接下来为列头增加排序显示的图片,先点击解锁,并将图像组件放到“年份”列头中,如下图所示:

 

点击图片,在属性栏中的来源类型改为“报表表达式”,并将表达式的内容设置为

IF ( ParamValue('sorttype') = 'UP' )

THEN

    ('http://127.0.0.1:9300/p2pd/pat/images/sortState_ascending.gif' )

ELSE

    ('http://127.0.0.1:9300/p2pd/pat/images/sortState_descending.gif' )

该表达式根据传递的参数动态显示图片。

接下来为年份创建追溯定义,为了便于理解,我们将名称定义为UP,将目标报表选中自身

 

点击编辑设置传递的参数

 

将方法选择为“传递数据项值”,并未参数设置相应的值,点击确定

我们在复制一下年份,并该其追溯名称为DOWN,将sorttype传递的数据项值改为DOWN

 

这时运行报表,看到年份列有两个年份,点击前一个会按照年份进行升序排列,点后面一个会按照降序排列。

为了避免这种现象,我们需要用条件样式来控制显示。

切到条件资源管理器中,新建一个布尔值变量IsUP,表达式设置为

ParamValue('sorttype') = 'UP'

将两个年份的样式变量都设置为IsUP,并将前一个年份为“是”时不显示(方框类型设置为空),后一个年份为“否”时不显示。

再次运行报表就只有一个年份,点击就会进行排序,并且图片提示当前是升序还是降序

 

再次进入条件资源管理器,创建一个字符串变量sortColumn,表达式为:

ParamValue('sortcolumn')

并设置3个值A、B、C

 

选中图片,并将sortColumn设为样式变量,根据参数的值判断图片是否显示。以年份为例,随对应的参数值为A,所以需要经B、C、其他所对应的方框类型设置为空。

此时一个字段的排序就已经完成了,我们将这三个对象复制一下啊,分别粘贴到后面几列中,然后分别设置追溯传递的值和相应的样式就可以了。

最终效果如下图所示

 

posted @ 2010-11-08 19:10 冯东 阅读(117) 评论(0) 编辑

2010年11月7日

昨天朋友培训完cognos,客户说他们有台服务器有问题cognos服务启动不起来,他去帮忙解决了,本来是约好到培训楼下见面的,我上去帮忙看了一下。
启动过程一点日志信息都没有输出直接报0103错误,后来我发现在服务中有个IBM Cognos Content store(大概是这个,具体名字也记不清了)的服务,判断这个问题应该是安装过程中选中了Cognos Content Database,但是在Cognos Configuration中配置的content store却是Oracle导致的。因为如果安装过程中你选中了cognos content database组件,那么你配置的content store必须是 cognos content database,配置其他的都不行。所以把cognos卸载,重新安装,本以为这次应该没有问题了,但是还是报错,想着可能是环境变量的问题,又把环境变量改了改,还是不行,从cognos configuration启动还是报错,不过我感觉一切都没有问题了。
所以换了种方式,从命令行启动,通过调用cogbootstrapservice来启动cognos。在windows环境中cognos第一次启动会创建一个系统服务
 
从上图可以看到服务所调用的可执行文件就是cogbootstrapservice.exe,服务类型为自动,所以系统启动后会自动调用此服务,启动cognos。Ps:如果是服务器中启动类型最好是自动,省的有人再去启动它,如果是自己的机器安装仅是为了学习,最好设置为手动,要不然你的系统会在登录时等很长时间。
到命令行里,切到c8_localation/bin目录下,执行cogbootstrapservice.exe –help查看该命令的帮助

 

Manage the Cognos Bootstrap Service.

By default the service name is determined from startup configuration,
but may be overriden by -name.

Note that on Win32 CBS operates invisibly, with no console window
unless -console is specified.  -help, -d and -v are exceptions: they
always open a console.

The option -stdoutLog=DEBUG|INFO|WARN|ERROR|FATAL is optional for all
flavours of the command line.  It causes log messages that describe the
actvities of CBS to be written to stdout.

Usage:

 cogbootstrapservice -i[a|m] [-name=serviceName] [-console]
  Install as service.  Service is automatically started (-i or -ia) or manually (-im).

 cogbootstrapservice -u [-name=serviceName] [-console]
  Uninstall the service.

 cogbootstrapservice -isRegistered [-name=serviceName] [-console]
  Test if the service is installed.
  Exit code is 0 if the service is not installed, otherwise is the numeric value of the "Start" parameter:2 - auto, 3 - manual, 4 - disabled.

 cogbootstrapservice -start [-name=serviceName] [-timeLimitSec=nn] [-console]
  Start the service.  Note that the operation blocks until the service is started or the specified time limit is reached.

 cogbootstrapservice -stop [-name=serviceName] [-timeLimitSec=nn] [-console]
  Stop the service.  Note that the operation blocks until the service is stopped or the specified time limit is reached.

 cogbootstrapservice -isrunning [-name=serviceName] [-console]
  Test is the service is running.  Exit code of 0 indicates that the service is running.

 cogbootstrapservice -d
  Run the service as a console application.

其实最常用的也就是-d –start –stop这几个参数,-I –u –isRegistered这几个一般都是Cognos Configuration调用用来创建或删除服务用的
-d参数表示要启动一个控制台窗口
-start表示启动服务,帮助说这个操作是个阻塞型操作,知道服务启动才会往下执行,但是我在windows下调用时并有发现他是阻塞的。
-stop关闭服务器,同样的,我也没有发现它是阻塞的
如果我想启动服务执行 cogbootstraoservice.exe –start就可以了
如果想让它弹出个窗口 cogbootstrapservice.exe –d –start(如果在telnet调用的话服务器中不弹出窗口)
想关闭服务 执行 cogbootstrapservice.ext –stop
说到这里还有一种方式也是在可以在命令行里启动cognos服务,比cogbootstrapservice更简单,它就是c8/bin目录下的startup.bat和shutdown.bat
Cogbootstrapservice和startup.bat的区别在于,cogbootstrapservice会启动tomcat的同时还启动一个守护进程,当tomcat被意外终止,它还会再次调用,而startup.bat则没有守护进程

 

posted @ 2010-11-07 17:22 冯东 阅读(211) 评论(0) 编辑

2010年11月5日

在第一次参加报表比赛时用JavaScript实现了列表基于数值型字段的排序
http://www.cognoschina.net/home/space.php?uid=652&do=blog&id=547
针对数值字段排序就是将列表中的一个数据项设置为升序,根据参数判断如果是升序就直接显示数值,如果是降序则执行-1*数值。
数据项的表达式为
IF ( ?sorttype? = 'UP' ) THEN
(
[职工人数]
)
ELSE
( -1*[职工人数] )
上述思路只能对数值型字段进行排序,而字符型的排序却无能为力,后来有网友也讨论过如何对字符型进行排序,那个网友得出用两个数据项来实现,本来想把讨论的帖子贴出来给大家分享的,可今天翻了半天之前的帖子,没有找到。
我这里来说一下实现思路
两个数据项在列表中分别设置为升序、降序。升序数据项的表达式思路如下:
IF ( ?sorttype? = 'UP' ) THEN
(
//根据参数判断要展现的列,比如 IF ( ?sortcol? = 'A' ) THEN([人员姓名])ELSE([职工人数])
)
ELSE ( null )
降序数据项的表达式思路如下:
IF ( ?sorttype? = 'DOWN' ) THEN
(
//根据参数判断要展现的列,比如 IF ( ?sortcol? = 'A' ) THEN([人员姓名])ELSE([职工人数])
)
ELSE ( null )
所以当传递的参数是UP时,起决定性作用的是升序的数据项,因为降序的数据项为null
当传递的参数为DOWN时,起决定性作用的是降序的数据项,因为升序的数据项为null

 

思路明白了后我们来看如何在ReportStudio中实现排序
我们基于Cognos式样的GO 数据仓库 (查询)包创建一个简单的list报表如下图所示:
 

其中年份、组织名称(级别3)是字符型数据,工资是数值型
切换到查询资源管理器,为列表所用查询增加两个数据项升序、降序
升序的表达式为
IF ( ?sorttype? = 'UP' ) THEN
(
IF ( ?sortcolumn? = 'A') THEN
    ( [年份] )
ELSE
    ( IF ( ?sortcolumn? = 'B' ) THEN
    ( [组织名称(级别 3)] )
ELSE
    ( [工资] ) )
)
ELSE
( null )
降序的表达式为:
IF ( ?sorttype? = 'DOWN' ) THEN
(
IF ( ?sortcolumn? = 'A') THEN
    ( [年份] )
ELSE
    ( IF ( ?sortcolumn? = 'B' ) THEN
    ( [组织名称(级别 3)] )
ELSE
    ( [工资] ) )
)
ELSE
( null )

将升序和降序放到列表中,将升序所在列设置排序操作为升序,降序所在列排序操作为降序,如下图所示:
 

为了方便演示,我们分别为sorttype和sortcolumn创建下拉框,并为其设置静态值,运行效果如下图所示:

操作视频录像上传到论坛中,下载地址http://www.cognoschina.net/club/thread-10265-1-1.html

posted @ 2010-11-05 15:16 冯东 阅读(87) 评论(0) 编辑

2010年10月28日

我们以列表为例,默认的行数是20,超过20行,列表就会分页显示,如果我们导出excel,那么excel也会分成sheet导出,每个sheet是20行。页面展现时20行一页感觉可以,但是用户经常会提要把所有的数据导出到一个sheet中。坛子里也经常有人问怎么实现。我这里列出两种方式,第一种需要两张报表实现,第二种用一张报表实现。

不管采用哪种方法思路都是一样的,我先来介绍一下我的实现思路:同一个列表设置的分页行数和导出excel的分sheet的条件是一样的,这是我们没法改变的,但是我们可以利用两个列表来实现,展现和导出的分页条件不一样,一个list是用来报表展现的,另一个list用来导出。

第一种方法:两张报表,利用穿透钻取来实现导出excel

以Cognos Sample中Sales and Marketing Zh (cube)作为我们演示的package,打开ReportStudio创建一个简单报表report_for_html只包含一个简单的列表,让数据展现时存在分页即可。如下图所示:

 

此时我们将该报表另存为一下,比如report_for_excel,结构都保持一致,只是将列表的分页设置为65535(可以不做此限制,但是如果不做限制,当导出数据超过65535时导出的excel因为单个sheet过大而不能打开)。

 

打开report_for_html这张报表,在工具箱中拖一个文本项目到页面中,并将文本内容设置为“导出Excel”,选中文本项,点击追溯定义,为其设置到report_for_excel的追溯定义。

将报表设置为report_for_excel,格式选中Excel 2007或者其他格式。选中在新窗口中打开,点击确定,最终效果如下图所示

 

运行效果就是报表可以存在分页,导出的excel没有分页,如下图所示

 

注意事项:当报表存在过滤条件时,追溯定义中也必须把参数传递过去。

 

第二种方法,在一个报表中实现。思路如下:还是两个列表,利用条件样式判断当前的输出模式,若为html则显示展现的list,若为excel则显示导出excel的list。

我们还选用和上次一样的列表,并复制一份,假定上面的list用来报表展现,下面的list用于导出excel,如下图所示:

 

进入条件资源管理器新建一个字符串变量,将表达式设置为ReportOutput(),该函数返回输出格式的名称。可能返回的值包括: CSV、HTML、layoutDataXML、MHT、PDF、rawXML、singleXLS、spreadsheetML、XLS、XML 和 XLWA。新建一个值为HTML,我这里演示只建了一个,可以在创建多个,这样可以控制的更细。

返回到页面资源管理器,为两个list设置样式变量为新建的“字符串1”,设置当值为“HTML”是,输出excel的list的方框类型为无,当值为其他时展现html的list的方框类型为无。

运行报表,显示分页展现的数据,选择导出excel时导出的excel则没有分sheet展现

操作演示的视频放到论坛里了,下载地址如下

http://www.cognoschina.net/club/thread-10061-1-1.html

posted @ 2010-10-28 17:00 冯东 阅读(164) 评论(0) 编辑

2010年9月26日

摘要: cognos本身没有版本控制工具,frameworkmanager和transformer的项目文件可以借助于cvs\svn等版本控制工具开控制版本,但是所有的报表都是存在content store里的,如果那张报表一不小心被误改或者删除了,那就是永久的了。如果之前没有备份的话那么这样报表就永远的消失了。前一段时间研究了一下content store,知道所有的报表定义都存储在cmobjprops...阅读全文

posted @ 2010-09-26 13:45 冯东 阅读(55) 评论(0) 编辑

摘要: Cognos配置过程中经常会遇到由于CSK配置的问题导致启动失败,我这里试了一下,不敢保证一定能把所有的问题都解决。先说一下我对CSK的理解ApplicationServer和cm通信的凭证,若Application Server配置的密码与CM配置的密码不一致,那么Application Server就没法注册到CM上。本地的配置文件cogstartup.xml存储的密码信息都是加密的,而密文是...阅读全文

posted @ 2010-09-26 13:30 冯东 阅读(121) 评论(0) 编辑

摘要: 有些报表是不包含钻取功能,但是点击右键会弹出右键菜单,有些客户就比较反感这个。下面的这个方法可以屏蔽掉cognos报表的右键菜单在报表中增加一个HTML项,然后将下面的内容拷贝到里面<script>function getObjectName(){ return document.getElementById("cv.id").value;}function disableRightC...阅读全文

posted @ 2010-09-26 13:23 冯东 阅读(98) 评论(0) 编辑

2010年4月10日

摘要: 我写了一个利用JS禁用Cognos右键菜单,下面的JS可以实现重写Cognos的右键菜单。只要将下面的代码拷到一个HTML项里即可代码下面我来着介绍一下这段代码,前面的style和div主要是定义菜单的现实样式,其中引用样式为menuitems的div中有个clickcall属性,这个属性就是当点击此菜单项时调用的JS函数,可以将其改为自己的函数,我这里只是简单的调用了个alert。getObje...阅读全文

posted @ 2010-04-10 07:20 冯东 阅读(322) 评论(0) 编辑

2009年12月23日

摘要: 从我刚接触Cognos就有一个名词一直弄不明白“亲和力”什么是亲和力?我曾经问过Cognos技术支持 ,他也没有个我很明确的答复,下面的内容是我根据一个文档翻译来的,肯定有很多地方时不到位的,希望各位多多指教。亲和力连接  亲和力连接用来请求,它是报表服务进程(BIBusTKServerMain)一部分(可以理解为线程)。亲和力根据一个请求是否分配给特定的服务还是分布式环境...阅读全文

posted @ 2009-12-23 20:03 冯东 阅读(543) 评论(0) 编辑