Localization in SSRS reports - reporting-services

can some one tell me/help me about localization of SSRS repors?
How can I change language of labels (I have more than 50 reports and more than 200 different labels)?
I found one way
http://www.keepitsimpleandfast.com/2011/09/localization-of-your-ssrs-reports.html
but is there some other and faster way to change language of report labels?

If you are want to implement a robust system for managing multiple localisations for a set of reports then something similar to the linked example in your question would be ideal.
However if you just want to replace text strings in the report definitions for a single localisation, e.g. replace all instances of "Revenue" with "Opbrengst", then you could do a find and replace in the text of the .rdl files. You can do this for a set of files in something like Notepad++. This has some obvious risks as you could unintentionally replace values in expressions etc. that could break the report, so would need to be done very carefully and be followed up with comprehensive testing.

Related

Formatted Text in report Access 2013

I am using Access 2013.
I am generating a specifications writing database which involves the user inputting a number of items as data which is then incorporated into a report. The report structure is largely similar but there are something like 30 variants with small changes based on the data entered at the start.
Each report extends to around 7 pages whereas the data is only in the first 2 pages. The remaining pages contain standard clauses common to all the reports. effectively they are an instructional on using the products to which the specification report refers.
I now have a rather frustrating problem.
Is it possible please to set up a standard report using a rich text format. I have thought of using the bulk of the report as an image and incorporating this but it uses up lots of storage space. I have looked through the forum but cant find a scenario that really fits what I am looking for..
I almost want a really big text box that I can format in the same way as you would a word document. Not sure if this makes sense so if further clarification is required please ask. Many thanks in anticipation.
You can use Rich Text in Access, with the data stored in a Memo (Long Text) field: Link
I would set it up like this:
Have a table with one field per clause. This table has only one record. Fill out the texts directly in the table (or build a simple form for it, if you like).
In your record source of the report, add this table without any join (= cross join).
Then add all the fields to the report footer, height = 1 line, Can grow = True.
This will keep each clause together on a page. If you don't care about this, you can also use one huge field with all the text.

How do I re-use reports on different datasets?

What is the best way to re-use reports on different tables / datasets?
I have a number of reports built in BIRT, which get their data from a flat (un-normalized) MySQL table, the data which in turn has been imported from an excel sheet.
In BIRT, I've constructed my query like this, such that I can change the field names and re-use the report:
SELECT * FROM
(SELECT index as "Index", name as "Name", param1 as "First Parameter" FROM mytable) t
However, then when I switch to a new client's data, I need to change the query to the new data source and this doesn't seem sustainable or anywhere near a good practice.
So... what is a good practice?
Is this a reporting issue, or a database-design issue?
Do I create a standard view that the report connects to?
If I have a standard view, do I create a different view with the same structure for each data table, or keep replacing the view with a reference to the correct data table each time I run the report?
What's annoying is the excel sheets keep changing - new columns are added, and different clients name their data differently. Even if I can standardize this, I'd store different client data in different tables... so would I need to create a different report for each client, or pass in the table name to the report?
There are two ways and the path you choose is really dictated by how much flexibility you have architecturally.
First, you are on the right track by renaming your selected columns to a common name since that name is what is used to bind the data to the control on the report. Have you considered a stored procedure to access the data? This removes the query from the report and allows you to set up the stored proc on any database to return the necessary columns. If you cannot off-load to a stored proc, you can always rely on altering the query text at run-time. Because BIRT reports are not compiled (they are XML) you can change the query based on parameters and have it executed for each run of the design. Look at the onCreate event for the Data Set and you can access this.queryText and do any dynamic string substitution you need via JavaScript. Hidden parameters are a good way to help alter/tune the query. If you build the Data Set correctly, the changing of the underlying data could be as easy as changing the Data Source and then re-associating the Data Set to the new Data Source (in the edit data set window). I have done this MANY times and it works well. If you are going down this route, I would add the Data Source(s), Data Set(s) and any controls that they provide data to a report library. With the library you can use the controls in many reports and maintain them in one spot. If you update the library, all the reports using the library get updated as well.
Alternatively, if you want to really commit to a fully re-usable strategy that allows you to build a library of reusable components you could check out the free Reusable Component Library at BIRT Exchange (Reusable Component Library). In my opinion this strategy would give you the re-use you are looking for but at the expense of maintainability. It is abstraction to the point of obfuscation. It requires totally generic names for columns and controls that make debugging very difficult. While it would not be my first choice (the option above would be) others have used it successfully so I thought I would include it here since it directly speaks to your question.

MS Access - GLOBAL search for keyword (in queries, forms, reports)

