Product:
Cognos TM1 performance modeler 10.2.2
Windows 2012 R2
RDP server (terminal server)

Symptom:
You start Performance modeler local on the terminal server and connects to the TM1 server.
When you select “import data” you get a error message. But after the message (you click OK one) then you get your drive dialog to select a txt file.

You get same error if you from Excel on same server select File – Open.

“This operation has been cancelled due to restrictions in effect on this computer. Please contact your system administrator”.

Solution:
This is by setup on the Terminal server. You should not have access to the C drive.
This is a normal behavior.

Ask the Terminal Server administrator for a better behavior.

http://www-01.ibm.com/support/docview.wss?uid=swg21372035

Product:
Cognos TM1 10.2.2
Windows 2012 R2

 

Problem:
How run TM1TOP on a windows 2012 server from a bat file?

 

Solution:
Create a new folder on you TM1 server, e.g. D:\TM1TOP

 

Copy the 3 files to a separate folder on your TM1 server.
Tm1top.exe file from a earlier version of TM1.
tm1top.ini should be updated to contain the values for you TM1 server, or as below.

 

# The possible fields which can be set in this file are listed below.  Note that the
# field names are not case sensitive.  For example AllowMultiModes and allowmultimodes
# are equivalent.
#
# adminhost – admin server, default is localhost
# servername – TM1 server name
# logfile – log the status line to a log file
# logperiod – time(sec) that the status lines are written to the log file
# logappend [T,F] – When a new session is started should the log data be
#        appended to the log file specified by logfile
# refresh – time(sec) that the display is refreshed. Default is 2 seconds
# adminsvrsslcertid – SSL admin certificate ID, default is tm1adminserver
# adminsvrsslcertauthority – SSL admin server certificate Authority file,
#        default is in the ssl directory
# adminsvrsslcertrevlist – SSL admin server certificate revocation file
# exportadminsvrsslcert – export the admin server SSL certificate
# adminsvrsslexportkeyid – id used to export the admin server SSL certificate

 

adminhost=

servername=

logfile=

logperiod=

logappend=

refresh=

adminsvrsslcertid=

adminsvrsslcertauthority=

adminsvrsslcertrevlist=

exportadminsvrsslcert=

adminsvrsslexportkeyid=

 

# AllowMultiModes=[T,F]

# If AllowMultiModes is set to T, TM1Top supports additional display modes that show details of Sandbox

# and Job Queue operation.  The mode is selected when TM1Top is running by processing one

# of the following keys:  (N=Normal, S=Sandbox, Q=Job Queue)

# The default value if AllowMultiModes is not specified is T.

AllowMultiModes=

 

# DisplayMode (N=Normal, S=Sandbox, Q=Job Queue)

# DisplayMode selects the display mode that TM1Top that is in effect when TM1Top starts.

# The default value if this configuration entry doesn’t exist in the file is N for Normal mode.

DisplayMode=

 

Create a tm1topfap.bat file to start the session. It can contain values like this;

tm1top -servername “FAP” -refresh 1

pause

 

Save the bat file and run it – if it works you should have a white dos dialog that show tm1top: -adminhost localhost -servername FAP -refresh 1

 

The different commands in TM1TOP window:

N = Displays TM1 Top normal (thread status) mode.
S = Displays TM1 Top sandbox mode.
Q = Displays TM1 Top queue mode.
W = Writes the current TM1 Top information to a file.
X = Exits the TM1 Top utility.
H = Displays help text.
V  = Verifies a TM1 Top administrator session.
Displays a user name and password prompt so the TM1 administrator can log into the current session of TM1 Top and enter commands to cancel processing in other threads.

C = Cancels processing in another thread.
Note: Before using the Cancel command, an administrator must first log into the current session of TM1 Top by using the V (Verify) command.

K = Cancels a sandbox submission in the job queue for a specific job ID number.
Requires administrator login with the V (Verify) command

 

More information:

http://www.ibm.com/developerworks/library/ba-pp-infrastructure-cognos_specific-page674/index.html

http://www-01.ibm.com/support/docview.wss?uid=swg27039967

Product:

Cognos TM1 10.1.1 or TM1 10.2.2

Windows 2008 R2 Server

 

Problem:

How do I send a mail to the user that a TM1 Turbo Integrator (TI) process have finished?

Think you are in a TM1 project, and you want the TM1 Super user to get a mail when the csv file with data has been loaded into the DB2 database.

 

Possible Solution:

