Downgrading reports from C10 to C8
Here is a great article by my fellow Axian employee Joshua Burkhow on how to downgrade reports.
Here is a great article by my fellow Axian employee Joshua Burkhow on how to downgrade reports.
I am involved in the process of regression testing an upgrade from Cognos 8 to Cognos 10. We moved onto C10.1 so we did not encounter any issues that were in that fix pack. There has been some serious bugs that we have encountered in our upgrade. As more companies are upgrading to C10 and it is important to understand what is outstanding still and what content will be in the next fix pack from Cognos. This is especially true in the infancy of a major release. IBM targets the most impact-full bugs for the first several fix packs and it is important to understand what to expect when upgrading. Here is the link for the fix pack release schedule and here is the fix list for 10.1.1 the most recent fix pack. I will be listing in this post all of the problems that I have encountered during our upgrade process.
1). Attributes and Identifiers are (seemingly) randomly changing prompt types.
Example: When a user selects to filter on a certain attribute (say an integer) will change to date type filter bringing up the calendar filter. This has been extremely problematic for us and impossible to predict. This problem seems to be a translation into XML problem.
Fix: This is supposed to be fixed in the Cognos 10.1.1 refresh package. Meanwhile, you could hard code all attributes to a prompt filter. This is a very time consuming fix.
2). Conditional formatting seems to be changing in C10.
Example: We have found several examples where reports in C10 did not display the correct conditional formatting. Cells that should be green (indicating above a certain number) were red and vice versa.
Fix: Again Cognos 10.1.1 refresh package is supposed to fix this. I have not found a work around for this.
3). Scheduled Reports (batch) failure.
Example: Scheduled Reports are failure because end user is presented with more prompts when running report in batch.
Fix: We have not found a consistent fix for this but it is in the fix list for Cognos 10.1.1 refresh package.
4). Outputting a report to Excel failure.
Example: We have run into a problem where the report will run for the required time and then quickly flash the open, save, or cancel prompt. If the user misses the prompt the report does not open. This seems to be affecting all studios.
Fix: I have not been able to confirm whether this is in the 10.1.1 fix pack.
These are the major bugs that I have encountered while performing 8.4 to C10 regression testing. I would recommend that anyone that is about to upgrade to C10 wait until the 10.1.1 fix pack as the large problems that we have encountered are addressed. Some of these problem have workarounds but most do not. The random attribute switching has been an extremely trying problem and has a very time consuming fix. I will continue to update this post with any new problems as we move onto fix pack 10.1.1 and beyond.
Prompts provide the user to perform dynamic filtering, meaning the user can choose the filter criteria (within the parameters defined by the report writer) every time they run a report. This allows one report to span a wide range of user requirements. This is a basic feature that almost all reports use. The purpose of this post is not to explain how to build a prompt IBM has done a good job here and also starting on page 421 of the Report Studio (version 10) user guide. There are two different prompt mechanisms in Cognos: ?prompt? and #prompt#. What is the difference between these two?
Let us start with #prompt#. This is actually used in Framework Manager and is really powerful when used in Report Studio. The syntax for using the prompt macro is: #prompt(ParameterName,Datatype,Defaultvalue,PreText,Source,PostText)#. Dissecting this: ParameterName is what you will call the prompt so that you can call back to it in other sections of the report. Datatype is the type of data that this prompt is utilizing; string, MUN (member unique name-used in dimensional reporting), numeric, token etc. Defaultvalue is the value it will pass if the user makes no selection. Pretext allows you to define something before the user makes a selection. Source is fairly obvious, it is the source. Posttext allows you to define something after the user makes a selection. #promtmany ()# can also be used to create a multi-selection dynamic prompt.
Now onto ?prompt?. A great post by Tamas Simon showcases that this prompt is really just a string prompt macro. When you write ?prompt? really it is shorthand for #prompt(‘prompt’ , ‘string’)#. So, as a power user report writer I never use the ?prompt? method so that it is always clear to someone working on my report what exactly this prompt is doing.
Using a prompt macro with Pretext and Posttext increases the flexibility of the prompt. Pretext allows you to manipulate the prompt before the user makes selection. This could be used to limit what the user select or to perform a function prior to selection. Postext does the opposite; perform a function after the user selects a parameter.
Tokens are an incredibly powerful and useful tool in the prompt macro toolbox. Tokens enable the report writer to allow the user to select a parameterized filter. This means for a date filter using a token the user could select a max date, date range, or a specific date. Cognos has a great tutorial on how to set this here.
There seems to be some confusion about the uses and benefits of dimensional versus relational reporting. A lot of people seem to be on one side of the fence or another. I myself see significant value in both dependent on the task or process in question. Let me explain this a little bit better. When performing ad hoc analysis nothing is better in my mind than dimensional tools. Often though, complex reports are easier and faster to build when using a relational source. I often suggest that when considering a new reporting environment both models are utilized. This allows for flexibility for the end user.
Below is what IBM has to say on the matter: See also here.
|
Relational Reporting
|
Dimensional Reporting
|
|
|
Report type
|
Lists
Crosstabs
Charts
Maps
|
Crosstabs
Charts
Maps
|
|
Models
|
Relational models
|
Dimensionally-modeled relational models
Online Analytical Processing (OLAP) models
|
|
Data tree
|
package
folder
namespace
query subject
query item
measure
level
|
A customizable source tree, including the following:
package
folder
namespace
fact
measure
dimension
hierarchy
level
level attribute
member
|
|
Data items
|
Data items using relational and common constructs
|
Data items using dimensional and common constructs
Extended data items
|
|
Inserting data
|
Report Studio groups data automatically by query item. For example, when you add the Product type query item to a list, all product types appear when you run the report.
|
Report Studio groups data automatically by level. For example, when you add the Product type level to a crosstab, all product types appear when you run the report.
You can also create sets of members from different levels within the same hierarchy. For example, you can create a set of members that includes only Cooking Gear and Lanterns and than add that data to a crosstab.
You can also choose to insert just the member, just the children of the member, or the member and its children.
|
|
Summarizing data
|
Headers and footers in lists
Summary functions
Member summaries
Aggregate within detail
|
Member summaries
Aggregate within set
|
|
Focusing data
|
Add a query item and then add a detail or summary filter to view only the data you want to see.
For example, add the Quarter query item to a list and filter by Q3.
|
Add only the relevant members to an edge of the crosstab or to the context filter.
For example, only add the Q3 member to your report.
|
|
Drilling
|
Drilling through by value
|
Drilling through by member
Drilling up and down
|
|
Page and section breaks
|
Simple page breaks
Page sets
Sections
Master detail relationships using parameterized filters
|
Simple page breaks
Page sets
Page layers
Master detail relationships using parameterized edge or slicer expressions
|
|
Report Studio authoring mode
|
Professional authoring mode
|
Professional authoring model
Express authoring mode
|
|
Alternative Studios
|
Query Studio
|
Analysis Studio
|
It is often requested to have a launch page built where users can open up new reports, important reports, and links to other areas of the portal. I have found that the best way to accomplish this by building a custom report that will fit the bill.
To build a link that opens a new report in a specific studio with a specific package use the following html:
yourcognosaddress/cognos8/cgi-bin/cognosisapi.dllb_action=xts.run&m=portal/launch.xts&ui.gateway=yourcognosaddress/cognos8/cgi-bin/cognosisapi.dll&ui.tool=AnalysisStudio&ui.object=/content/folder[@name='Folder in Public Folders']/folder[@name='Next Folder']/folder[@name='Folder After That']/package[@name='Package']&ui.action=new
Let’s break this down. You will use your own cognos address here.
yourcognosaddress/cognos8/cgi-bin/cognosisapi.dllb_action=xts.run&m=portal/launch.xts&ui.gateway=yourcognosaddress/cognos8/cgi-bin/cognosisapi.dll&ui.tool=AnalysisStudio&ui.object=/content/folder[@name='Folder in Public Folders']/folder[@name='Next Folder']/folder[@name='Folder After That']/package[@name='Package']&ui.action=new
This is where you open a specific studio.
yourcognosaddress/cognos8/cgi-bin/cognosisapi.dllb_action=xts.run&m=portal/launch.xts&ui.gateway=yourcognosaddress/cognos8/cgi-bin/cognosisapi.dll&ui.tool=AnalysisStudio&ui.object=/content/folder[@name='Folder in Public Folders']/folder[@name='Next Folder']/folder[@name='Folder After That']/package[@name='Package']&ui.action=new
Here is where you navigate through the folders to where the package resides. This is an annoying way to navigate through a folder path but it must be done.
yourcognosaddress/cognos8/cgi-bin/cognosisapi.dllb_action=xts.run&m=portal/launch.xts&ui.gateway=yourcognosaddress/cognos8/cgi-bin/cognosisapi.dll&ui.tool=AnalysisStudio&ui.object=/content/folder[@name='Folder in Public Folders']/folder[@name='Next Folder']/folder[@name='Folder After That']/package[@name='Package']&ui.action=new
Here is where you name the package you would like to open.
yourcognosaddress/cognos8/cgi-bin/cognosisapi.dllb_action=xts.run&m=portal/launch.xts&ui.gateway=yourcognosaddress/cognos8/cgi-bin/cognosisapi.dll&ui.tool=AnalysisStudio&ui.object=/content/folder[@name='Folder in Public Folders']/folder[@name='Next Folder']/folder[@name='Folder After That']/package[@name='Package']&ui.action=new
Now you know how create a link that will open a new report with a specific package. This is useful if you have several packages and you want to make it easier for the users to choose the right package, especially when you have dimensional packages as well as relational. Often packages are contained in awkward locations and this provides convenience for the end user.
–the use and purpose of comments
I recently worked on a project where a report wasn’t performing like the business wanted it to perform. The report was listing prior year actuals (sales) by rep and allowing the rep to plan for next year based off of those actuals. The rep override table that was used to assign another rep’s products and either take the products away from the original rep or have both reps assigned to the products. There were some other complications that made this process more complex, but the details aren’t necessary for this discussion. The problem was, that the table wasn’t taking the products away from the original rep.
Discussions were had with the team that created the original solution and they decided that the solution worked according to the original specs they were given and that a significant amount of money would be required for them to go in and change it. This meant that the solution was left for me to come up with and that I had to dig into the original SQL to understand why this wasn’t working.This happens more than I would like and happens in both large companies where a BI team bills the business for work and small companies where there is only a few IT employees that share work.
Here is where the discussion starts: When I examined the code, there was no comments. Because of this I spent about three times as much time trying to decipher what the code was doing and WHY it was written that way. The solution was written with 8 outer joins of the same table, a very odd way of writing the code. After spending a considerable amount of time deciphering the intent of the coder I understood why it was written in this unusual way. However, if there had been just three or four lines of comment code explaining the intent of original coder I would have accomplished the solution in about a third of the time knocking several full days off of my workload.
Often the BI community thinks only of the actual BI tool (Cognos, Micro Strategy) as BI. Really it is also the denormalized model that it sits on as well. I can’t count the number of times that I have had to go into the SQL model to understand or change something. BI systems are constantly evolving, just as business practices are constantly evolving. It is for this reason that I want to discuss commenting.
There should be an intro comment: