<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Phil Simon&#039;s Virtual Soapbox &#187; Reporting</title>
	<atom:link href="http://www.philsimonsystems.com/category/content/articles/reporting/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.philsimonsystems.com</link>
	<description>Musings on technology, management, books, writing, and whatever else piques my interest.</description>
	<lastBuildDate>Tue, 07 Feb 2012 15:27:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Suppressing values to minimize the number of tables in a Crystal Report</title>
		<link>http://www.philsimonsystems.com/content/articles/reporting/suppressing-values-crystal/</link>
		<comments>http://www.philsimonsystems.com/content/articles/reporting/suppressing-values-crystal/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 07:53:56 +0000</pubDate>
		<dc:creator>philsimon</dc:creator>
				<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Crystal]]></category>

		<guid isPermaLink="false">http://s299421762.onlinehome.us/?p=871</guid>
		<description><![CDATA[A simple rule of reporting is that adding tables and views increases the amount of time for the report to run. Many first-time report writers believe that you have to add multiple instances of a table in order to derive different totals, such as month-to-date, year-to-date, etc. You don't.]]></description>
			<content:encoded><![CDATA[<p>A simple rule of reporting is that adding tables and views increases the amount of time for the report to run. Many first-time report writers believe that you have to add multiple instances of a table in order to derive different totals, such as month-to-date, year-to-date, etc.</p>
<p>You don&#8217;t.</p>
<p>Check out the .pdf below to see an example of how to maximize the performance of a report with a single instance of a transactional table.</p>
<ul>
<li><a title="Suppressing Values" href="http://www.scribd.com/doc/21789727/Suppressing-Values-in-Crystal-Reports" target="_self">Suppressing values to minimize the number of tables in a Crystal Report</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.philsimonsystems.com/content/articles/reporting/suppressing-values-crystal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One Report, Multiple Report Output Options in Crystal Reports</title>
		<link>http://www.philsimonsystems.com/content/articles/reporting/suppressing-values-in-crystal-reports/</link>
		<comments>http://www.philsimonsystems.com/content/articles/reporting/suppressing-values-in-crystal-reports/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 07:33:49 +0000</pubDate>
		<dc:creator>philsimon</dc:creator>
				<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Crystal]]></category>

		<guid isPermaLink="false">http://s299421762.onlinehome.us/?p=859</guid>
		<description><![CDATA[This tip shows you how to create one Crystal Report with multiple display options. ]]></description>
			<content:encoded><![CDATA[<p>One of the disadvantages of using groupings in a single Crystal report is that the export into Excel makes the data “unsortable.” However, there is a neat way around this. You can use the suppressing section functionality to, in one report, prompt a user if they want to export it cleanly to Excel (suppressing all of the groupings). This is great if end-users want one report with different output options. The one downside is that you couldn&#8217;t schedule this in many tools because report needs the prompt &#8211; export to Excel yes/no.</p>
<p>This tip addresses of one of the biggest challenges that consultants have with clients:</p>
<p style="padding-left: 30px;"><strong>Trying to minimize the number of custom reports required by the organization. </strong></p>
<p>Report-creep may not be a widely-used term but I have seen people request two different reports for essentially the same information. The PDF below walks you through how to use one report in multiple ways.</p>
<ul>
<li><a title="One Report, Multiple Output Options" href="http://www.scribd.com/doc/21789940/Crystal-Reports-One-Report-Multiple-Output-Options" target="_self">One Report, Multiple Report Output Options</a></li>
</ul>
<p><a title="Suppressing Values" href="http://www.scribd.com/doc/21789727" target="_self"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.philsimonsystems.com/content/articles/reporting/suppressing-values-in-crystal-reports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crystal Reporting: A Case Study</title>
		<link>http://www.philsimonsystems.com/content/articles/reporting/crystal-reporting-a-case-study/</link>
		<comments>http://www.philsimonsystems.com/content/articles/reporting/crystal-reporting-a-case-study/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 08:24:21 +0000</pubDate>
		<dc:creator>philsimon</dc:creator>
				<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Crystal]]></category>

		<guid isPermaLink="false">http://s299421762.onlinehome.us/?p=887</guid>
		<description><![CDATA[A client of mine recently had an interesting reporting request: Can you build a report detailing any changes in employee status and the personnel actions (excluding rehires and new hires) associated with them? Read this Crystal case study to see how the order of joins on tables is essential.]]></description>
			<content:encoded><![CDATA[<p>A <span>client of mine recently had an interesting reporting request: Does Lawson have a standard report detailing any changes in employee status and the personnel actions (excluding rehires and new hires) associated with them?</span></p>
<div style="margin: 0pt;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; padding-left: 30px;"><span style="font-size: x-medium;"><strong>Note that this case study applies to the Lawson application but just as easily could be applied to any custom report question.</strong><br />
</span></div>
<div style="margin: 0pt;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">The answer was no. You know the next question: Can you write me a report detailing any changes in employee status and the personnel actions (excluding rehires and new hires) associated with them? And, while we’re at it, can that report have a date range? And can you exclude the terminated status?</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">That was my task, using Crystal Reports XI and LRS. Now, normally this wouldn’t be so hard. For those of you familiar with the Lawson tables, you know that status (if set to track history on HR10) is located on the HRHISTORY table (FLD_NBR = 20). This report request, however, had a little wrinkle that made it a bit more challenging than normal: some personnel actions may have had status changed on the employee and some may not. In other words, one couldn’t always say that the POSITION personnel action always had status changed.</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">There was one more little wrinkle: all employees were loaded into Lawson via the HR511, not via PA52.4. In other words, employees’ initial HRHISTORY status value was not tied to a personnel action. In technical terms, you couldn’t just join EMPLOYEE to PERSACTHST to HRHISTORY to get the desired results. Even as outer joins, the report would not work. I would have to get creative.</div>
<div style="margin: 12pt 0pt 3pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><strong><em>First Things First: Group by Employee</em></strong></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">I began building my report with the EMPLOYEE table. To make this report work, I first need to group this by employee. This step is necessary to enforce the date range (as we will see later), as employees may have had status date changes over the last five years but an end-user may only want to see them from the last pay period. </span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">Using the group expert, we can accomplish this:</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal01.jpg" alt="" width="416" height="163" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">Note that this report also has a department group. </span></div>
<p style="font-family: arial,geneva;"><span style="font-size: x-medium;"><strong><em>Joining Tables</em></strong></span></p>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">The remaining tables for this report are: PERSACTHST, HRHISTORY, and DEPTCODE.</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">Note that I did not build this report using the Lawson OLEDB Connector. HRHISTORY is a very, very large transactional table with hundreds of thousands of records (and growing). I used a SQL OLEDB connection which does not enforce Lawson security. This was not an issue for the client.</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">I then joined the tables as follows:</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal02.jpg" alt="" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><strong>The order of the joins is imperative here. </strong>By going from EMPLOYEE to HRHISTORY (with FLD_NBR =20) in the Select Expert as an inner join, I am only pulling employees who have had status changes. The left outer join from HRHISTORY to PERSACTHST, in English, means that the report will retrieve status change values whether they were part of a personnel action or not.</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">Now that I have the tables joined properly, I can continue building my report.</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">The counterpart to the employee group is a “maximum effective date” calculation:</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal03.jpg" alt="" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">I then put the maxdate formula in the Employee group header:</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal04.jpg" alt="" /></span></div>
<p style="font-family: arial,geneva;"><span style="font-size: x-medium;"><em><strong>Filtering Data with the Select Expert</strong></em></span></p>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">I restricted the dates by adding a parameter and referencing that parameter in the select expert:</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal05.jpg" alt="" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">I tied this parameter to my maxdate calculation so this report can be run to only pull employees who have had status changes in the past X weeks.</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal06.jpg" alt="" /></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">Since I am only interested in changes in status, I added a count of BEG_DATE in the employee footer.</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal07.jpg" alt="" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">I then set that count greater than 1 in the select expert. Remember, I don’t want to see employees with only one value in HRHISTORY for status; they couldn’t have had a change! This is the case because history was loaded via HR511 (Lawson&#8217;s employee conversion program.)</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal08.jpg" alt="" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">I was only interested in three cases (LEAVE personnel action, POSITION personnel action, and “no” personnel action for history changes). The client didn’t want terminated statuses include or REHIRE and HIRE personnel actions. To accomplish this, I had to use a slightly involved “OR” statement in the Select Expert:</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal09.jpg" alt="" /></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">(EMPLOYEE.EMP_STATUS} in ["01", "02", "03", "04", "05","06"]<br />
AND {HRHISTORY.FLD_NBR} = 20<br />
AND {HRHISTORY.A_VALUE} &lt;&gt; &#8220;08&#8243;<br />
AND (ISNULL ({PERSACTHST.ACTION_CODE}) OR {PERSACTHST.ACTION_CODE} IN ["POSITION", "LEAVE"]))</span></div>
<div style="margin: 12pt 0pt 3pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><strong><em>Results</em></strong></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;">Running the report gives me the following prompt:</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal10.jpg" alt="" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;">and the following results:</div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"> <img src="http://images.lawsonguru.com/articles/crystal/simon/case_study/crystal11.jpg" alt="" /></span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><span style="font-size: x-medium;"><br />
</span></div>
<div style="margin: 0pt; font-family: arial,geneva;"><em><strong>Voila!</strong></em></div>
]]></content:encoded>
			<wfw:commentRss>http://www.philsimonsystems.com/content/articles/reporting/crystal-reporting-a-case-study/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating Commands in Crystal Reports via Microsoft Excel</title>
		<link>http://www.philsimonsystems.com/content/articles/reporting/crystal-command/</link>
		<comments>http://www.philsimonsystems.com/content/articles/reporting/crystal-command/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 12:43:02 +0000</pubDate>
		<dc:creator>philsimon</dc:creator>
				<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Crystal]]></category>

		<guid isPermaLink="false">http://www.philsimonsystems.com/?p=2256</guid>
		<description><![CDATA[Many times, transactional tables in databases are big. I mean, huge. I have seen tables with 35,000,000 records. Imagine writing a report with four or more tables and the data resides in monstrous tables. In this tip, I show how you can cheat. There's no other word for it.]]></description>
			<content:encoded><![CDATA[<p>Many times, transactional tables in databases are big. I mean, huge. I have seen tables with 35,000,000 records. Imagine writing a report with four or more tables and the data resides in monstrous tables.</p>
<p>Let&#8217;s be clear here. There&#8217;s only so much that you can do when you have really big data sets. By the same token, however, often you can reduce the run time for large reports by using commands in Crystal Reports.</p>
<p>In the following PDF, see how I use Microsoft Excel to create a command in Crystal. This ultimately saves a great deal of time when the report runs.</p>
<p><a href="http://philsimonsystems.com/wp-content/uploads/2010/01/SQL_commands_shortcut.pdf"></a><a href="http://philsimonsystems.com/wp-content/uploads/2008/01/sql_commands.pdf">Using SQL-Based Commands in Crystal Reports</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.philsimonsystems.com/content/articles/reporting/crystal-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