You can use the BLAT utility, found her http://sourceforge.net/projects/blat/files/

Ensure that you have a mail server that accepts SMTP mail from the TM1 server.

Create a empty folder on the TM1 server, e.g. d:\tm1 data\scripts

Copy all the BLAT files to the empty folder.

 

blat.dll

blat.exe

blat.lib

blatdll.h

 

If possible add the folder where BLAT.EXE are to the Windows Path variable.

Recommended is to use the BLAT install function to store the user and password to access the SMTP in the Windows registry, there it will be encrypted.

Create a cmd file named installblat.cmd with this content:

call “D:\tm1 data\script\blat.exe” -install smtp.bredband.net roger-mailname@bredband.net 3 25 Peo bbbbbbb cccccccc

 

REMark where bbbb is replace with the username and ccccc is replace with the password

for a account that are allowed to send SMTP mail on the mail server.

SMTP name should be replaced with the name of your SMTP server.

the roger-mailname should be replaced with your Sender address, that should be known to the SMTP mail server.

http://www.blat.net/examples/install&profile.html

 

Run the installblat.cmd to get the values stored in Microsoft Windows.

 

This create the values inside Microsoft Windows registry at key;

Windows Registry Editor Version 5.00

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Public Domain\Blat\Peo]

“SMTP server”=”smtp.bredband.net”

“SMTP Port”=”25”

“Try”=”3”

“Login”=”xxxxxxxxx”

“Pwd”=”xxxxxxxxxx

“Sender”=”xxxxxxxxx@bredband.net”

 

This is stored under the profile key Peo, you can use any name for the profile, but it have to be the same name used in the other scripts.

 

Create a recipient.txt file that contains the names of the receiver of the alert mail.

Should be simple, with only the mail name one each line.

roger@konsult.company.se

frango@cmpny.com

 

Create a startblat.cmd file to start the blat function, it should contain this text:

call “D:\tm1 data\script\blat.exe” message.txt -tf recipient.txt -subject “Mapping file loaded” -p Peo

 

Above two is optional, you can also create the startblat command in the TI process and add the recipient to the code.

 

You can create a message.txt file before if you want, but to add the filename of the file that is read by TM1, we have added  the creation of the message file to the TI process, so you can adjust the variable to get the filename from some other TM1 process.

 

You need to create two dimensions to handle the adjustable settings in a settings cube.

Create the dimension Sys.EnvironmentVariables with the elements Mottagare, MailSender, MailSubject, ScriptPath.

Create the dimension Sys.Measures

with the values String and Number.

 

Create a Sys.Settings cube from above two dimensions, in this cube can you enter name of the sender and other useful information like path to the files, that can change when you move the TM1 application to a new server.

 

For example at ScriptPath you should enter D:\TM1 data\Scripts\ in that cube.

And at Mottagare you should enter the name of the recipient of the message in a SMTP mail format like name@company.com. Please fill in the other values accordingly.

 

Create this code in the PROLOG tab;

#————————

# Begin Code date

#————————-

 

# set to not get ” in the text file you write to disk

DataSourceASCIIQuoteCharacter = ”;

 

# to add ” in the string you need a variable

#  more info: http://www.robelle.com/smugbook/ascii.html

q=char(34);

 

# for the test the name is set to variable, it can be collected

# from other process steps before.

sFile = ‘SOLVENS PROTOTYPE’;

 

# Get path to script (bat files) from value in Sys Settings cube

# this is good if you need to move your TM1 app to other server,

# to have all “paths” in a sys.settings cube

sPathBlat = CellGetS (‘Sys.Settings’, ‘ScriptPath’, ‘String’);

 

sSMTPServer = ‘smtp.bredband.net’;

 

# Set the message to be sent to the users

sMessage = ‘The file ‘| sFIle |’ have been loaded to the TM1 application’;

 

#

#  get value from cube named sys.settings on the

#  label Mottagare in column String

sRecipient = CellGetS (‘Sys.Settings’, ‘Mottagare’, ‘String’);

sSender = CellGetS (‘Sys.Settings’, ‘MailSender’, ‘String’);

sSubject = CellGetS (‘Sys.Settings’, ‘MailSubject’, ‘String’);

 

# write message to text file that later can be used by BLAT

asciioutput ( sPathBlat |’message.txt’,  ‘The ‘| sFile |’ file have been loaded into the TM1 Solvens II solution’);

 

# call the cmd (bat file) to start BLAT

##executecommand ( sPathBlat | ‘startblat.cmd’ , 0 );

 

# create the DOS command line

# more info http://www.blat.net/syntax/syntax.html

#

sDOS = ‘blat.exe message.txt  -to ‘| sRecipient |’  -subject  ‘| sSubject  |’  -p Peo’;

 

# only for debug purpose – write variable to file

###asciioutput ( sPathBlat |’tiprocessdebug.txt’, sDOS  );

 

executecommand ( sPathBlat | sDOS, 0 );

 

#——————————-

# end of prolog code

#——————————-

 

Save the process as Sys.SendMail.

Fill in your values for sender and SMTP server and then you can test run it.

 

Above prolog code show two different way of calling the BLAT.EXE, direct from code, or if you change the ## it will call the CMD file startblat, than then will call the BLAT.EXE file.

 

To check the value in a TM1 Variable, you can write it to a file, this is why we have the debug line ###, unmark the ASCIIOUTPUT to create a txt file that contain the value of the sDOS variable.

 

More information:

http://www.blat.net/examples/install&profile.html

http://sourceforge.net/projects/blat/files/

http://www.blat.net/

http://blog.tm1tutorials.com/tag/asciioutput/

http://www.exploringtm1.com/tm1-archive-ti-process/

Always check files you download from Internet fro malware with your anti-virus software.

Product:
Cognos TM1 10.2.2
Windows 2008 R2 Server
TM1 Architect

Problem:
The TI process does not work when added another TI process.

Possible Solution:
You have by mistake used the same name for the subsets that are in use by the different TI processes. Recommendation to use unique subset name for each process and cube.
This can be made by using this naming convention:

sDim = ‘S2.Valuta’;
sName = ‘$.’| GetProcessName();
sSubSet = sName|sDim;

Create above in prolog for each dimension that you need to use in the TI process.

Then in the epilog enter this, for each created subset of that dimension;

sDim = ‘S2.Valuta’;
sName = ‘$.’| GetProcessName();
sSubSet = sName|sDim;
SubSetDestroy (sDim, sSubSet);

This should make the subset only visible when the process is run, and they will only be around if the TI process crash. Then you have to delete the subset and re-run the TI process.

Product:
Cognos TM1 10.2.2
Cognos BI 10.2.1
Windows 2012 server

Symptom:
Can not login to TM1 Architect when changed to CAM security.

Error message:
SystemServerClientNotFound

Cause:
The firewall on the Cognos BI server is not letting port 9300 though.

Check the value ServerCAMURI=http://servername.domain.com:9300/p2pd/servlet/dispatch
in TM1S.CFG file on the Cognos TM1 server.
Copy the value http://servername.domain.com:9300/p2pd/servlet/dispatch
and paste it into Internet Explorer to try to surf from TM1 server to BI server.

If it does not work, check the local firewall settings on the BI server.

Go to Control Panel\All Control Panel Items\Administrative Tools
select Windows Firewall with Advance Security.
Select Inbound Rules.
If there does not exist a Cognos TM1 rule, create one.
On local port set 9300, and on remote port set All ports.
Save the Rule.
Test again to surf to BI server from TM1 server.

This are the most common ports you need open for Cognos BI and TM1;
25, 5495, 5498, 9300, 9510,12345, 49152-65535

You get also the same error if you misspell the server name in ServerCAMURI

More information:
http://www-01.ibm.com/support/docview.wss?uid=swg21459257
https://www-304.ibm.com/support/knowledgecenter/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.inst_cr_winux.10.2.2.doc/c_reviewthedefaultsettings.html%23ReviewtheDefaultSettings

Product:
IBM Cognos TM1 10.2.2
Microsoft Windows 2012 Server

Symptom:
Get error when surf to TM1WEB on a new installation

Error message:
The webpage cannot be found
Most likely causes:
• There might be a typing error in the address.
• If you clicked on a link, it may be out of date.
What you can try:

Retype the address.

Solution:
Surf to tm1web instead of TM1WEB, the new web server in TM1 10.2.2 is case sensitive.

Use http://servername.domain.com:9510/tm1web instead of
HTTP://SERVERNAME.DOMAIN.COM:9510/TM1WEB

Capital letters does not work.

Product:

IBM Cognos Tm1 10.2.2 fix pack 4

Issue:

Try to create a subset and get an error when run the TM1 TI process.

Process will set READ on selected DIMENSIONS for a defined AD group.

Error message:

