Analytics

Last Week in the Forums: Maximum Columns for One Sheet in Excel Output, Can You Use More Than One Master Page For a Single Report Element

This blog series takes a look back at the past week in the forums, recalling how active they were and highlights some of the questions asked. The forums stayed pretty steady this week as far as amount of questions asked. Many community members are available offering solutions to questions. The following are a few questions that were asked last week.This question was about exporting to only 1 sheet in XLS. The person was having issues with their XLS output being split over multiple sheets and they wanted it to go to one only. They were having up to 365 columns. The answer to this was that the report had to be split over more than one sheet because Excel XLS file format only supports 255 columns, so this was not a BIRT issue.The next question I’ll cover is about using multiple master pages within one table. The question asker wanted to have the first couple pages of their table be in portrait layout and the rest of the pages to be in landscape. The answer was that this is currently not a feature of BIRT. A single element can only have one master page, so to split it like this, two tables would have to be used with filters to limit the correct data to each table.The last question I’ll cover this week is one about creating charts from the data in a list of CSV files. The issue was that the person had a “directory” of CSV files that they wanted to include in a list in their report and under each filename they wanted a couple charts for each file. So they wanted a table or list attached to the “directory” of flat files and in that table they wanted each row to access the data from the different flat file to create their charts. The solution to this was provided in an example in the devShare by Jason Weathersby.This is just a small sample of what went through the forums this past week. For more questions and answers that have been posted, check out the forums. As always, if you have a question, feel free to ask it, and if you see a question you know the answer to or have a similar experience to, feel free to post an answer or comment.

Read More

Last Week in the Forums: Hiding a Crosstab Cell, Showing the Average in a Chart

This blog series takes a look back at the past week in the forums, recalling how active they were and highlights some of the questions asked. The forums seemed to pick up a little last week in comparison to the week before. Many different members posted questions and there were several community members providing answers! Below is a few questions that were asked in the past week.One question was asked about hiding unwanted crosstab header cells. They didn’t need the labels from the column dimension of the crosstabs, but when they hid them, the crosstab cell remained. The solution was to set the advanced “display” property to “no display”. A full description of this solution can be seen in the thread or in the devShare.Another question was about showing an average line in a chart. The answer given for this was to create a secondary axis to display the average on, then create a second series for the chart with the same y-axis value as the first series, and then set the aggregate expression for the second series to “average”. An example showing the setup for this can be found in the forum thread.The last thread I’ll cover this week was one asking about conditional data alignment within a table. The solution to this is to set the style in the element’s onCreate script using the line, this.getStyle().textAlign = “position”;. The different options for “position” are “Right”, “Left”, and “Center”. This statement can be put inside a condition to align a row or column differently based on the value of a field. An example report showing this can also be found in the thread.This is just a small sample of what went through the forums this past week. For more questions and answers that have been posted, check out the forums. As always, if you have a question, feel free to ask it, and if you see a question you know the answer to or have a similar experience to, feel free to post an answer or comment. 

Read More

Last Week in the Forums: Running Sum in a Crosstab, Display Part of a String in a Data Field

This is the second week of a new series of blog posts recalling what happened in the forums in the past week. Last week was a relatively slow week in the forums, but there were still some good questions asked.One of these questions asked about doing a “running sum” function in a crosstab across the column dimensions. This is not a standard function within BIRT, so the computations had to be done manually. The solution was to delete the measure elements from within the crosstab and add text elements in their place that used persistent global variables named after the row dimension to keep a running total. The devShare solution for this can be found here.Another question was about only displaying a portion of a string in a data field when you don’t know the length of the part you want to split off, but you know the character that separates the sections you want. The solution to this was to use the indexOf() and lastIndexOf() functions to find the two ‘-‘ characters and grab everything that was in between with the substring() function.The last question I’ll cover from the forums last week is one that was asked about using a parameter to dynamically limit a dataSet. This question is asked by many new users as they make their first parameterized report. There are at least a couple different ways to do this. You can use the dataSet parameter (?) in the query and link it to a report parameter or you can just use a report parameter and add the “where” clause to your query in script. Both of these solutions are shown in an example that is attached in the thread. If you’re not using a query dataSet, you’d just use a dataSet filter that filters the dataSet based on the report parameter.Again, this is just a small sample of what went through the forums this past week. For more questions and answers that have been posted, check out the forums. As always, if you have a question, feel free to ask it, and if you see a question you know the answer to or have a similar experience to, feel free to post an answer or comment. 

Read More

Last Week in the Forums: Starting Day of Week for Charts, Using Multi Select Parameters

Many questions come through the forums each week. Some are new and some have been asked/answered before, so we’re starting a new weekly post to highlight a few posts as a reference for those who may have the same questions.This past week, a question was asked about making the start day of week be Monday in a chart. One solution that works is to create your own instance of the day of week in a computed column. Another solution was also posted that works if you have a SQL database. This solution can be seen in the thread at the link above.Another question is one that gets asked quite often. It’s about using multi-select parameters in your dataSet query. The reason that you can’t tie a multi-select parameter directly in with a dataSet parameter is because the multi-select parameter returns an array and not a comma separated string. You have to handle this by splitting the array into a comma separated string and adding the condition to your where clause in your query in script. Several examples of ways to do this can be found in the devShare.One last question I’ll highlight for the week is a question about the most efficient place for a filter. The answer to which is to place the filter as early as you can. The earlier you place the filter in the process, the less data is processed in your report. So, if you don’t need the data in your dataSet, go ahead and place the filter there.This is just a small sample of what went through the forums this past week. For more questions and answers that have been posted, check out the forums. As always, if you have a question, feel free to ask it, and if you see a question you know the answer to or have a similar experience to, feel free to post an answer or comment. 

Read More

Run Your BIRT Reports During Off-Peak Hours

BIRT does not impose any restrictions on the data size. This could mean BIRT visualizations based on large data sets could be running for a long time using up your computing resources during the busy hours of the day. The other requirement I often come across is to run reports on a recurring basis with the latest data and notify a set of users or even email them a copy of the report output in the desired format(e.g. a weekly sales report). Combine the above end user requirements with the real world business need to trigger the report generation based on certain system events or other business processes along with the ability to monitor/manage the scheduled jobs and you could end up with a fairly complex scheduling system. Fortunately iServer (Express) addresses these complex requirements with a simple user interface.Information Console is the end-user interface to iServer(Express). It offers a very simple yet rich web interface that meets majority of the end-user needs around calendar based scheduling, and also lets them pre-define any input parameters to the report if any along with the output location, format and notify and share with other users.Management Console is another web interface that offers a more granular control over scheduling aspects (calendar and event based) in iServer (Express).It allows for a more advanced calendar schedule and event settings. If you create a job that uses an event based criteria and a calendar schedule, the job runs when both conditions occur. The systems accept three kinds of events: File Event – Use the file/folder presence as a condition for running a job. Job Event – Specify completion of a job as a criterion for running a scheduled job. Custom Event – With custom event you can specify a web service that iServer(Express) monitors and run the jobs when the web service returns a signal to the web service. The following wiki article discusses Custom Event web service in further detail: http://www.birt-exch…e_-_Report_Jobs You can obtain information about scheduled jobs or completed jobs using Management Console.iServer(Express) groups job processing into five phases:  Scheduled Waiting for Event Pending Running Completed Based on the privileges, individual users and administrators can manage jobs at each and every phase.Download your own evaluation copy of iServer (Express) and try these features yourself:http://www.birt-exch…press/features/ 

Read More

Creating a BIRT Report as a Calendar View

I encountered a forum qustion recently asking about creating a calendar view in a BIRT report to show a job number within a calendar view on the date that the job was due to be completed. I’m not sure why, but I hadn’t really thought of this approach to displaying data before. However, I was easily able to create the report using a table, an embedded 7 column grid, a 1 detail row table in each grid cell for the days of the week, a sub table or list within each day to display the jobs, and some filtering. I recreated this setup with the sample database to display a calendar view of orders placed. The final setup of the report can be seen below.The outer table with the year, month, and date fields is tied to a scripted dataSet that uses two user entered parameters, startDate and endDate, to create every date within the given range. The table is then grouped by year, month, and then week with those groups sorted to display in the correct order. A 7 column grid is placed in the “week” group header. A 1 column / 1 detail row table is placed in each cell of the grid to display the date. Each table is filtered to only show the date for that day of week. The filter for Sunday can be seen below.A second dataSet is used to bring in the orders. A table or list is put into the detail row of each “date table” and tied to the orders dataSet. In the devShare entry, each of these tables is then filtered to only show the orders from each date. However, when the date range is large, this becomes very slow. So, since posting the example in the devShare, I have changed the design to use a dataSet parameter on the orders dataSet to only return orders from a certain date. Then, on the order tables, I set the dataSet parameter binding to set the value of this parameter to the current date in the calendar as seen below. (The devShare entry will be updated in the near future.)Finally, to show a more “real-world” use for this type of display, I created a hyperlink on the order data element to link to a detail report for that given order. The final view of the report and detail report can be seen below.The following link is the devShare entry for this example. The reports were designed in BIRT 2.5.2.http://developer.act…dar-view-report 

Read More

Custom/Dynamic Page Breaking in BIRT

BIRT’s standard options for page breaking is to set a page break interval on a table, set a before/after page break on groups, and to set before after page breaks on report items. But what if you want to set a page break after every 2, 3, etc. groups? One way is to create an interval group surrounding your group you’d like 2 or 3 of and page break after it. Say you choose this approach and your 2nd or 3rd group goes a couple lines over your page size. You wrap the last group to the next page for a couple lines and then the interval group page brake happens and you waste a good portion of a page.Another way to handle this is to use script to force page breaks after every 2 groups by incrementing a variable keeping track of the groups per page. You can also keep track of the items in the group using an aggregation. If the rows in the 2 groups you had planned to put on one page go over the predetermined amount of rows a page can hold, you can manually force a page break between the two groups in the group’s onCreate method with the code this.getStyle().pageBreakBefore = “always”. If they will both fit, you’d set a page break after the 2nd group with the code, this.getStyle().pageBreakAfter = “always”. In your onPageBreak script for your group, you’d reset your count variables for the groups and for the rows. This would mean that if after you force the page break, your group/row counts would start over on the next page.Another thing you could do would be to only keep track of the rows in a group. If 3 groups fit on one page, you wouldn’t have to force a page break until before the 4th group. Then, if only two fit on the next page, your manual row count would let you know and you’d be able to page break before the 6th group, giving you a manual interval and no splitting of groups between pages, unless a single group spanned more than one page.Also, when using the standard “page break interval” feature on a table, group headers are not counted in the row count for a page, just the detail rows. If you kept a manual count of rows, including the group header rows, you could use the pageBreakBefore script above in your row’s onCreate script to manually page break when you’ve reached your maximum lines that can fit on a page.A simple example showing how to do the manual interval group of groups can be found in the devShare at the link below.http://www.birt-exchange.org/devshare/designing-birt-reports/1186-manual-group-page-breaks/#description

Read More

BIRT Wrapper for JSF Applications

For those of you that have been trying to integrate BIRT into JavaServer Faces (JSF) applications, the jsf4birt component library should make things easier. This library was created by Exadel and supports the rendering of BIRT-based reports on pages wthin JSF web applications.There are two components; a birtWrapper, and actuateWrapper. The birtWrapper component displays BIRT reports created in the Eclipse BIRT Report Designer. This component uses the BIRT runtime API and calls the appropriate part of the API to get generated HTML code to put on the page. Everything is done on the server side following the usual JSF lifecycle processing.The actuateWrapper component loads reports from an installed Actuate server. The component uses the Actuate Javascript API to load and run BIRT reports and allows the integration of the AJAX-based BIRT Interactive Viewer.Max Katz and I demonstrated the jsf4birt component library in an online webinar. Watch the webinar recording hereInstructions for installing and testing the jsf4birt component can be found here 

Read More

Sorting a Crosstab by a Field Not Displayed in the Crosstab

Say you want to create a crosstab showing payments or orders by year for each customer. That is easy enough. You create a dataCube with Customer and year as groups/dimensions and their payment/order totals as you measure. In your dataSet, you also have a credit limit for each customer. You would like to sort by this so that your “typically” bigger customers are at the top of your list.If you went to the sorting tab in the property editor for the crosstab with things setup as described above, you wouldn”t find the option to sort by credit limit available because you aren’t displaying it in your crosstab. You don’t want to put this value in your crosstab though, so you’re stuck, right? Wrong. There is a feature in BIRT that is somewhat hidden if you don’t know the right place to look that will solve this.If you open your dataCube and double click on the group/dimension that you’d like to sort, a group level editor will pop up:As you can see in the above image, there is an attribute section for the grouping. If you click where it says “Create New Attribute”, you can select your credit limit field and it will then be listed under the attributes section as you can see done above. Now when you go to your sorting tab for your crosstab and click on “Add” and select the group you added the attribute to, if you click on the function button next to sort key, you’ll be able to see and select the attribute as your sort key.The new sort key will be in the form of dimension[“groupName”][“dimensionName”][“attributeName”]. The resulting crosstab will now not be sorted alphabetically by customername or by the summary field, it’ll be sorted by the credit limit value from your dataSet. The following link is to devShare entry on this with this example included. http://www.birt-exchange.org/devshare/designing-birt-reports/1172-sorting-a-crosstab-by-a-field-not-in-the-crosstab/#description