[This questions pertains to Access 2003]
I need to add an additional criteria (b) to a query wherever another specific criteria (a) is being used, so I need to do a global search for incidences of (a)
So, I can do a global search in VBA code, no problem.
To look in queries, I can say:
SELECT MSysQueries.*
FROM MSysQueries
WHERE (((MSysQueries.Expression) Like "*myCriteriaA*"));
But, I can't figure out a way to find any occurences in SQL within a form or report recordsource property.
I suppose I could write VBA to iterate all the objects looking for it, but is there no simpler way to do this? (Hopefully without resorting to a 3rd party add-in, unless its free)
Rick Fisher's Find and Replace gives you two search criteria fields in the free version. I've been using that tool for probably 15 years now. For other solutions see the Scan and replace utilities section at the Microsoft Access third party utilities, products, tools, modules, etc. page at my website.
You can't do it in SQL -- you have to do it in code.
To do so, you walk through the AllForms and AllReports collections and open each in turn in DesignView and check the Recordsource property. You might also want to walk the Controls collection of the forms looking for Combo Boxes and Listboxes so you can check their Rowsource properties. There oughtn't be any of those on properly-designed reports but you should probably check, anyway.
If you need code for this, just ask.

Passing parameters between reports in SSRS 2005

I'm relatively new to SSRS 2005. I've built simple reports, and spreadsheets but I'm just beginning to delve into the world of fun that is SSRS/RDL. I'm trying to pass one (custom/non-query) parameter from one report (*.rdl) to another. While logically I would like to add a global variable, there doesn't seem to be any straightforward method/technique for doing what I want. It seems each page/report has its own parameters and reports aren't allowed to share each other's info.
I'm trying to simply hide objects/items based on an option that the user selects. Should a user select option A or B, I want to simply hide certain objects on multiple reports (within the same project) based on their selection. I simply check for the parameter value within an expression for the visibility property in any given object. Nothing complicated really. I've tested it out and on just one report by itself, it works. But try to get one report to read that value on another report, and there's no clear path in doing so.
Now as I've grown accustomed to SSRS, I believe there's the "normal" programmer's way and then there's the "SSRS" way. Both are mutually exclusive. So either I'm trying to do something that will never be allowed, it's a "built-by-design" feature and/or I'm going about it the wrong way.
Ideas? Suggestions? Maybe I'm going about this the wrong way.
Ok, so there's a only a few ways to pass parameters from one page to the next. I (eventually) discovered that I was simply trying to pass a boolean from one to the next. The data was not from the database, it was something manual ('true/false'). At first I thought I needed something akin to a global variable which there are a few built-in globals in SSRS. But as I found out, you can't add anything to that collection.
So on this one report I have an image pointing to the 'Next' page of the report. Within that object/image, you can set navigation parameters on that object/image. Makes sense so far.
On the following page, your report parameters must match the position in which the variable was listed from the following page. I guess SSRS passes a non-key based arrays from one report to the next so index/position is vital for getting the parameters right. Hence the arrows allowing you to adjust the parameter order. That was what tipped me off, but I thought it was SSRS was more adept then that in the sense that parameters being passed had to just match in name, not position.
(IMHO) as I see things, SSRS has/tries/must remain fairly static. There's no real sense of events, OO, etc. and yet SSRS seems to stitch elements from VB, VBA (expressions), SQL/T-SQL altogether and spew forth a usable product. I guess that's my newb perspective. I'm sure it will change with time.
Using subreports might allow you the functionality you need. Otherwise, the only other way I know of to "pass" parameters from one report to the next is using the query string.

Grouping by a report item in SSRS 2005 - textbox - any workarounds?

I want to group by a report item, but that's not allowed.
So I tried creating a parameter...not allowed as well.
Tried referencing from footer...failed again.
This is somewhat complicated.
Let me explain:
I have textbox22, it's value is:
=Code.Calc_Factor(Fields!xx.Value, fields!yy.Value...)
This is embedded VB code in the report that's called for each row to calculate a standard factor.
Now to calculate the deviation from the standard factor, I use textbox89, whose value is:
=(Fields!FACTOR.Value - ReportItems!textbox22.Value)/ReportItems!textbox22.Value
Don't get confused between Fields!FACTOR.Value and textbox22.Value, they are different.
Fields!FACTOR.Value is the factor used, textbox22.Value is what it should be (standard factor).
Now I want to create a group which splits deviations into 2 groups, > 1% or not.
So I tried creating a group:
=IIF(ReportItems!textbox89.Value > 1,0,1)
...But then SSRS complains about using report items.
I have run into a similar problem of using report items in the past, but this is a new case!
Any help greatly appreciated.
Have you tried adding a calculated field to your dataset?
Here is how it works:
While you are in the layout view of the report, open "datasets" tool window(in my environment it is on the left).
Right click on the DataSet you are working with and add a field, you can use a calculated field, and build your formula appropriately
Then you should be able to group on this field
-Dan
I'm not 100% that someone won't have some magic solution for this but I have run across similar problems myself in the past. I believe (but could be wrong) the problem Reporting Services is having is that it only renders once and what you're asking it to do is render the data before rendering the grouping which it doesn't do.
The only way I have ever been able to produce the exact results I need is to make the data rendering happen exclusively in the SQL (through the use of table variables usually) and then use Reporting Services merely as a display platform. This will require that your factoring algorithm gets expressed in the T-SQL within the stored procedure you will likely have to write to get the data in shape. This would appear to be the only way to achieve your end result.
This has the bonus feature of separating report design and presentation from data manipulation.
Sorry I couldn't provide a SSRS solution, maybe someone else will know more.