`
MyDicta
  • 浏览: 18797 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Cognos8.4 cube在windows上刷新

 
阅读更多

项目中Cognos8.4 安装在Windows 2003上,文章主要对cube的刷新脚本进行描述,希望能对大家有所帮助。

 

3 报表文件组织结构及空间需求列表

目录名称

说明

初始空间

空间增长

transformer

模型基础目录

/

/

transformer /cubebak

模型备份目录

0

100M/

transformer /cubelog

刷新日志存放目录

0

300K/

transformer /cubes

cube生成目录

100M

0

transformer /mdl

mdl存放目录

400k

0

transformer /schedule

调度脚本存放目录

100k

0

 

mdl使用iqd作为数据源,其下级目录结构为:(xxxxxx表示对应的报表)

transformer /mdl/xxxxxx/iqd/

transformer /mdl/xxxxxx/mdl/ 

 

1.    进入transformer/schedule目录,找到并编辑“refreshCube.bat文件,对以下七个参数进行配置:

 

4 refreshcube参数配置表

参数名

配置说明

Cogtrbin

Cognos执行文件bin目录

DataSourceName

数据源名称(参考cs7g.ini)

UserName

用户名

UserPwd

密码

TnsName

数据库连接串

BaseDirectory

模型基础目录(报表解压位置)

CubeOutputDirectory

cube输出第三方目录

 

"refreshCube.bat"脚本:(确认刷新环境,并调用刷新脚本)

 

rem Cognos8.4 模型刷新脚本
@echo off
set "ymd=%date:~,4%%date:~5,2%%date:~8,2%"
::Cognos执行文件bin目录
set Cogtrbin=d:\Program Files\cognos\c8\bin
::数据源名称(iqd关联,参考cs7g.ini)
set DataSourceName=xxx
::用户名
set UserName=xxx
::密码
set UserPwd=xxx
::TnsName
set TnsName=xxx
::模型基础目录
set BaseDirectory=xxx
::cube输出第三方目录
set CubeOutputDirectory=xxx
::mdl存放目录
set MdlFileDirectory=%BaseDirectory%\mdl
::模型备份目录
set CubeBakDirectory=%BaseDirectory%\cubebak\%ymd%
::调度脚本存放目录
set ScheduleDirectory=%BaseDirectory%\schedule
::刷新日志存放目录
set LogFileDirectory=%BaseDirectory%\cubelog\%ymd%
::iqd数据源路径(Linux上有效,当处理路径配置成"On the server"时,将根据参数找寻)
::set DataSourceDirectory=%BaseDirectory%\iqd
::cube生成目录
set CubeSaveDirectory=%BaseDirectory%\cubes
::访问数据库确定刷新状态就绪
for /F "usebackq" %%i in (`echo select count^(^*^) from mn_process where stat_date^=^trunc^(^sysdate^)^ and action_en^=^'CREATE_REPORT'^;^| sqlplus -s %UserName%/%UserPwd%@%TnsName%`) DO set rptnum=%%i
if not exist "%LogFileDirectory%" if %rptnum% == 10 (
	::删除用户读cube报表的进程锁
	taskkill /f /im BIBusTKServerMain.exe
	::备份mdc	
	echo n|xcopy /d "%CubeSaveDirectory%"\*.mdc "%CubeBakDirectory%"\
	::刷新cube
	cd "%ScheduleDirectory%"
	start refreshforpboc.bat "%Cogtrbin%" %DataSourceName% %UserName% %UserPwd% "%MdlFileDirectory%" "%CubeSaveDirectory%" "%CubeOutputDirectory%"
	start refreshforcomm.bat "%Cogtrbin%" %DataSourceName% %UserName% %UserPwd% "%MdlFileDirectory%" "%CubeSaveDirectory%" "%CubeOutputDirectory%"
 )
exit

 

 

"refreshforcomm.bat"脚本:(执行模型刷新,生成cube)

 

::刷新金融机构立方体
@echo off
set Cogtrbin=%1
set DataSourceName=%2
set UserName=%3
set UserPwd=%4
set MdlFileDirectory=%5
set CubeSaveDirectory=%6
::去掉引号
set MdlFileDirectory=%MdlFileDirectory:~1,-1%
set CubeSaveDirectory=%CubeSaveDirectory:~1,-1%
set CubeOutputDirectory=%7
set MMDD=%date:~5,2%%date:~8,2%
set Week=%date:~-1%
set DD=%date:~8,2%
cd %Cogtrbin%
::日处理
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx\mdl\xxxxxx.mdl"
::优化生成的mdc
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx.mdc"
::复制cube到第三方目录
xcopy /y "%CubeSaveDirectory%\xxxxxx.mdc"  %CubeOutputDirectory%
::周处理
if %Week%==一 (
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx_w\mdl\xxxxxx_w.mdl"
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx_w.mdc"
xcopy /y "%CubeSaveDirectory%\xxxxxx_w.mdc"  %CubeOutputDirectory%
)
::月处理
if %DD%==01 (
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx_m\mdl\xxxxxx_m.mdl"
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx_m.mdc"
xcopy /y "%CubeSaveDirectory%\xxxxxx_m.mdc"  %CubeOutputDirectory%
)
::年处理
if %MMDD%==0101 (
%Cogtrbin%\cogtr -c -n2 -s -k%DataSourceName%=%UserName%/%UserPwd% -m"%MdlFileDirectory%\xxxxxx_y\mdl\xxxxxx_y.mdl"
%Cogtrbin%\pcoptimizer "%CubeSaveDirectory%\xxxxxx_y.mdc"
xcopy /y "%CubeSaveDirectory%\xxxxxx_y.mdc"  %CubeOutputDirectory%
)
exit

 

 

另一方面因为windows上模型文件里的cube输出目录以及iqd数据源目录无法像Linux一样配置成"On the server";因此需要根据报表实际的解压位置进行重设定;

在配置完"refreshCube.bat"后,执行“confgOtpath.bat”脚本:

 

rem 配置模型输出路径
@echo off 
setlocal enabledelayedexpansion
::替换目标
set r_source=d:\transformer
::替换结果
::在refreshCube.bat里查找配置值[BaseDirectory=]
for /f "tokens=2* delims=^=^" %%i in ('findstr /I /R /C:"set *BaseDirectory" "refreshCube.bat"') do set r_target=%%i
::枚举所有替换文件
for /r ..\mdl\ %%i in (*.mdl) do (
	::完全路径文件名
    set file=%%~fi
	::文件名不带后缀
	set filename=%%~ni
	::完全路径
	set filepath=%%~dpi
	call :fileReplace "!file!" "!filename!" "!filepath!"
)
exit

:fileReplace
set file=%1
set filename=%2
set filepath=%3
::去掉引号
set filename=%filename:~1,-1%
set filepath=%filepath:~1,-1%
for /f "tokens=1* delims=:" %%i in ('findstr /n .* !file!') do (
		::得到文本内容
		set f_content=%%j
		::替换文本内容
		if not "!f_content!"=="" set "f_content=!f_content:%r_source%=%r_target%!"
		::将替换后的内容保存到临时文件
		>> "!filepath!!filename!_tmp" (echo+!f_content!)
	)
::将临时文件替换源文件
move "!filepath!!filename!_tmp" !file!

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics