<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Square Peg, Round Hole</title><link>http://weblogs.asp.net:80/brendansullivan/</link><description>Making technology kinda work.</description><item><title>Advanced Record-Level Business Intelligence with Inner Queries</title><link>http://weblogs.asp.net:80/brendansullivan/advanced-record-level-business-intelligence-with-inner-queries</link><description>While business intelligence is generally applied at an aggregate level to large data sets, it's often useful to provide a more streamlined insight into an individual records or to be able to sort and rank them. For instance, a salesperson looking at a specific customer could benefit from basic stats on that account. A marketer trying to define an ideal customer could pull the top entries and look for insights or patterns. Inner queries let you do sophisticated analysis without the overhead of traditional BI or OLAP technologies like Analysis Services.

&lt;p&gt;&lt;strong&gt;Example - Order History Constancy&lt;/strong&gt;&lt;/p&gt;

Let's assume that management has realized that the best thing for our business is to have customers ordering every month. We'll need to identify and rank customers based on how consistently they buy and when their last purchase was so sales &amp;amp; marketing can respond accordingly. Our current application may not be able to provide this and adding an OLAP server like SSAS may be overkill for our needs. Luckily, SQL Server provides the ability to do relatively sophisticated analytics via inner queries. Here's the kind of output we'd like to see.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2009/03/image_2.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" src="http://blog.izenda.com/wp/wp-content/uploads/2009/03/image_2.png" border="0" alt="image" width="468" height="172" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;Creating the Queries&lt;/strong&gt;&lt;/p&gt;

Before you create a view, you need to create the SQL query that does the calculations. Here we are calculating the total number of orders as well as the number of months since the last order. These fields might be very useful to sort by but may not be available in the app. This approach provides a very streamlined and high performance method of delivering actionable information without radically changing the application. It's also works very well with &lt;a href="http://www.izenda.com"&gt;self-service reporting tools&lt;/a&gt; like Izenda.
&lt;pre&gt;&lt;code&gt;SELECT CustomerID,CompanyName,
(
SELECT COUNT(OrderID) FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID
) As Orders,
DATEDIFF(mm,
(
SELECT Max(OrderDate) FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID)
,getdate()
) AS MonthsSinceLastOrder
FROM Customers&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Creating Views&lt;/strong&gt;&lt;/p&gt;

To turn this or any query into a view, just put &lt;span style="color: #0000ff;"&gt;CREATE VIEW&lt;/span&gt; AS before it. If you want to change it use the statement &lt;span style="color: #0000ff;"&gt;ALTER VIEW AS&lt;/span&gt;.

&lt;p&gt;&lt;strong&gt;Creating Computed Columns&lt;/strong&gt;&lt;/p&gt;

If you'd prefer not to create a view, inner queries can also be applied by using computed columns. Place you SQL in the (Formula) field of the Computed Column Specification or check out this article &lt;a href="http://www.ucertify.com/article/how-to-create-a-computed-column-using-sql-server-management-studio.html"&gt;here&lt;/a&gt;.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2009/03/image_4.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" src="http://blog.izenda.com/wp/wp-content/uploads/2009/03/image_4.png" border="0" alt="image" width="521" height="253" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;strong&gt;Advanced Scoring and Ranking&lt;/strong&gt;&lt;/p&gt;

One of the best uses for this approach is to score leads based on multiple fields. For instance, you may be in a business where customers that don't order every month require more persistent follow up. You could devise a simple formula that shows the continuity of an account. If they ordered every month since their first order, they would be at 100 indicating that they have been ordering 100% of the time. Here's the query that would calculate that. It uses a few SQL tricks to make this happen. We are extracting the count of unique months and then dividing by the months since initial order. This query will give you the following information which can be used to help sales and marketing now where to focus. You could sort by this percentage to know where to start calling or to find patterns describing your best customers.
&lt;ul&gt;
	&lt;li&gt;Number of orders&lt;/li&gt;
	&lt;li&gt;First Order Date&lt;/li&gt;
	&lt;li&gt;Last Order Date&lt;/li&gt;
	&lt;li&gt;Percentage of months order was placed since last order.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;SELECT CustomerID,
(SELECT COUNT(OrderID) FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID) As Orders,
(SELECT Max(OrderDate) FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID) AS LastOrder,
(SELECT Min(OrderDate) FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID) AS FirstOrder,
DATEDIFF(mm,(SELECT Min(OrderDate) FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID),getdate()) AS MonthsSinceFirstOrder,
100*(SELECT COUNT(DISTINCT 100*DATEPART(yy,OrderDate) + DATEPART(mm,OrderDate))
FROM Orders WHERE Orders.CustomerID = Customers.CustomerID) /
DATEDIFF(mm,(SELECT Min(OrderDate) FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID),getdate()) As OrderPercent
FROM Customers&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Thu, 16 Dec 2010 15:07:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/advanced-record-level-business-intelligence-with-inner-queries</guid><category>.NET</category><category>BI</category><category>Reporting</category><category>SQL</category></item><item><title>Izenda Reports 6.3 Top 10 Features </title><link>http://weblogs.asp.net:80/brendansullivan/izenda-reports-6-3-top-10-features</link><description>&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/US-Map-Add-On.png"&gt;&lt;/a&gt;&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Streamlined-Pie-Charts1.png"&gt;&lt;/a&gt;&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Streamlined-Pie-Charts-2.png"&gt;&lt;/a&gt;&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Field-Arithmetic-on-Dates.png"&gt;&lt;/a&gt;Izenda 6.3 Top 10 New Features and Capabilities
&lt;h2&gt;1. Izenda Maps Add-On&lt;/h2&gt;
The Izenda Maps add-on allows rapid visualization of geographic or geo-spacial data.  It is fully integrated with the the rest of Izenda report package and adds a Maps tab which allows users to add interactive maps to their reports. Contact your representative or sales@izenda.com for limited time discounts.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/US-Map-Add-On1.png"&gt;&lt;img class="aligncenter size-full wp-image-434" title="US Map- Add On" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/US-Map-Add-On1.png" alt="" width="690" height="399" /&gt;&lt;/a&gt;

Izenda Maps even has rich drill-down capabilities that allow you to dive deeper with a simple hover (also requires dashboards).

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/US-Map-Add-On-Drill-Down.png"&gt;&lt;img class="aligncenter size-full wp-image-435" title="US Map- Add On-Drill Down" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/US-Map-Add-On-Drill-Down.png" alt="" width="724" height="416" /&gt;&lt;/a&gt;
&lt;h2&gt;2. Streamlined Pie Charts with "Other" Slices&lt;/h2&gt;
The advanced properties of the Pie Chart now allows you to combine the smaller slices into a single "Other" slice.
This reduces the visual complexity without throwing off the scale of the chart. Compare the difference below.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Streamlined-Pie-Charts-21.png"&gt;&lt;img class="aligncenter size-full wp-image-440" title="Streamlined Pie Charts 2" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Streamlined-Pie-Charts-21.png" alt="" width="482" height="264" /&gt;&lt;/a&gt;&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Streamlined-Pie-Charts2.png"&gt;&lt;img class="aligncenter size-full wp-image-439" title="Streamlined Pie Charts" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Streamlined-Pie-Charts2.png" alt="" width="516" height="264" /&gt;&lt;/a&gt;&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Streamlined-Pie-Charts.png"&gt;&lt;/a&gt;
&lt;h2&gt;3. Combined Bar + Line Charts&lt;/h2&gt;
The Bar chart now allows dual visualization of multiple metrics simultaneously by adding a line for secondary data.