Error: Prolog procedure line (67): Unable to register subset

 

Possible solution:

Missing last parameter in function, which should add all dimensions that start with S2 in name to subset.

SubsetCreatebyMDX ( sSubset , ‘{TM1FILTERBYPATTERN( {TM1SubsetALL( [ ‘| sDim |’ ]  )},   “S2.*” )}’ ,1);

Was missing last 1.

The function add the values that should be part of the subset

SubsetElementInsert(DimName, SubName, ElName, Position);

 

The variables are declared before with

sDim=’}Dimensions’;

sName = ‘$.’| GetProcessName();

sSubset=sName|sDim;

 

More info ( full prolog ):

 

#****Begin: Generated Statements***

#****End: Generated Statements****

 

 

sSecurityCube =  ‘}DimensionSecurity’;

#———————————————————————————–

# to add ” in the string you need a variable

#  more info: http://www.robelle.com/smugbook/ascii.html

#———————————————————————————–

q=char(34);

 

#—————————————————————————————–

# create the view as a static public view: CUBESEC

#—————————————————————————————

pFromCube = sSecurityCube;

SourceView= pFromCube | ‘CUBESEC’;

#——————————————————————

#    Create views

#———————————————————————

 

if(ViewExists(pFromCube, SourceView)=1);

viewDestroy(pFromCube, SourceView);

endif;

viewCreate(pFromCube, SourceView);

 

#——————————————————————

#    Define variables

#———————————————————————

sBIgroup = ‘CAMID(“:LDAP:Cognos_FAP_Users”)’;

sSecutiryAction = ‘READ’;

sDim=’}Dimensions’;

sName = ‘$.’| GetProcessName();

sSubset=sName|sDim;

 

#———————————————————————————–

# If subset exist then it is destroyed before created

#———————————————————————————-

if(subsetExists(sDim,sSubset)= 1);

subsetDeleteAllElements(sDim, sSubset);

else;

subsetCreate(sDim, sSubset);

endif;

 

#——————————————————————————————————————

# add the values that should be part of the subset

# SubsetElementInsert(DimName, SubName, ElName, Position);

# should be all dim that start with S2, so a MDX look like this

#   {TM1FILTERBYPATTERN( {TM1SubsetBasis()}, “S2.*”)}

#———————————————————————————————–

 

SubsetCreatebyMDX ( sSubset , ‘{TM1FILTERBYPATTERN( {TM1SubsetALL( [ ‘| sDim |’ ]  )},   “S2.*” )}’ ,1);

 

#——————————————————

# add subset to view

#——————————————————-

ViewSubsetAssign(pFromCube, SourceView, sDim, sSubset);

 

#——————————————————————————-

#       Set source   – we only use subset in dim

#——————————————————————————–

DataSourceType=’SUBSET’;

DataSourceNameForServer=  sDim;

DatasourceDimensionSubset=   sSubSet  ;

 

 

#————————————————————————————————–

 

i=1;

G2 = SubsetGetSize( sDim, sSubSet);

while (i <= G2);

G1= ( SubsetGetElementName  ( sDim, sSubSet, I));

cellputs  (  sSecutiryAction , sSecurityCube, G1  , sBIgroup );

i=i+1;

end;

 

#—————————————————————————–

# end of code

#—————————————————————————–

 

 

Epilog should have some clean up code like this:

if (ViewExists(pFromCube, SourceView)=1);

viewDestroy(pFromCube, SourceView);

endif;

 

#———————————————

# destroy temp subset

#———————————————

sDim=’}Cubes’;

sName = ‘$.’| GetProcessName();

sSubset=sName|sDim;

subsetDestroy(sDim, sSubset);

 

Product:
Cognos TM1 10.2.2

Issue:
When surf to http://servername:9510/tm1web/contributor get a error message

Message:
HTTP Status 404 – /tm1web/contributor
——————————————————————————–
type Status report
message /tm1web/contributor
description The requested resource is not available.
——————————————————————————–
Apache Tomcat/6.0.44
Solution:
Surf to http://servername:9510/pmpsvc instead.
You need to surf to TM1 Application web to then start the application and the TM1 contributor client. You cannot surf direct to the TM1 Contributor client. The TM1 Application is the new Contributor.
http://www-01.ibm.com/support/docview.wss?uid=swg21669190

Product:
Cognos TM1 10.2.2
Issue:
When publish a TM1 application to the TM1 Application Web you get a error message.
Error message:
IBM Cognos TM1 Applications are not supported when the TM1 server is using Cognos Security mode 4. Specify IntegratedSecurityMode=5 instead.

