Save and re-load the saved rdlc report - wpf

I am developing an application in WPF in which I need to generate and show reports. I am using RDLC for generating and showing reports. The requirement for reports are
Should generate and show report.
The user should be able to save the report (they havent specified the format to save the report.)
The user should be able to load and view the saved report.
What I am currently doing is that, I am generating a temporary pdf file out of RDLC file to show the report. If the user wish to save the report, the report will be saved as PDF otherwise the temporary PDF file will be deleted. And when user wants to load the saved report, he can, as it is PDF format.
In the program, I am using "winformhost" control in WPF to show the report. A ReportViewer control is also used.
But the problem that I am now facing is that it is rather slow to show a report since we are using the "winformhost" control and PDF format as well.
My question is that How can I increase the performance if I am using this logic of generating and showing the report as PDF? If it is not possible, is there any other way in which I can save the report and re-load it whenever I want, which increases the process of report showing?
Thanks in advance,
Anish

In my opinion, you can increase your performance by separating concerns. By this I mean, it's better to generate the data set for the report from your custom class rather than directly from DB.
For instance if I want my report to show : the order year- the total number of orders - customer. I will create a class like
class CustomerStatistics
{
public int OrderYear {get;set;}
public int OrderQty {get;set;}
public string CustomerName {get;set;}
}
Once you have done that, you will be able to take advantages of multi-threading. For instance, I know that the calculation of OrderQty will take a while, so I put it in a separate thread.
Besides, you can boost your performance by creating stored-procedures for some heavy calculations in which you need to go through a large data set. If it is the case, you should use set operations like INTERSECT, EXCEPT,etc. to optimize the queries.
That was some of my thoughts.
Cheers.

Related

Salesforce Report - Field Not Populating Within Report

Hope you're well. I'm currently building out a report, but despite my best efforts so far, I can't get some information to populate within the report. It does not appear to me that salesforce is recognizing the field "Agent Incoming Connecting Time" within the object "AC_Agent_Performance". However, I can pull in some other fields within the same object into the Agent Performance report, so I'm not clear on what is not taking place in the field that I wish to see within the report. Here are some of the things that I've tried:
I have checked the access to the field. The first photo (Photo 1) Shows an example of a working object, the the second one shows an example of one that does not.
The API name seems to work, and is consistent with other fields within the object that work.
I have checked the page layout for the object (even though I don't think this is the issue), and I have mirrored other fields to the best of my knowledge that ARE populating within the report.
I reviewed the CTI flows to see if there was something missing in there on a lark, but there was nothing in there that would lead me to believe that this was the source of the problem.
I have tried setting up a new field in the object (formula), that references the field that I'm trying. to pull in, but that just returns a result of 'zero' for all values.
One thing that I have done that appears to be working, is I have set up a joined report, which uses both "AC Agent Performance" object and "AC Historical Queue Metrics" object in the report. The result that is returning appears to be accurate (please see the picture (picture number 3)). However, I don't think that this is the right way to go about this, and I don't want to do it this way. I want to use the report with one object rather than with two.
I know that permissions are the most likely issue, so I've taken a close look at these. Please let me know if there is something wrong with how I have the permissions configured. The First image depicts the 'Field Level Security'. The second image depicts the'field accessibility'. They are both like this, the whole way down:
Please note one other thing, which is that the last picture depicts a different field within the object displaying in the report.
Does anyone have any ideas on how I can proceed so the field "Agent Incoming Connecting Time" will display within the report?
Please also note, that these are objects that contain data that is populated from AWS' Amazon Connect.
This last photo, shows that the object does not have any information in it within the report.
If the field isn't populated there's not much you can do on the reporting side of things. You already tried "joined report". You should check why the integration doesn't populate it, maybe read integration documentation, contact the managed package's support...
The tables are connected with lookup or master-detail, right? In a pinch you could try making formula field on "AC Agent Performance" looking "up" and pulling the value from related AC historical queue metrics. If the relationship is other way around (performance -> down to related list -> metrics) you could try to make-do with a master detail and rollup summary field. I don't know this package, no idea if you can pull it off when you don't have full control over the fields.
If you can't really use the relationships and absolutely need to report on single table - you could capture intermediate results of the report to a helper table and then report on that. It's called "reporting snapshots". Or write some nightly (hourly?) batch that recalculates stuff and writes homemade "rollup" to these fields?

SSRS Report-outputting ''Blank'' rather than 0 for end user

First off, I am new and just learning about databases and reporting functionality.
Background: Let's say that I am an end user and I have requested a report from my IT department. I know that my company uses SQL server and they generate SSRS reports frequently.The SQL Server database is connected to a PIM(product data) application. Within the PIM there is a numeric field holding a quantity of bulbs. In the event that there is no bulb, that field is left blank. I do not have access to our database or the reporting parameters. I am at the mercy of someone else essentially.
When I receive my report, I see zeros '0' for every item that doesn't have a bulb. That is not the desired output, I want to see the field as a 'blank' just as it is in our PIM system. When I expressed this to the report writer, he informed me that this could not be done because that is a numeric field.
Does this seem correct? Please help!! I am fighting an uphill battle. I have a job to do and it relies heavily on IT support. I now have to go to my boss and tell her that this can't be done. I also understand that I can manually manipulate the report myself in excel but this is time consuming and if this can be handled before the report hits my inbox, that would be ideal. If there is a solution that someone out there can relay to me, I would be so appreciative-Thanks!!
If the report is definitely generated in SSRS, it is absolutely possible to set zero values as a blank field. To me, it sounds as if the person responsible just doesn't want to make the change because it's a fairly simple fix. It's as simple as opening the properties window of whatever field needs to be fixed. Since the field is numeric, you would want to format the textbox as a number anyways. The highlighted option displays where this change can be made. There's actually three default options for Show zero as: being blank, a dash(-), or displaying (None).

User Interface to analaze date of a conventional rdbms

Currently we create Jasper PDF Reports from a single simple database table for our customers. This has been achieved programmatically. It's static. If the user wishes to change the query, he/she creates a change request, which we cannot deliver before the end of the next sprint (SCRUM).
The tool/library should be straight forward (e.g. convention over configuration) and employable from within a JavaEE container. And, open source.
Is there a dynamic tool that allows or customers to create the simple queries/reports themselves without knowing SQL? Means, they should be able to see the table and then create a query from it, execute and print (we could use Jasper Reports for the last one).
E.g. Select only data from year 2014, aggregate them by customer group and select columns x,y and z.
All of these criterias and query structure may change though, thus not just the value like year 2014.
Questions:
1) Is there a tool that presents the data in some kind of SAP-cube or something similar where the user could select the structure and attributes?
2) Can that tool save template queries (queries that the user has invoked before)?
thanks
With BIRT you could use parameters in the report... for example have one report that shows the whole data set or data cube (or at least a bit of all of the fields). Then you could add JavaScript to the report (or do all of the presentation in JavaScript for that matter), that shows the parameters a user can select from. These parameter values can then either be sent to a new report or could update the existing report. Parameters can be put into database queries too.
If that was exposed in JavaScript on a web page you could save the parameter values to an array and store them in the browser or server.