Enabled via &lt;strong&gt;&lt;span style="color: #000080;"&gt;AdHocSettings.&lt;/span&gt;AllowLineOnBar = &lt;/strong&gt;&lt;strong&gt;&lt;span style="color: #0000ff;"&gt;true;&lt;/span&gt;&lt;/strong&gt;

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Combined-Bar-Line-Charts.png"&gt;&lt;img class="aligncenter size-full wp-image-441" title="Combined Bar-Line Charts" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Combined-Bar-Line-Charts.png" alt="" width="629" height="289" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;h2&gt;4. Stacked Bar Charts&lt;/h2&gt;
The stacked bar chart lets you see a breakdown of a measure based on categorical data.  It is enabled with the following code.

&lt;strong&gt; &lt;/strong&gt;&lt;strong&gt;&lt;span style="color: #000080;"&gt;AdHocSettings&lt;/span&gt;.AllowStackedBarChart = &lt;/strong&gt;&lt;strong&gt;&lt;span style="color: #0000ff;"&gt;true;&lt;/span&gt;&lt;/strong&gt;

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Stacked-Bar-Charts.png"&gt;&lt;img class="aligncenter size-full wp-image-442" title="Stacked Bar Charts" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Stacked-Bar-Charts.png" alt="" width="641" height="292" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;
&lt;h2&gt;5. Self-Joining Data Sources&lt;/h2&gt;
The self-join features allows for parent-child relationships to be accessed from the Data Sources tab.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Self-Joining-Data-Sources.png"&gt;&lt;img class="aligncenter size-full wp-image-443" title="Self Joining Data Sources" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Self-Joining-Data-Sources.png" alt="" width="878" height="70" /&gt;&lt;/a&gt;

The same table can be used as a secondary child table within the Report Designer.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Self-Joining-Data-Sources-2.png"&gt;&lt;img class="aligncenter size-full wp-image-444" title="Self Joining Data Sources 2" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Self-Joining-Data-Sources-2.png" alt="" width="374" height="232" /&gt;&lt;/a&gt;
&lt;h2&gt;6. Report Design From Dashboard View&lt;/h2&gt;
Dashboards now sport both view and design icons to allow quick access to both.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Dashboard-View.png"&gt;&lt;img class="aligncenter size-full wp-image-445" title="Dashboard View" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Dashboard-View.png" alt="" width="347" height="119" /&gt;&lt;/a&gt;
&lt;h2&gt;7. Field Arithmetic on Dates&lt;/h2&gt;
Differences between dates can now be used as measures with the arithmetic feature.

&lt;a href="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Field-Arithmetic-on-Dates1.png"&gt;&lt;img class="aligncenter size-full wp-image-447" title="Field Arithmetic on Dates" src="http://blog.izenda.com/wp/wp-content/uploads/2010/12/Field-Arithmetic-on-Dates1.png" alt="" width="702" height="73" /&gt;&lt;/a&gt;
&lt;h2&gt;8. Simplified Multi-Tenancy&lt;/h2&gt;
Integrating with multi-tenant systems is now easier than ever. The following APIs have been added to facilitate common scenarios.

&lt;strong&gt;&lt;span style="color: #000080;"&gt;AdHocSettings&lt;/span&gt;.CurrentUserTenantId &lt;span style="color: #ff0000;"&gt;= &lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;value;&lt;/strong&gt;
&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #000080;"&gt;AdHocSettings&lt;/span&gt;.SchedulerTenantID &lt;span style="color: #ff0000;"&gt;= &lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;value;&lt;/strong&gt;
&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #000080;"&gt;AdHocSettings&lt;/span&gt;.SchedulerTenantField &lt;span style="color: #ff0000;"&gt;= &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;"AccountID";&lt;/span&gt;&lt;/strong&gt;
&lt;h2&gt;9. Support For SQL 2008 R2 and SQL Azure&lt;/h2&gt;
Izenda now supports the latest version of Microsoft's database as well as the SQL Azure service.
&lt;h2&gt;10. Enhanced Performance and Compatibility for Stored Procedures&lt;/h2&gt;
Izenda now supports more stored procedures than ever and runs them faster too.</description><pubDate>Thu, 16 Dec 2010 14:54:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/izenda-reports-6-3-top-10-features</guid><category>.NET</category><category>ASP.NET</category><category>BI</category><category>general software development</category><category>Reporting</category><category>SQL Server</category></item><item><title>High Performance SQL Views Using WITH(NOLOCK)</title><link>http://weblogs.asp.net:80/brendansullivan/high-performance-sql-views-using-with-nolock</link><description>Every now and then you find a simple way to make everything much faster.  We often find customers creating data warehouses or OLAP cubes even though they have a relatively small amount of data (a few gigs) compared to their server memory.  If you have more server memory than the size of your database or working set, nearly any aggregate query should run in a second or less.  In some situations there may be high traffic on from the transactional application and SQL server may wait for several other queries to run before giving you your results. 
&lt;br&gt;&lt;br&gt;
The purpose of this is make sure you don’t get two versions of the truth.  In an ATM system, you want to give the bank balance after the withdrawal, not before or you may get a very unhappy customer.  So by default databases are rightly very conservative about this kind of thing.
&lt;br&gt;&lt;br&gt;
Unfortunately this split-second precision comes at a cost.  The performance of the query may not be acceptable by today’s standards because the database has to maintain locks on the server.  Fortunately, SQL Server gives you a simple way to ask for the current version of the data without the pending transactions.  To better facilitate reporting, you can create a view that includes these directives.
&lt;br&gt;&lt;br&gt;&lt;br&gt;
CREATE VIEW CategoriesAndProducts AS &lt;br&gt;
SELECT * &lt;br&gt;
FROM dbo.Categories WITH(NOLOCK) &lt;br&gt;
INNER JOIN dbo.Products WITH(NOLOCK) ON dbo.Categories.CategoryID = dbo.Products.CategoryID&lt;br&gt;
&lt;br&gt;&lt;br&gt;
In some cases quires that are taking minutes end up taking seconds.  Much easier than moving the data to a separate database and it’s still pretty much real time give or take a few milliseconds. You’ve been warned not to use this for bank balances though.
&lt;br&gt;&lt;br&gt;
&lt;a href="http://izenda.com/Blog/sql/high-performance-sql-views-using-with-nolock/"&gt;More from Data Stream&lt;/a&gt;</description><pubDate>Tue, 11 May 2010 13:53:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/high-performance-sql-views-using-with-nolock</guid><category>SQL Server</category><category>Views</category></item><item><title>Interesting perspective on BI for SQL Server using an asp.net application</title><link>http://weblogs.asp.net:80/brendansullivan/interesting-perspective-on-bi-for-sql-server-using-an-asp-net-application</link><description>
&lt;p&gt;This interview is pretty interesting, the company is seeking to replace consultants with software rather than supplement or create work for them which is not the norm in the BI software space.&amp;nbsp; Worth the 10 minute listen:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.b-eye-network.com/watch/10126%20" title="BI for the end-user" mce_href="http://www.b-eye-network.com/watch/10126 "&gt;BI for the end-user&lt;/a&gt;
 &lt;/p&gt;
