Disclaimer: I am a Cognos newbie.
I want to format a data item in Cognos (Report Studio 10.2) to always display as 2 digits. For example, if the value of the data item in 2, I want it to be displayed as 02. How can I achieve this?
I have tried
Format$([my_data_item], "00")
Format([my_data_item], '00') - w/o the dollar sign
None worked.
Any help will be highly appreciated. Thanks!
Marcus ...thanks for pointing me in the right direction.
I was able to use the round function in the query with a CASE statement and it served my purpose with very little modification to the original report. Note to any new Cognos developer would be leave formatting to the report page and not the query.
case when [TRANSFORMATION VIEW].[SOME_FACT].[DOLLAR_VAL]<>-99999 then
case when [TRANSFORMATION VIEW].[SOME_FACT].[DOLLAR_VAL] >= 1000000 then
round( [TRANSFORMATION VIEW].[SOME_FACT].[DOLLAR_VAL] /1000000, 2)
else
round([TRANSFORMATION VIEW].[SOME_FACT].[DOLLAR_VAL],0)
end
end
Then on the report itself, I formatted the data item as Numeric and didn't change any of the default settings. That did the magic. The reason why I have round([TRANSFORMATION VIEW].[SOME_FACT].[DOLLAR_VAL],0) is because I don't want to display cents in the dollar amount.
Related
Working with postgres 9.4 and using PGAdmin III: I have a schema with a character field that MAY contain "new lines" (NLs), or MAY contain double spaces, or neither. I need to divide the field into 3 segments by either of the above factors or by 26 characters in length.
If the total length is 26 or less, I just copy it as is.
If it has NLs, then I split it by those.
If no NLs but it has double spaces, I split it by those.
Finally, if none of the above, I want to split it into 3 26 character chunks.
For context; the column is data entered by customers into a 3 line box. anywhere from 4 characters up to 78. Some use NLs, some use spaces to push the text to the next line, some have luck with spacing so use neither.
Here's the part of the query to gather the first line:
CASE WHEN LENGTH(detail) < 27 THEN detail
WHEN detail LIKE E'%\n%' THEN SPLIT_PART(detail,E'\n',1)
WHEN detail LIKE E'% %' THEN SPLIT_PART(detail,E' ',1)
ELSE LEFT(detail, 26)
END AS line1,
When I test this on a sample schema, the first three parts work exactly as I need but the "ELSE" part never does. The LEFT statement workout outside of the CASE statement but not within.
I've tried enclosing it with a SELECT clause, nesting several CASE-WHEN-ELSE statements, and other things to no avail.
Oddly, it DOES work if I take out the "SPLIT_PART" line referring to '% %'.
Short of giving up on the double-space split, is there another solution, or have I just formatted something wrong?
CASE WHEN LENGTH(detail) < 27 THEN detail
WHEN detail LIKE '%\n%' THEN SPLIT_PART(detail,'\n',1)
WHEN position(' ' in detail) > 0 THEN SPLIT_PART(detail,' ',1)
ELSE left(detail,26)
After another bit of time mucking about, I suspected the LIKE E'% %' might be the issue - and it was. Simply changing it to LIKE E' ' allows it to work like I wanted.
Added:
Turns out the best solution is a combination of "position" to determine if the double space exists, and split-part to separate correctly at the location.
so far I didn't succeed in scraping the table "Die Verlustursache" from this page
http://www.ubootarchiv.de/ubootwiki/index.php/U_205
using libraries (XML) (rvest) (readr)
I can address all tables on the site with individual code lines like
table <-readHTMLTable("http://www.ubootarchiv.de/ubootwiki/index.php/U_203") %>% .[1]
but the numeric numbers vary on all the other sites.
check for example: http://www.ubootarchiv.de/ubootwiki/index.php/U_27
I just realized that the table I need is always the fourth last one (meaning: the last table minus 4).
In another scraping project, I once used this line to only scrape the last item of a list page:
html_nodes(xpath="/html/body/div/div[3]/div[2]/div[1]/div[2]/div/table/tbody/tr[last()]"
However, I was not able to find a solution for something like "last - 4"
Please advise & Thx in advance
You could use this if it is always the fourth last table:
table <-readHTMLTable("http://www.ubootarchiv.de/ubootwiki/index.php/U_203")
table[length(table) - 4]
I have a crystal report in which my datas are displayed. In my database table the branches are to be represented in numbers like 1,2,3 etc. So after displaying in crystal report the place of branch name shows as 1. So instead of number I need to show it as office.
example: If the branch name is '1' then in crystal report it will display as 'office', how can I achieve this?
Try this...
StringYourVar text := Totext({YourNumberField} , 6 , "YourText");
or this.
Maybe This situation (Display keywords instead of integers) can help you.
If {YourNumberField} = 1 Then "Office"
Esle If {YourNumberField} = 2 Then "YourText" .
make sure use crystal syntax in editor
I am attempting to improve an existing "data item query expression" in Cognos 10 via Report Studio. The current expression works fine... except it can't accommodate words with an apostrophe in them.
In many cases, we have just removed the apostrophe in our supporting data sources, but instances of apostrophes remain. Example: L'ESSENTIAL has been changed to L ESSENTIAL. L'AGENDA has become L AGENDA. My goal is to correct the expression so when it does encounter a L'ESSENTIAL or L'AGENDA it knows what to do with them.
The trial-and-error efforts generally result in parsing errors.
I've tried to surrounding or preceding the apostrophe with quotes"', asterisks *', tildes ~' and percents %' but none of these iterations have been successful.
Here is a highly abbreviated version of the formula:
case when [_Dimensions].[Product Dimension (Configured)].[Product Dimension (Configured)].[Item].[Catalog Brand or Catalog Group] in ('L ESSENTIEL','L AGENDA') then '01 NO APOSTROPHE'
when [_Dimensions].[Product Dimension (Configured)].[Product Dimension (Configured)].[Item].[Catalog Brand or Catalog Group] in ('L%'ESSENTIEL','L%'AGENDA') then '02 WITH APOSTROPHE'
else '99 EVERYTHING ELSE'
end
How do I re-write the bolded part so it recognizes L'ESSENTIAL and L'AGENDA as strings?
Forgive my lack of experience in this arena... this is not my area of expertise, unfortunately.
Thanks in advance for any novice level guidance you can offer.
You can escape single-quote characters by using two single-quotes in a row. So the in() clause in bold above would be:
in ('L''ESSENTIEL','L''AGENDA')
I have a table in a RDLC report which is utilized as a subreport, and the first column of this table is a static string. Does anyone know how I can determine if a row is the first in the table. I tried using "=First("My String")" but it didn't work.
Looking at the link supplied by ThatBloke in his answer, I found the RowNumber command.
Which means that this worked:
=IIf(RowNumber(Nothing)=1,"myString", "")
Aggregate functions work with "Scope', referring to the paragraph scope in this MSDN article, might help...
http://msdn.microsoft.com/fr-fr/library/ms252112(VS.80).aspx"
From what I understand you may have to define a scope or try =First("MyString", Nothing).
=IIF((RowNumber(Nothing) Mod <>)=0)
<> Indicate No of Rows Which you want To Display