Is it possible to list fields actually used from result sets in SSRS?

I have dozens of SSRS Reports and the corresponding stored procedures that I am slowly cleaning up and optimizing, I am finding a number of data sets that have extra fields that are not used in the actual report, they are usually the result of a SELECT * that is slowing down the SP end of things significantly in a few places.
I am wondering if there is a quicker way to see which fields from the datasets are used/unused to more efficiently clean up the stored procedures. It seems like clicking through to each <<expr>> and checking them off is a ridiculous way to go about this.
I'll tell you, I wish I knew a tool that simplifies this for you.
And I don't off the top of my head.
But for sure I know you can search the text of the rdl and find these details.
I do this often when troubleshooting problems with existing reports (or SSIS packages).
The .rdl files are human-readable xml.
You can open any one file in a text editor and search the text - even Visual Studio if you "Open File" rather than use the Report project.
Given that, of course you can write a routine in your preferred programming language that
finds the query or proc in the data source of the Report
runs it (as metadata only) to get all the columns
search for each one in the text of the rdl
you can be more specific if you use xml queries to limit
the search to more realistic targets like display box Data Sources
Sorry I don't have a more convenient answer like an existing tool.
If I remember, I may look for one because this is a big problem for "corporate coders" like us.
If I can't find one, maybe I'll write the script in .net and come back and post it :)
Yes you can ! Use the following steps
right click the rdl file and
click the View Code . This will be an XML format
CTR + F to get a search text box
Enter the name of any field in the text box.
Use the Forward Arrow icon to see the number of occurrence of the searched field name
If the text field is in the dataset and Tablixcell value, then it shows it's being used in the report
If the text field is only in the dataset and not any tablixcell value, then it's not being used in the report.

Dynamically set Crystal Report Viewer parameter default value

We are using the Crystal Report viewer (XI I believe but we can upgrade) with a VFP front end.
Is there some way to dynamically set the parameter default value at run time? For example, If the user is viewing an invoice and they try to run a report, I would like it to automatically default to the current invoice. As it stands right now, they have to type in the invoice number even though they already have the actual invoice already open.
If not, is there a better viewer available that we could use to accomplish this goal?
I currently use VFP with Crystal Reports in Accountmate SQL (AMSQL). AMSQL has its own blackbox code to do what you are asking so I can't give details on how it is done, but I do set parameters dynamicaly (e.g. invoice#) and Crystal generates a report based on the parameters sent.
I know you can accomplish this in your case by creating a Crystal Reports object in VFP, thereby exposing Crystal properties, events and methods to VFP. Craig Bernston has a good article on what you are looking for at: http://www.craigberntson.com/docs/integratingcr.pdf

Resources