</description><pubDate>Tue, 21 Apr 2009 03:12:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/interesting-perspective-on-bi-for-sql-server-using-an-asp-net-application</guid><category>BI</category><category>Reporting</category><category>SQL Server</category></item><item><title>A neat trick to report on data from SalesForce.com using SQL Server</title><link>http://weblogs.asp.net:80/brendansullivan/a-neat-trick-to-report-on-data-from-salesforce-com-using-sql-server</link><description>&lt;p&gt;I have had to report on salesforce.com data before, and it can be a pain since their database uses strange naming conventions and composite keys.&amp;nbsp; Here is a nifty article that addresses how to report on leads and their associated tasks.&lt;br&gt;&lt;br&gt;&lt;a href="http://izenda.com/Blog/sql/reporting-on-salesforce-com-data-with-sql-server/" mce_href="http://izenda.com/Blog/sql/reporting-on-salesforce-com-data-with-sql-server/"&gt;http://izenda.com/Blog/sql/reporting-on-salesforce-com-data-with-sql-server/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;Enjoy!&amp;nbsp;&amp;nbsp; Hopefully, salesforce will incorporate reporting features that make it easier to pull marketing data out of their system in a straight forward way.&lt;/p&gt;</description><pubDate>Thu, 16 Apr 2009 19:14:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/a-neat-trick-to-report-on-data-from-salesforce-com-using-sql-server</guid></item><item><title>The Hidden Costs of Free Reporting Tools - Conclusions</title><link>http://weblogs.asp.net:80/brendansullivan/the-hidden-costs-of-free-reporting-tools-conclusions</link><description>&lt;P&gt;If you haven't read the first post on this subject, please see here:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://weblogs.asp.net/brendansullivan/archive/2009/03/30/the-hidden-costs-of-free-reporting-tools.aspx" mce_href="http://weblogs.asp.net/brendansullivan/archive/2009/03/30/the-hidden-costs-of-free-reporting-tools.aspx"&gt;http://weblogs.asp.net/brendansullivan/archive/2009/03/30/the-hidden-costs-of-free-reporting-tools.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;After putting some more thought into it,&amp;nbsp; I came to some general conclusions, and I will close with a couple of recommendations based only on my experience.&amp;nbsp; I also will address only reporting systems.&amp;nbsp; I do this because although businesses need decision support, reporting is a separate component of BI in itself.&amp;nbsp; It is the component that most often interfaces with the most decision makers. Because of this, all other aspects of BI will fail (analytics, prediction, etc) without giving regard to exactly what reports are needed and in what form. My criteria when selecting a tool for use with web apps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Does it need the involvement of IT staff beyond training or setup?&lt;/LI&gt;
&lt;LI&gt;Can a user make a change to a report (add column, add sum, add chart) without needing a DBA or IT?&lt;/LI&gt;
&lt;LI&gt;Is it totally browser based-- can a user create and deploy a report using Firefox or IE?&lt;/LI&gt;
&lt;LI&gt;Can it be seamlessly integrated into an existing application or rebranded? ie, is there an API for making customizations at the code level?&lt;/LI&gt;
&lt;LI&gt;Do I, the BI solutions provider, have to know anything about their business in order for them to begin building reports and be successful?&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;These are a general criteria that can help establish an organizations expectations about the reporting process.&amp;nbsp; I believe (shameless plug) there are a couple of great approaches to this.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If you are on a Microsoft stack, and integrating or building web application. In my opinion, Izenda builds a great product that meets these criteria.&amp;nbsp; If you using a Java application, I like jasper reports due to its flexibility. The alternative is purchasing a widget and adding a full user interface, which will mean a lot of development and testing. On the other hand, both packages are lightweight, quick to implement, and expose an extensive API to the developer to allow for&amp;nbsp;complete integration. &lt;BR&gt;&lt;/P&gt;</description><pubDate>Tue, 31 Mar 2009 17:46:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/the-hidden-costs-of-free-reporting-tools-conclusions</guid><category>crystal reports</category><category>free reporting</category><category>free-reporting</category><category>general software development</category><category>jasperreports</category><category>Reporting</category><category>SQL</category></item><item><title>The Hidden Costs of Free Reporting Tools</title><link>http://weblogs.asp.net:80/brendansullivan/the-hidden-costs-of-free-reporting-tools</link><description>&lt;P&gt;Being that I work in the&amp;nbsp;reporting sector, I would like to offer my thoughts on the current state of providing self-service reporting to end-users. By self-service, I mean the ability for business users to create or customize their own reports without having to understand the data model.&amp;nbsp; Although it sounds simple, it is actually a huge challenge to design software that does this.&amp;nbsp; There is alot of hype about "free" reporting tools--&amp;nbsp;&amp;nbsp;they have their place in organizations&amp;nbsp; but I think that you have to carefully evauluate the meaning of "free."&amp;nbsp;&amp;nbsp;Because these free reporting tools lack of adaptability and user friendliness, they&amp;nbsp;can potentially have enormous costs over time.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;These Tools Require A Developer&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Most reporting solutions claim to be web-based, but they essentially only allow a desktop report to be published to the web.&amp;nbsp; The limitation with this approach is that this only works with static or canned reports.&amp;nbsp; Since there is no way to anticipate most of the reports that will be needed, users tend to need customized reports.&amp;nbsp; Traditional reporting tools like Crystal Reports require a software developer to make any and all changes.&amp;nbsp; Additionally, this individual will require administrator level permissions to the database.&amp;nbsp; Everyday users can not use these tools because they do not know how to connect to databases, use programming tools or the SQL language.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;User Communities Need Numerous Reports Every Year&lt;BR&gt;&lt;BR&gt;&lt;/B&gt;In situations where self-service reporting is available or report providers are responsive, even small teams may ask for dozens of custom reports.&amp;nbsp; Larger teams may ask for over a hundred. For software vendors that are serving multiple customers, this problem is compounded further and the user community may need thousands of reports every year.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Keeping Up With Requests Requires Significant Engineering Time&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Even in harsh economic times, qualified software engineers are difficult to find and command ever-increasing salaries.&amp;nbsp; Outsourcing does not work well for reporting due to language and time zone barriers.&amp;nbsp; Additionally, reports may contain sensitive information which must remain within the domain of the organization. Reporting demands time, and even a simple customization may take a few hours of work because the developer needs to understand the requirement, load the existing report, analyze the data model, update the model, validate the report with the user and finally publish the report to the web server.&amp;nbsp; Creating new reports from scratch can take even longer.&amp;nbsp; Since developers generally do not understand the data they are working with, it may take a few tries before the report is correct.&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Free Reporting Tools are Not Completely Self-Service Or Browser Based&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Most vendors provide end-user reporting tools which are designed for intranet environments and behave like desktop applications. They run on a users desktop and require installation.&amp;nbsp; Additionally, they require a direct connection to the database server which is normally not available to users for security reasons.&amp;nbsp; While users can use these tools to generate reports, a developer must first create a model and update the model every time new information is needed.&amp;nbsp; In contrast, a true self-service solution allows users to create and customize reports directly while ensuring that users only see data to which they have access.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;The Costs of Developer-Driven Reports&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;A software vendor, IT organization or solutions provider may serve up to 100 or more customers or departments.&amp;nbsp; Each organization may need between 10 and 100 custom reports per year. Some larger organizations may need well over 100.&amp;nbsp; Let's assume that a software engineer with good communication skills costs about $100,000 per year after salary, benefits and other expenses. Serving 50 customers that require 50 reports every year each would require three full time engineers dedicated to reporting.&amp;nbsp; For a fraction of this cost, self-service reporting solutions exist that&amp;nbsp;can be implemented in a manner of days.&lt;BR&gt;&lt;BR&gt;Time = 50 Customers * 50 Reports Per Year * 2.5 Hours Per Report = 6,250 Man Hours = 3 Man Years&lt;BR&gt;Cost = 3 Man Years * $100,000 = $300,000&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Building vs. Buying Self-Service Reporting&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Many organizations that understand the true costs of traditional reporting have tried to implement self-service capabilities in-house.&amp;nbsp; Unfortunately such projects are often risky and provide underwhelming results.&amp;nbsp; Providing a full solution with exports, charts, filters, pivots and dashboards requires a significant capital investment.&amp;nbsp;&amp;nbsp;&amp;nbsp; This&amp;nbsp; is a large project, there are numerous development and QA details that involve critical challenges such as&amp;nbsp; PDF rendering, AJAX, data validation, ensuring security and optimizing performance.&amp;nbsp; Implementing a high performance flexible reporting system for an individual application can take as long as 3-5 man years of engineering and QA time.&amp;nbsp; Additionally, it could be one or more years before it gets delivered to customers which creates the potential for a competitor to offer reporting to their customers more quickly.&amp;nbsp; In contrast, a few vendors offer &lt;A class="" href="http://www.izenda.com/" target=_blank mce_href="http://www.izenda.com"&gt;self-service reporting&lt;/A&gt; who provide a complete solution that can be delivered in a manner of days for a fraction of annual cost.&lt;BR&gt;&lt;BR&gt;3-5 Man Years * $100,000 = $300,000 - $500,000 + Delayed Release&lt;BR&gt;&lt;BR&gt;&lt;B&gt;The Potential Cost Of Not Providing Reports Is Even Greater&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;While having professional software engineers create reports has enormous costs, the real cost is not providing them.&amp;nbsp; Business users learn to stop asking for reports when they do not get them fast enough.&amp;nbsp; This results in critical decisions being made without necessary information.&amp;nbsp; Application providers and software vendors miss critical opportunities to engage decision makers with static reporting.&amp;nbsp; Since decision makers tend to use reporting rather than the application, not satisfying their needs risks losing a customer or limiting adoption.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description><pubDate>Mon, 30 Mar 2009 15:57:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/the-hidden-costs-of-free-reporting-tools</guid><category>crystal reports</category><category>general software development</category><category>Reporting</category><category>SQL</category></item><item><title>Never ending dominance of SQL?</title><link>http://weblogs.asp.net:80/brendansullivan/never-ending-sql</link><description>&lt;P mce_keep="true"&gt;In the recent months, there&amp;nbsp;had been&amp;nbsp;some&amp;nbsp;worry amongst developers concerning the Azure platform in light of the early comments Microsoft folks had made such as “If it works with SQL Server, it will largely work with SQL Data Services.”&amp;nbsp; In fact, it&amp;nbsp; based wasn't worry for some, it was outright panic.&amp;nbsp; I am involved with QA and the prospect of supporting yet another not fully SQL compliant "data connector" was unappetizing.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Recent announcement have allayed my worries for the moment, and I am confident Microsoft will not leave billions of dollars in SQL infrastructure in the mix!&amp;nbsp; But it does raise some good questions about the trade-offs between sticking with ACID compliance vs BASE availability and scalability.&amp;nbsp; Obviously, these have been questions which the Azure folks have been thinking deeply about.&amp;nbsp; But even more fundamentally, it raises questions about SQL itself.&amp;nbsp;I have seen first hand what some of the proprietary database platforms, such as Vertica&amp;nbsp;can do.&amp;nbsp; These database have special significance in the realm of business intelligence, and specifically in reporting, which is my industry.&amp;nbsp; Simply put, transactional requirements in analytics database are next to nill and all we are concerned about is combing very large amounts of data in novel ways- and doing it *quickly*.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;So is SQL on its way out the door in the analytics space? I think not-- Sanjay's article over at&amp;nbsp;&lt;A class="" href="http://izenda.com/Blog/sql/is-sql-the-x86-of-business/" mce_href="http://izenda.com/Blog/sql/is-sql-the-x86-of-business/ "&gt;Data Stream&lt;/A&gt;&amp;nbsp; brings it home.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;"SQL has served us well and needs to shed some remnants of a different era, but will allow us to leverage the trillions that have been poured into SQL-based technologies." - &lt;A class="" href="http://izenda.com/Blog/sql/is-sql-the-x86-of-business/" mce_href="http://izenda.com/Blog/sql/is-sql-the-x86-of-business/ "&gt;Data Stream, is SQL the x86 of business?&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;It's a good article.&amp;nbsp; I believe MS made a great decision. Sure, we are going to have to wait a little longer for Azure to fully implement its SQL compatibility, but as long as I can feed it SQL-92, I'll be waiting in line for its release!&lt;/P&gt;</description><pubDate>Wed, 18 Mar 2009 17:10:00 GMT</pubDate><guid isPermaLink="true">http://weblogs.asp.net:80/brendansullivan/never-ending-sql</guid><category>general software development</category><category>Reporting</category><category>SQL</category><category>SQL Server</category></item></channel></rss>