Solution:
Open TM1S.CFG in notepad and change to 5
The new version only supports mode 1 or 5.
Change
IntegratedSecurityMode=4
To
IntegratedSecurityMode=5
Save the file.
Then from Windows services, stop and start your TM1 instance.
Start Performance modeler again and test again.
More Information:
https://www-01.ibm.com/support/knowledgecenter/SS9RXT_10.2.2/com.ibm.swg.ba.cognos.tm1_inst.10.2.2.doc/t_tm1_inst_app_cfg_app_webjv.html

Product:
Cognos TM1 10.2.2
Microsoft Windows 2008 R2 Server

 

Issue:
How to merge two text files that are created with a Turbo Integrator process? ASCIIOUTPUT will overwrite a file if called in a different tab of the same process in TI editor in TM1 Architect program.

 

Possible solution:
Merge the files after the TI process with a MS DOS command. Here a suggestion, the variables are filled with values earlier in TI code with CellGetS or from the cubeview that is read.

 

In PROLOG create the file name for the output, static or from a SYSTEM cube.

#————————————————–

# define file name to be used by combination a lot of variables or prompts.

#—————————————————-

sFileName = ‘RESULTAT_’| pTarget |’_SaldoHB_’| pHuvudbokstyp |’_’| paCompany |’_’|  pPeriod  |’_’| vTime |’.csv’;

 

#—————————————————————————-

#   save the filename in the system cube

#   to make it possible to use the file later

#—————————————————————————

if (LONG (pFileStorage) = 0);

pFileStorage= ‘File1’;

endif;

CellPutS ( sFilename, ‘Sys.Settings’, pFileStorage , ‘Value’ );

 

In METADATA create a unique file name for the file

#——————————————

# create the output in own file in meta tab

#——————————————

sFilename2 = sfilename | ‘_meta.csv’;#——————————————

# create the file from the list of variables

#——————————————

q=char(73);

Asciioutput( sPath | ‘\’ | sFilename2,

 

sBASE_DT ,

sHUVUDBOKSTYP ,

sFORETAG ,

sKONTO ,

sREDOVISNINGSPRODUKT ,

sVALUTA ,

sURSPRUNGSVALUTA ,

sINTERNMOTPART_FORETAG ,

sLANDSKOD,

sCOUNTRY  ,

sSALDO

);

 

In the DATA tab you fill with new data to file with unique name

#—————————————————————–

#  create data in own filename

#————————————————————————–

sFilename3 = sfilename | ‘_data.csv’;

 

#—————————————————————–

#  output the data in variables from data to a own file

#————————————————————————–

q=char(73);

Asciioutput( sPath | ‘\’ | sFilename3,

 

sBASE_DT ,

sHUVUDBOKSTYP ,

sFORETAG ,

sKONTO ,

sREDOVISNINGSPRODUKT ,

sVALUTA ,

sURSPRUNGSVALUTA ,

sINTERNMOTPART_FORETAG ,

sLANDSKOD,

sCOUNTRY  ,

sSALDO

);

 

In EPILOG you create the DOS command and do the concatenation of the files.

#———————————-

#  merge the two files to one

#———————————-

sFileA = sPath | ‘\’ | sFilename2;

sFileB = sPath | ‘\’ | sFilename3;

sFileC = sPath | ‘\’ | sFilename;

 

Executecommand ( ‘CMD /c copy ‘| sFileA |’  +  ‘| sFileB |’  ‘| sFileC |’  ‘, 1);

 

#———————————————————-

# erase the temp files from the folder

#———————————————————–

Executecommand ( ‘CMD /c DEL ‘| sFileA |’   ‘, 1);

Executecommand ( ‘CMD /c DEL ‘| sFileB |’   ‘, 1);

 

But above code have a error, it gives a file with a line-return last, so to get rid of the the last empty line in the final file you need to use the TYPE command instead of COPY. This copy the FileA to the FileB, so FileB will contain both files content.

Executecommand ( ‘CMD /c   TYPE ‘| sFileA |’  >>  ‘| sFileB |’    ‘, 1);

Then you need to adjust above code to create that sFileB variable contain the name of the file you finally want it to be.

Note, that below will not work because RENAME does not support paths in name.

Executecommand ( ‘CMD /c  REN ‘| sFileB |’    ‘| sFileC |’    ‘, 1);