Read More

Check out the BIRT Mashboard

One of the nice benefits of the BIRT Exchange Marketplace is that it is a great showcase for some really cool things you can do with BIRT. The BIRT Mashboard is an excellent example of how BIRT can be leveraged in rich information applications to create world class solutions. This fully featured app is designed for managers who need to make decisions based on varied cuts of business data. Specifically, the BIRT Mashboard allows executives to create their own custom dashboards and data visualizations with interactive drill-down capabilities.The BIRT Mashboard starts with a blank canvas that can be populated with pre-defined controls called portlets to construct a page of interactive BIRT charts, tables, graphs and other data elements that describe your (and others’) data. No programming knowledge is required to make the page – just drag and drop portlets from a palette to the canvas and it just works. Once these portlets are placed on the canvas, they adapt dynamically to each other based on the user’s actions.As an example, let’s say that three portlets exist on your canvas, the first is a pie chart that divides your company’s total sales by region, the second is a table that lists total sales by product line and a third is a map that marks each of your sales offices worldwide. Since the portlets communicate, you can click on one of the regions in the pie chart and the table next to it changes from showing a global representation of product line sales to just the data for that region. The map also shifts from a world view to show a regional view – plus, in this example, adds pins for each customer located there. Clicking on one of those pins then pops up a list of your products purchased by that customer as well as a contact name and phone number.The BIRT Mashboard comes with some predefined portlets and more can be created by developers and analysts. These portlets are able to pull data from many different sources (internal and external) and inter-portlet communication is managed by simple javascripting. Once created, these portlets can be reused across many custom dashboards and reports, and security and scalability is ensured by Actuate’s backend iServer technology.Note that you can present content built in BIRT and served by the iServer right alongside any other web accessible content too. The BIRT Mashboard allows you full control of your own application experience. Whether that content is built inside BIRT or not, the BIRT Mashboard brings it all together in a cohesive easy-to-use interface.I encourage you to take a look at the Overview video (under the BIRT Mashboard demo tab) and then download the app and try it out. You can find 6 separate ten minute how-to videos (also under the demo tab) to help you get started.Don’t have an iServer? No problem, you can get a free trial version of iServer Express from BIRT Exchange or even better, choose the 1 Click Install option for BIRT Mashboard and open a free account on the new BIRT onDemand service which will set up and pre-configure everything you need at no cost to evaluate the BIRT Mashboard on our servers.And please don’t forget to let us know what you think of the BIRT Mashboard or any other apps you evaluate on theBIRT Exchange Marketplace by adding your comments under their corresponding review tabs. 

Read More

Extending BIRT Just Got A Little Easier

One of the strongest features of BIRT is the ability to extend BIRT in order to support very specific requirements. These BIRT extension points support building your own custom report items, charts, output types, functions, and even custom editor pages. There is a nice article on building your own extension here if you are interested.This week in the BIRT Exchange Marketplace, a couple of items were submitted that will make building your own extensions quite a bit easier. These free libraries were jointly created by Innovent Solutions and Blackboard Inc. and serve as example BIRT extensions as well as best practices for anyone developing their own BIRT extensions.The examples I downloaded and tested were:* BIRT Controls Library – This library uses the ReportItem extension point and includes two example controls, the DotBar control and a RotatedText control. This example was easy to install and use by following the directions with the download at http://www.birt-exchange.com/be/marketplace/app-showcase/?app=22. There are screenshots of these controls and a video showing them in use at the same link.* BIRT Functions Library – This library uses the Aggregate and Script Function extension points and includes examples that allow you to create your own summarized total functions as well as how to make custom Javascript functions available to BIRT scripting. Instructions to install this library, plus screenshots can be found at http://www.birt-exchange.com/be/marketplace/app-showcase/?app=24 

Read More