<?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>ORAYLIS Blog</title>
	<atom:link href="http://blog.oraylis.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.oraylis.de</link>
	<description>ORAYLIS - Einfach mehr Wissen</description>
	<lastBuildDate>Fri, 18 May 2012 09:46:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The Future Of Mobile [Slidedeck]</title>
		<link>http://blog.oraylis.de/2012/05/the-future-of-mobile-slidedeck/</link>
		<comments>http://blog.oraylis.de/2012/05/the-future-of-mobile-slidedeck/#comments</comments>
		<pubDate>Mon, 14 May 2012 08:32:03 +0000</pubDate>
		<dc:creator>Jens Kröhnert</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1844</guid>
		<description><![CDATA[<p>Eye-opening presentation by the <a href="https://intelligence.businessinsider.com/"><b>BI Intelligence</b></a> team— a slide deck on the current trends in mobile including a deep look at the growth of smartphones and tablets, the platform wars, and how consumers are actually using their devices:</p>
<ul>
<li>Globally the “dumb-phone conversion cycle” is still just getting started</li>
<li>Microsoft Windows Phone still has a good chance to grab a big part of this blue ocean</li>
<li>This could be the opportunity to compensate the trend, which had its milestone last year: the number of smartphones sold exceeded the number of PCs sold</li>
</ul>
<p>&#160;</p>
<p><a href="http://www.businessinsider.com/the-future-of-mobile-deck-2012-3#-1" target="_blank"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="clip_image002" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0022.jpg" width="318" height="240" /></a></p>
<p>Read more: <a href="http://www.businessinsider.com/the-future-of-mobile-deck-2012-3#-1?utm_source=twitterfeed%26utm_medium=twitter#ixzz1upXBO8Bn">http://www.businessinsider.com/the-future-of-mobile-deck-2012-3#-1</a></p>
<div style="display:block"><small><em>by Jens Kröhnert <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F05%2Fthe-future-of-mobile-slidedeck%2F&amp;linkname=The%20Future%20Of%20Mobile%20%5BSlidedeck%5D"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p>Eye-opening presentation by the <a href="https://intelligence.businessinsider.com/"><b>BI Intelligence</b></a> team— a slide deck on the current trends in mobile including a deep look at the growth of smartphones and tablets, the platform wars, and how consumers are actually using their devices:</p>
<ul>
<li>Globally the “dumb-phone conversion cycle” is still just getting started</li>
<li>Microsoft Windows Phone still has a good chance to grab a big part of this blue ocean</li>
<li>This could be the opportunity to compensate the trend, which had its milestone last year: the number of smartphones sold exceeded the number of PCs sold</li>
</ul>
<p>&#160;</p>
<p><a href="http://www.businessinsider.com/the-future-of-mobile-deck-2012-3#-1" target="_blank"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="clip_image002" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0022.jpg" width="318" height="240" /></a></p>
<p>Read more: <a href="http://www.businessinsider.com/the-future-of-mobile-deck-2012-3#-1?utm_source=twitterfeed%26utm_medium=twitter#ixzz1upXBO8Bn">http://www.businessinsider.com/the-future-of-mobile-deck-2012-3#-1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/05/the-future-of-mobile-slidedeck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Webcast: Mobile BI mit dem SQL Server</title>
		<link>http://blog.oraylis.de/2012/05/microsoft-webcast-mobile-bi-mit-dem-sql-server/</link>
		<comments>http://blog.oraylis.de/2012/05/microsoft-webcast-mobile-bi-mit-dem-sql-server/#comments</comments>
		<pubDate>Fri, 11 May 2012 14:16:04 +0000</pubDate>
		<dc:creator>Jens Kröhnert</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1828</guid>
		<description><![CDATA[<p>&quot;Mobile BI ist der Trend im Datenbanken- und Business Intelligence-Umfeld. In diesem Webcast zeigt der Microsoft Partner Oraylis auf, wie einfaches Mobile BI auf Basis von SQL Server funktionieren kann.&quot;
<p><a href="http://aka.ms/sgu5ux" target="_blank"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/05/image3.png" width="575" height="439" /></a></p>
<p>Hosted by Microsoft (Silverlight) <a title="http://aka.ms/sgu5ux" href="http://aka.ms/sgu5ux" target="_blank">http://aka.ms/sgu5ux</a>&#160;</p>
<p>Downloadlink (mp4) <a title="http://content2.catalog.video.msn.com/e2/ds/8d46f351-b28f-49e2-b964-c109d2230479.mp4" href="http://content2.catalog.video.msn.com/e2/ds/8d46f351-b28f-49e2-b964-c109d2230479.mp4" target="_blank">http://content2.catalog.video.msn.com/e2/ds/8d46f351-b28f-49e2-b964-c109d2230479.mp4</a></p>
<div style="display:block"><small><em>by Jens Kröhnert <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F05%2Fmicrosoft-webcast-mobile-bi-mit-dem-sql-server%2F&amp;linkname=Microsoft%20Webcast%3A%20Mobile%20BI%20mit%20dem%20SQL%20Server"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p>&quot;Mobile BI ist der Trend im Datenbanken- und Business Intelligence-Umfeld. In diesem Webcast zeigt der Microsoft Partner Oraylis auf, wie einfaches Mobile BI auf Basis von SQL Server funktionieren kann.&quot;
<p><a href="http://aka.ms/sgu5ux" target="_blank"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/05/image3.png" width="575" height="439" /></a></p>
<p>Hosted by Microsoft (Silverlight) <a title="http://aka.ms/sgu5ux" href="http://aka.ms/sgu5ux" target="_blank">http://aka.ms/sgu5ux</a>&#160;</p>
<p>Downloadlink (mp4) <a title="http://content2.catalog.video.msn.com/e2/ds/8d46f351-b28f-49e2-b964-c109d2230479.mp4" href="http://content2.catalog.video.msn.com/e2/ds/8d46f351-b28f-49e2-b964-c109d2230479.mp4" target="_blank">http://content2.catalog.video.msn.com/e2/ds/8d46f351-b28f-49e2-b964-c109d2230479.mp4</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/05/microsoft-webcast-mobile-bi-mit-dem-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://content2.catalog.video.msn.com/e2/ds/8d46f351-b28f-49e2-b964-c109d2230479.mp4" length="0" type="video/mp4" />
		</item>
		<item>
		<title>Mobile BI &#8211; Slope of Enlightenment?</title>
		<link>http://blog.oraylis.de/2012/05/mobile-bi-slope-of-enlightenment/</link>
		<comments>http://blog.oraylis.de/2012/05/mobile-bi-slope-of-enlightenment/#comments</comments>
		<pubDate>Wed, 09 May 2012 16:09:44 +0000</pubDate>
		<dc:creator>Jens Kröhnert</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1809</guid>
		<description><![CDATA[<p>&#160;</p>
<p>About 6 years ago it was already the case. About the time when the Microsoft SQL Server 2005 hit the market and BI functionalities became broadly available, news about mobile BI solutions became more frequent in the newspapers-but the inflated expectations of some product houses ended up in the knowledge that the market was not yet ripe. </p>
<p>Following the Hype Cycle (Gartner) there was missing a not yet foreseeable technological trigger: the modern smartphone era that was started with the iPhone and iPad combined with the necessary foundation: broader wireless networks like the 3. generation UMTS.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0021.jpg"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image002" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image002_thumb1.jpg" width="358" height="266" /></a></p>
<p>This class of devices managed it for the first time in the combination of many features such as multi-touch screen, GPS- and orientation sensor, an &quot;every time and everywhere&quot;-availability and last but not least an intuitive usability that managed to penetrate the owners life completely. Even in the job. Consumeration of smartphones, also known as BYOD (Bring your own device) is now a big challenge for business it departments: Not only managers want to use &quot;their&quot; smartphone also in a business context; the number of iPads in business meetings today is also remarkable. </p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0041.jpg"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image004" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image004_thumb1.jpg" width="317" height="249" /></a></p>
<p>If you can do security critical online banking on your smartphone or check real-time weather conditions of your favorite spot in a scorecard presentation, so why not the companies key performance indicators?</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0061.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image006" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image006_thumb1.png" width="282" height="221" /></a></p>
<p>The path to enlightenment began with this desire of the consumer. The panache of the current development has one origin in this user-driven need – which did lead to a broad variance of solution approaches filling the space between the new mobile usability &#8211; frontend paradigm of modern smart devices and evolved sophisticated business intelligence backend servers.</p>
<p>When some time ago you could be the hero in a stand-up meeting if you could evaluate dynamic Excel sheets, by now real-time access to the BI backend is state-of-the-art. Fancy playful user interfaces can also create some attention of colleagues but the real mission critical business advantage comes along when the new usability paradigm is used specifically for BI operations like drill-down or interactive charting. </p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/image1.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/05/image_thumb1.png" width="594" height="282" /></a></p>
<p>The integration of analysis and reporting with mail, phone, text message or web-access as into a SharePoint can almost eliminate the need for a laptop or pc for some user groups. The possibility of including the current location of the user, associated with geo-information and address data from the BI backend, gives operative BI workers further business value. For example, if you find a point-of-sale in your sales hierarchy that is performing conspicuous, why not call the responsible person directly or if your call was not satisfying be routed to the point? Maybe for easier orientation have a preview of the point-of-sales location in a street view.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/image2.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/05/image_thumb2.png" width="617" height="290" /></a></p>
<p>Nevertheless, disappointments are still possible to experience. The new user-friendly frontend concepts are not ends in themselves, only a modern BI backend accessible and the most seamless integration with respect to both data delivery and security policy will take account of current user demands. After those initial requirements companies who roll-out a mobile bi solution soon find out that mobile bi is more a process than a product. </p>
<p>Delivering BI information into the field, which is agile in its nature, demands an agile solution, not only in means of flexibility in ad-hoc analysis for the end-user, but also in maintainability. Adaptable solutions are highly configurable so that e.g. new key performance indicators that are to be made available in the mobile BI solution simply can be configured by the competent department rather than developed by a technical BI expert.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image010.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image010" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image010_thumb.png" width="151" height="224" /></a></p>
<p>Companies taking care of those critical factors related to a mobile BI solution can already today reach the plateau of productivity.</p>
<p>In the following post I will explain how we at ORAYLIS developed <a href="http://www.oraylis.de/leistungen/technologie/oraylis-bi-mobile" target="_blank">BI.Mobile</a> to meet those demands and enable our customers to go mobile based on their in-place Microsoft BI Backend without the need for the implementation of a second BI Infrastructure just for mobile delivery. </p>
<div style="display:block"><small><em>by Jens Kröhnert <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F05%2Fmobile-bi-slope-of-enlightenment%2F&amp;linkname=Mobile%20BI%20%26%238211%3B%20Slope%20of%20Enlightenment%3F"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>About 6 years ago it was already the case. About the time when the Microsoft SQL Server 2005 hit the market and BI functionalities became broadly available, news about mobile BI solutions became more frequent in the newspapers-but the inflated expectations of some product houses ended up in the knowledge that the market was not yet ripe. </p>
<p>Following the Hype Cycle (Gartner) there was missing a not yet foreseeable technological trigger: the modern smartphone era that was started with the iPhone and iPad combined with the necessary foundation: broader wireless networks like the 3. generation UMTS.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0021.jpg"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image002" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image002_thumb1.jpg" width="358" height="266" /></a></p>
<p>This class of devices managed it for the first time in the combination of many features such as multi-touch screen, GPS- and orientation sensor, an &quot;every time and everywhere&quot;-availability and last but not least an intuitive usability that managed to penetrate the owners life completely. Even in the job. Consumeration of smartphones, also known as BYOD (Bring your own device) is now a big challenge for business it departments: Not only managers want to use &quot;their&quot; smartphone also in a business context; the number of iPads in business meetings today is also remarkable. </p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0041.jpg"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image004" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image004_thumb1.jpg" width="317" height="249" /></a></p>
<p>If you can do security critical online banking on your smartphone or check real-time weather conditions of your favorite spot in a scorecard presentation, so why not the companies key performance indicators?</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image0061.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image006" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image006_thumb1.png" width="282" height="221" /></a></p>
<p>The path to enlightenment began with this desire of the consumer. The panache of the current development has one origin in this user-driven need – which did lead to a broad variance of solution approaches filling the space between the new mobile usability &#8211; frontend paradigm of modern smart devices and evolved sophisticated business intelligence backend servers.</p>
<p>When some time ago you could be the hero in a stand-up meeting if you could evaluate dynamic Excel sheets, by now real-time access to the BI backend is state-of-the-art. Fancy playful user interfaces can also create some attention of colleagues but the real mission critical business advantage comes along when the new usability paradigm is used specifically for BI operations like drill-down or interactive charting. </p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/image1.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/05/image_thumb1.png" width="594" height="282" /></a></p>
<p>The integration of analysis and reporting with mail, phone, text message or web-access as into a SharePoint can almost eliminate the need for a laptop or pc for some user groups. The possibility of including the current location of the user, associated with geo-information and address data from the BI backend, gives operative BI workers further business value. For example, if you find a point-of-sale in your sales hierarchy that is performing conspicuous, why not call the responsible person directly or if your call was not satisfying be routed to the point? Maybe for easier orientation have a preview of the point-of-sales location in a street view.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/image2.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/05/image_thumb2.png" width="617" height="290" /></a></p>
<p>Nevertheless, disappointments are still possible to experience. The new user-friendly frontend concepts are not ends in themselves, only a modern BI backend accessible and the most seamless integration with respect to both data delivery and security policy will take account of current user demands. After those initial requirements companies who roll-out a mobile bi solution soon find out that mobile bi is more a process than a product. </p>
<p>Delivering BI information into the field, which is agile in its nature, demands an agile solution, not only in means of flexibility in ad-hoc analysis for the end-user, but also in maintainability. Adaptable solutions are highly configurable so that e.g. new key performance indicators that are to be made available in the mobile BI solution simply can be configured by the competent department rather than developed by a technical BI expert.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image010.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto;padding-top: 0px" border="0" alt="clip_image010" src="http://blog.oraylis.de/wp-content/uploads/2012/05/clip_image010_thumb.png" width="151" height="224" /></a></p>
<p>Companies taking care of those critical factors related to a mobile BI solution can already today reach the plateau of productivity.</p>
<p>In the following post I will explain how we at ORAYLIS developed <a href="http://www.oraylis.de/leistungen/technologie/oraylis-bi-mobile" target="_blank">BI.Mobile</a> to meet those demands and enable our customers to go mobile based on their in-place Microsoft BI Backend without the need for the implementation of a second BI Infrastructure just for mobile delivery. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/05/mobile-bi-slope-of-enlightenment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nachbau einer Facebook Visualisierung</title>
		<link>http://blog.oraylis.de/2012/05/nachbau-einer-facebook-visualisierung/</link>
		<comments>http://blog.oraylis.de/2012/05/nachbau-einer-facebook-visualisierung/#comments</comments>
		<pubDate>Tue, 08 May 2012 18:44:42 +0000</pubDate>
		<dc:creator>David Claßen</dc:creator>
				<category><![CDATA[Tableau]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Hichert]]></category>
		<category><![CDATA[Visual BI]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1792</guid>
		<description><![CDATA[<p>Durch den bevorstehenden Börsengang ist Facebook momentan (mal wieder) groß in der Presse.    <br />Bei durchstöbern einiger Online-Artikel bin ich über einen Beitrag gestolpert, in dem Anwenderzahlen von Facebook erläutert wurden. Der Grund meines Interesses an diesem Artikel war jedoch nicht primär der Inhalt selbst, sondern die Art und Weise wie der Autor die zugrundeliegenden Daten visualisier</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/bad1.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bad1" border="0" alt="bad1" src="http://blog.oraylis.de/wp-content/uploads/2012/05/bad1_thumb.jpg" width="298" height="289" /></a>&#160; <a href="http://blog.oraylis.de/wp-content/uploads/2012/05/bad2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bad2" border="0" alt="bad2" src="http://blog.oraylis.de/wp-content/uploads/2012/05/bad2_thumb.jpg" width="318" height="260" /></a></p>
<p>Quelle: <a title="http://allfacebook.de/news/facebook-nutzerzahlen-2012-in-deutschland-und-weltweit" href="http://allfacebook.de/news/facebook-nutzerzahlen-2012-in-deutschland-und-weltweit">http://allfacebook.de/news/facebook-nutzerzahlen-2012-in-deutschland-und-weltweit</a></p>
<p>Neben den beiden Visualisierungen befindet sich auch noch ein Ranking von Ländern nach Facebook-Nutzern innerhalb des Artikels.</p>
<p>Im folgenden möchte ich Ideen und Vorschläge liefern, wie man die gleichen Daten mit Tableau vom Rauschen befreit und etwas klarer darstellen könnte.    <br />Auf den einzelnen Dashboards habe ich die Schritte von der ersten View bis hin zum möglichen Endergebnis dargestellt, um die Entwicklung einer View in Tableau darzustellen.     <br />Datenbasis sind Excel Tabellen, in die ich die Daten übertragen habe.</p>
<p>Fangen wir mit dem Säulendiagramm an.</p>
<ol>
<li>Das Datum auf die Spalten legen (Tableau nimmt automatisch das Jahr) und die Kennzahl als Achse auf die Zeilen. </li>
<li>Über die ShowMe! Funktion das Liniendiagramm in ein Säulendiagramm ändern und die Achsen tauschen. </li>
<li>Zur Unterscheidung des aktuellen Jahres und der Vorjahre ein neues berechnetes Element mit der folgenden Formel erstellen: iif(year([Zeitpunkt]) = year(today()), &quot;ACT&quot;, &quot;PY&quot;)      <br />Das neue Element auf den Farben ablegen und die Farblegende anpassen. ACT ist schwarz und PY ist grau. </li>
<li>Das Zahlenformat der Kennzahl ändern (keine Dezimalstellen) und auf die Beschriftung legen. Danach kann die Achse verschwinden. </li>
<li>Nun noch überflüssiges “Rauschen” wie die Rahmen, Achsenteilstriche und die Beschriftung der Kopfzeilen entfernen. Außerdem habe ich die horizontale Achse etwas dicker dargestellt. </li>
</ol>
<p>Die Aussage der Visualisierung hat sich nicht verändert, jedoch wird mein Auge nun von wesentlich weniger Details beeinflusst, die mit der Aussage nichts zu tun haben.</p>
<p>&#160;</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 769px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Saeulen " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Saeulen/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="769" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/Saeulen" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Saeulen/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/Saeulen" target="_blank">Powered by Tableau</a></div>
</p></div>
<p>&#160;</p>
<p>Nun das “3D-Glas-Tortendiagramm”.</p>
<ol>
<li>Die Kennzahl in den Pivotbereich ziehen und die Altersgruppen auf die Spalten legen. Über ShowMe! ein Kreisdiagramm erstellen und die Kennzahl zusätzlich auf die Beschriftung legen. </li>
<li>Tableau kann auch Kreisdiagramme, was sie trotzdem nicht besser macht.      <br />Der Versuch, mir über ein berechnetes Element ein schöne Beschriftung zu erstellen macht das Kreisdiagramm leider auch nicht besser :&quot;Altersgruppe &quot;+[Altersgruppe] + &quot;: &quot;+str(round([Prozent]*100,0))+&quot;%&quot;
<p>Die Standard-Schnellinfo von Tableau (mit der Maus über eine Fläche fahren) ist deutlich besser geeignet als das neue Feld für die Beschriftung.</p>
</li>
<li>Alternative zu dem Kreisdiagramm könnte zum Beispiel ein Balkendiagramm sein: Altersgruppen auf die Zeilen, Kennzahl auf die Spalten und mit ShowMe! ein Balkendiagramm erstellen. </li>
<li>Jetzt wird noch aufgeräumt und die Aussagekraft gesteigert.      <br />Die Kennzahl zusätzlich auf die Beschriftungen, dann kann auch die Achse entfernt werden. Die Überschrift der Altersgruppen wird auch nicht benötigt. Die Balken werden schwarz für IST dargestellt. </li>
<li>Die Rahmen noch entfernen und schon haben wir die Aussagekraft der ursprünglichen Kreisdarstellung um ein vielfaches gesteigert. Wir wissen nun genau, auf welche Information es ankommt und auch das Größenverhältnis wird viel deutlicher wahrgenommen als noch bei dem Kreisdiagramm. </li>
</ol>
<p>&#160;</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 669px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Pie " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Pie/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="669" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/Pie" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Pie/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/Pie" target="_blank">Powered by Tableau</a></div>
</p></div>
<p>&#160;</p>
<p>Nun zu dem Ranking der Länder. Mal sehen, was daraus machen kann.</p>
<ol>
<li>Länder sortiert nach der Kennzahl auf die Zeilen und die Kennzahl in den Pivotbereich. </li>
<li>Die Kennzahl ein zweites mal in den Pivotbereich bringen und die Berechnung ändern in “Prozent der Gesamtsumme”. Um die Position einen Landes darzustellen erstelle ich ein berechnetes Feld mit der Funktion index() und lege dieses vor die Länder auf den Spalten ab.      <br />Als reine Listendarstellen hätte ich bereits einen Mehrwert geschaffen, in dem ich durch die Prozentangabe die absolute Zahl besser bewerten kann. </li>
<li>Dieses könnte aber auch durch ein Balkendiagramm erreicht werden. ShowMe! sei Dank ist dieses nur zwei Klicks entfernt. Den Prozentwert&#160; entferne ich wieder, das Verhältnis drücken nun die Balken aus. Die Kennzahl noch auf die Beschriftung und das Zahlenformat auf eine Dezimalstelle einstellen. </li>
<li>Um den Informationsgehalt der View zu steigern, möchte ich noch eine Linie darstellen, die die Top 10 Länder von den übrigen trennt.      <br />Ein neues berechnetes Feld mit der Formel iif([Rank]&lt;=10, &quot;Top&quot;, &quot;Other&quot;) erstellen und dieses auf die Zeilen legen. Die Sortierreihenfolge von Top10 und Other noch manuell korrigieren und die View ist fertig. </li>
</ol>
<p>&#160;</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 969px" class="tableauPlaceholder">
<p><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Beispiel für die Darstellung des Rankings sowie deren Erstellung " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Rank/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="969" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/Rank" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Rank/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></p>
</p></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/Rank" target="_blank">Powered by Tableau</a></div>
</p></div>
<p>&#160;</p>
<p>Zum Abschluss dann noch zwei Ideen, was man auf Basis der gleichen Daten auch noch hätte machen können.    <br />Zum einen ein “Tuning” des Länderrankings.     <br />Diese Liste ist für meinen Geschmack zu lang, weshalb ich einen Parameter definiert habe. Mit diesem lässt sich einstellen, wie viele Länder (beginnend von dem mit den meisten Usern) angezeigt werden sollen. Alle anderen werden unter &#8216;Other&#8217; zusammengefasst und die Userzahlen summiert. </p>
<p>Zum anderen eine Darstellung der Userzahlen auf einer Karte (wenn man die Länderinformation schon hat). Kartendarstellungen sind generell schon eine Frage des persönlichen Geschmacks. Die Gestaltung einer Karte, lässt dann nochmals sehr viel Spielraum. Wesentlich sollte hierbei auf jeden Fall sein, die Nachricht die dem Betrachter übermittelt werden soll klar darzustellen.</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 1069px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="TopN " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/TopN/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="1069" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/TopN" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/TopN/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/TopN" target="_blank">Powered by Tableau</a></div>
</p></div>
<div style="display:block"><small><em>by David Claßen <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F05%2Fnachbau-einer-facebook-visualisierung%2F&amp;linkname=Nachbau%20einer%20Facebook%20Visualisierung"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p>Durch den bevorstehenden Börsengang ist Facebook momentan (mal wieder) groß in der Presse.    <br />Bei durchstöbern einiger Online-Artikel bin ich über einen Beitrag gestolpert, in dem Anwenderzahlen von Facebook erläutert wurden. Der Grund meines Interesses an diesem Artikel war jedoch nicht primär der Inhalt selbst, sondern die Art und Weise wie der Autor die zugrundeliegenden Daten visualisier</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/05/bad1.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bad1" border="0" alt="bad1" src="http://blog.oraylis.de/wp-content/uploads/2012/05/bad1_thumb.jpg" width="298" height="289" /></a>&#160; <a href="http://blog.oraylis.de/wp-content/uploads/2012/05/bad2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bad2" border="0" alt="bad2" src="http://blog.oraylis.de/wp-content/uploads/2012/05/bad2_thumb.jpg" width="318" height="260" /></a></p>
<p>Quelle: <a title="http://allfacebook.de/news/facebook-nutzerzahlen-2012-in-deutschland-und-weltweit" href="http://allfacebook.de/news/facebook-nutzerzahlen-2012-in-deutschland-und-weltweit">http://allfacebook.de/news/facebook-nutzerzahlen-2012-in-deutschland-und-weltweit</a></p>
<p>Neben den beiden Visualisierungen befindet sich auch noch ein Ranking von Ländern nach Facebook-Nutzern innerhalb des Artikels.</p>
<p>Im folgenden möchte ich Ideen und Vorschläge liefern, wie man die gleichen Daten mit Tableau vom Rauschen befreit und etwas klarer darstellen könnte.    <br />Auf den einzelnen Dashboards habe ich die Schritte von der ersten View bis hin zum möglichen Endergebnis dargestellt, um die Entwicklung einer View in Tableau darzustellen.     <br />Datenbasis sind Excel Tabellen, in die ich die Daten übertragen habe.</p>
<p>Fangen wir mit dem Säulendiagramm an.</p>
<ol>
<li>Das Datum auf die Spalten legen (Tableau nimmt automatisch das Jahr) und die Kennzahl als Achse auf die Zeilen. </li>
<li>Über die ShowMe! Funktion das Liniendiagramm in ein Säulendiagramm ändern und die Achsen tauschen. </li>
<li>Zur Unterscheidung des aktuellen Jahres und der Vorjahre ein neues berechnetes Element mit der folgenden Formel erstellen: iif(year([Zeitpunkt]) = year(today()), &quot;ACT&quot;, &quot;PY&quot;)      <br />Das neue Element auf den Farben ablegen und die Farblegende anpassen. ACT ist schwarz und PY ist grau. </li>
<li>Das Zahlenformat der Kennzahl ändern (keine Dezimalstellen) und auf die Beschriftung legen. Danach kann die Achse verschwinden. </li>
<li>Nun noch überflüssiges “Rauschen” wie die Rahmen, Achsenteilstriche und die Beschriftung der Kopfzeilen entfernen. Außerdem habe ich die horizontale Achse etwas dicker dargestellt. </li>
</ol>
<p>Die Aussage der Visualisierung hat sich nicht verändert, jedoch wird mein Auge nun von wesentlich weniger Details beeinflusst, die mit der Aussage nichts zu tun haben.</p>
<p>&#160;</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 769px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Saeulen " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Saeulen/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="769" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/Saeulen" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Saeulen/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/Saeulen" target="_blank">Powered by Tableau</a></div>
</p></div>
<p>&#160;</p>
<p>Nun das “3D-Glas-Tortendiagramm”.</p>
<ol>
<li>Die Kennzahl in den Pivotbereich ziehen und die Altersgruppen auf die Spalten legen. Über ShowMe! ein Kreisdiagramm erstellen und die Kennzahl zusätzlich auf die Beschriftung legen. </li>
<li>Tableau kann auch Kreisdiagramme, was sie trotzdem nicht besser macht.      <br />Der Versuch, mir über ein berechnetes Element ein schöne Beschriftung zu erstellen macht das Kreisdiagramm leider auch nicht besser :&quot;Altersgruppe &quot;+[Altersgruppe] + &quot;: &quot;+str(round([Prozent]*100,0))+&quot;%&quot;
<p>Die Standard-Schnellinfo von Tableau (mit der Maus über eine Fläche fahren) ist deutlich besser geeignet als das neue Feld für die Beschriftung.</p>
</li>
<li>Alternative zu dem Kreisdiagramm könnte zum Beispiel ein Balkendiagramm sein: Altersgruppen auf die Zeilen, Kennzahl auf die Spalten und mit ShowMe! ein Balkendiagramm erstellen. </li>
<li>Jetzt wird noch aufgeräumt und die Aussagekraft gesteigert.      <br />Die Kennzahl zusätzlich auf die Beschriftungen, dann kann auch die Achse entfernt werden. Die Überschrift der Altersgruppen wird auch nicht benötigt. Die Balken werden schwarz für IST dargestellt. </li>
<li>Die Rahmen noch entfernen und schon haben wir die Aussagekraft der ursprünglichen Kreisdarstellung um ein vielfaches gesteigert. Wir wissen nun genau, auf welche Information es ankommt und auch das Größenverhältnis wird viel deutlicher wahrgenommen als noch bei dem Kreisdiagramm. </li>
</ol>
<p>&#160;</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 669px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Pie " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Pie/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="669" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/Pie" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Pie/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/Pie" target="_blank">Powered by Tableau</a></div>
</p></div>
<p>&#160;</p>
<p>Nun zu dem Ranking der Länder. Mal sehen, was daraus machen kann.</p>
<ol>
<li>Länder sortiert nach der Kennzahl auf die Zeilen und die Kennzahl in den Pivotbereich. </li>
<li>Die Kennzahl ein zweites mal in den Pivotbereich bringen und die Berechnung ändern in “Prozent der Gesamtsumme”. Um die Position einen Landes darzustellen erstelle ich ein berechnetes Feld mit der Funktion index() und lege dieses vor die Länder auf den Spalten ab.      <br />Als reine Listendarstellen hätte ich bereits einen Mehrwert geschaffen, in dem ich durch die Prozentangabe die absolute Zahl besser bewerten kann. </li>
<li>Dieses könnte aber auch durch ein Balkendiagramm erreicht werden. ShowMe! sei Dank ist dieses nur zwei Klicks entfernt. Den Prozentwert&#160; entferne ich wieder, das Verhältnis drücken nun die Balken aus. Die Kennzahl noch auf die Beschriftung und das Zahlenformat auf eine Dezimalstelle einstellen. </li>
<li>Um den Informationsgehalt der View zu steigern, möchte ich noch eine Linie darstellen, die die Top 10 Länder von den übrigen trennt.      <br />Ein neues berechnetes Feld mit der Formel iif([Rank]&lt;=10, &quot;Top&quot;, &quot;Other&quot;) erstellen und dieses auf die Zeilen legen. Die Sortierreihenfolge von Top10 und Other noch manuell korrigieren und die View ist fertig. </li>
</ol>
<p>&#160;</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 969px" class="tableauPlaceholder">
<p><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Beispiel für die Darstellung des Rankings sowie deren Erstellung " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Rank/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="969" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/Rank" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/Rank/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></p>
</p></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/Rank" target="_blank">Powered by Tableau</a></div>
</p></div>
<p>&#160;</p>
<p>Zum Abschluss dann noch zwei Ideen, was man auf Basis der gleichen Daten auch noch hätte machen können.    <br />Zum einen ein “Tuning” des Länderrankings.     <br />Diese Liste ist für meinen Geschmack zu lang, weshalb ich einen Parameter definiert habe. Mit diesem lässt sich einstellen, wie viele Länder (beginnend von dem mit den meisten Usern) angezeigt werden sollen. Alle anderen werden unter &#8216;Other&#8217; zusammengefasst und die Userzahlen summiert. </p>
<p>Zum anderen eine Darstellung der Userzahlen auf einer Karte (wenn man die Länderinformation schon hat). Kartendarstellungen sind generell schon eine Frage des persönlichen Geschmacks. Die Gestaltung einer Karte, lässt dann nochmals sehr viel Spielraum. Wesentlich sollte hierbei auf jeden Fall sein, die Nachricht die dem Betrachter übermittelt werden soll klar darzustellen.</p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 1069px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="TopN " src="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/TopN/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="1069" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="NachbauFacebookVIZ/TopN" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Na/NachbauFacebookVIZ/TopN/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/NachbauFacebookVIZ/TopN" target="_blank">Powered by Tableau</a></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/05/nachbau-einer-facebook-visualisierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualisierungsbeispiele f&#252;r S&#228;ulen und Balken</title>
		<link>http://blog.oraylis.de/2012/05/visualisierungsbeispiele-fr-sulen-und-balken/</link>
		<comments>http://blog.oraylis.de/2012/05/visualisierungsbeispiele-fr-sulen-und-balken/#comments</comments>
		<pubDate>Fri, 04 May 2012 20:50:32 +0000</pubDate>
		<dc:creator>David Claßen</dc:creator>
				<category><![CDATA[Tableau]]></category>
		<category><![CDATA[Balken]]></category>
		<category><![CDATA[Barchart]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Hichert]]></category>
		<category><![CDATA[Säulen]]></category>
		<category><![CDATA[Visual BI]]></category>
		<category><![CDATA[Wasserfall]]></category>
		<category><![CDATA[Waterfall]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1785</guid>
		<description><![CDATA[<p>Angeregt durch die klasse aussehenden und mit ReportingServives erstellten Charts von Hilmar wollte ich wissen, ob und wie dieses mit Tableau zu realisieren ist. Das Ergebnis kann nachfolgend betrachtet werden.</p>
<p>Die einzelnen Views habe ich in Anlehnung an die Success-Rules von Prof. Dr. Rolf Hichert umgesetzt. An einigen Stellen habe ich jedoch bewusst unterschiedliche Formatierungen für zum Beispiel die Achsen oder weitere Chart-Rahmen verwendet, um hier die unterschiedlichen Möglichkeiten aufzuzeigen.</p>
<p>Damit es auch ein bisschen zu klicken gibt, habe ich für die ersten Charts einen Monatsfilter eingebaut, über den sich die dargestellten Monate beeinflussen lassen. Zu sehen ist dann vor allem, dass sich die Abweichungen mit Bezug auf den Vormonat verändern.    <br />Des Weiteren habe ich eine Highlighting-Action in das Dashboard eingebaut. Mit nur wenigen Klicks in Tableau ist es nun möglich, auf dem gesamten Dashboard ein Element durch anklicken auszuwählen. Dadurch wird das gewählte Element in allen Views auf dem Dashboard hervorgehoben. </p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 2069px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Unterschiedlichste Darstellungen von Säulen und Balken " src="http://public.tableausoftware.com/static/images/Fo/FormattingBarsAndDifferences/DifferentKindOfBars/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="2069" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="FormattingBarsAndDifferences/DifferentKindOfBars" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Fo/FormattingBarsAndDifferences/DifferentKindOfBars/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/FormattingBarsAndDifferences/DifferentKindOfBars" target="_blank">Powered by Tableau</a></div>
</p></div>
<div style="display:block"><small><em>by David Claßen <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F05%2Fvisualisierungsbeispiele-fr-sulen-und-balken%2F&amp;linkname=Visualisierungsbeispiele%20f%26uuml%3Br%20S%26auml%3Bulen%20und%20Balken"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p>Angeregt durch die klasse aussehenden und mit ReportingServives erstellten Charts von Hilmar wollte ich wissen, ob und wie dieses mit Tableau zu realisieren ist. Das Ergebnis kann nachfolgend betrachtet werden.</p>
<p>Die einzelnen Views habe ich in Anlehnung an die Success-Rules von Prof. Dr. Rolf Hichert umgesetzt. An einigen Stellen habe ich jedoch bewusst unterschiedliche Formatierungen für zum Beispiel die Achsen oder weitere Chart-Rahmen verwendet, um hier die unterschiedlichen Möglichkeiten aufzuzeigen.</p>
<p>Damit es auch ein bisschen zu klicken gibt, habe ich für die ersten Charts einen Monatsfilter eingebaut, über den sich die dargestellten Monate beeinflussen lassen. Zu sehen ist dann vor allem, dass sich die Abweichungen mit Bezug auf den Vormonat verändern.    <br />Des Weiteren habe ich eine Highlighting-Action in das Dashboard eingebaut. Mit nur wenigen Klicks in Tableau ist es nun möglich, auf dem gesamten Dashboard ein Element durch anklicken auszuwählen. Dadurch wird das gewählte Element in allen Views auf dem Dashboard hervorgehoben. </p>
<p> <script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<div style="width: 654px; height: 2069px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="Unterschiedlichste Darstellungen von Säulen und Balken " src="http://public.tableausoftware.com/static/images/Fo/FormattingBarsAndDifferences/DifferentKindOfBars/1_rss.png" /></a></noscript><object class="tableauViz" width="654" height="2069" style="display:none;"><param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F" /><param name="site_root" value="" /><param name="name" value="FormattingBarsAndDifferences/DifferentKindOfBars" /><param name="tabs" value="no" /><param name="toolbar" value="yes" /><param name="static_image" value="http://public.tableausoftware.com/static/images/Fo/FormattingBarsAndDifferences/DifferentKindOfBars/1.png" /><param name="animate_transition" value="yes" /><param name="display_static_image" value="yes" /><param name="display_spinner" value="yes" /><param name="display_overlay" value="yes" /><param name="display_count" value="yes" /></object></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/FormattingBarsAndDifferences/DifferentKindOfBars" target="_blank">Powered by Tableau</a></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/05/visualisierungsbeispiele-fr-sulen-und-balken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some more Reporting Services charts</title>
		<link>http://blog.oraylis.de/2012/04/some-more-reporting-services-charts/</link>
		<comments>http://blog.oraylis.de/2012/04/some-more-reporting-services-charts/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 11:33:56 +0000</pubDate>
		<dc:creator>Hilmar Buchta</dc:creator>
				<category><![CDATA[MS SSRS]]></category>
		<category><![CDATA[Charts]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1777</guid>
		<description><![CDATA[<p align="right">SQL Server 2008-2012</p>
<p>To finish my current Reporting Services mini series in this blog, here are some more charts I recently created using SSRS (this is just a list, I did not include titles and they make no sense in this combination). Most charts here make use of the range chart type which allows very flexible positioning of the bars.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image15.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb15.png" width="244" height="98" /></a><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image16.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb16.png" width="244" height="101" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image17.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb17.png" width="244" height="121" /></a><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image18.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb18.png" width="244" height="100" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image19.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb19.png" width="244" height="93" /></a>&#160;<a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image20.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb20.png" width="244" height="84" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image21.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb21.png" width="487" height="73" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image22.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb22.png" width="244" height="141" /></a><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image23.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb23.png" width="244" height="136" /></a></p>
<p>And I also like to refer <a href="http://blog.oraylis.de/2010/06/using-visio-and-ssrs-map-reports-for-store-layouts-etc/" target="_blank">to my older blog post</a> about using the map functionality of SSRS to display all kind of stuff. The example below is taken from this post. It shows a level in a park house together with the utilization of each single parking slot (based on data from a data base). The layout and all elements like the barriers, the arrows and the text have been created using Microsoft Visio.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image24.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb24.png" width="537" height="421" /></a></p>
<div style="display:block"><small><em>by Hilmar Buchta <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F04%2Fsome-more-reporting-services-charts%2F&amp;linkname=Some%20more%20Reporting%20Services%20charts"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p align="right">SQL Server 2008-2012</p>
<p>To finish my current Reporting Services mini series in this blog, here are some more charts I recently created using SSRS (this is just a list, I did not include titles and they make no sense in this combination). Most charts here make use of the range chart type which allows very flexible positioning of the bars.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image15.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb15.png" width="244" height="98" /></a><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image16.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb16.png" width="244" height="101" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image17.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb17.png" width="244" height="121" /></a><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image18.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb18.png" width="244" height="100" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image19.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb19.png" width="244" height="93" /></a>&#160;<a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image20.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb20.png" width="244" height="84" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image21.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb21.png" width="487" height="73" /></a></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image22.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb22.png" width="244" height="141" /></a><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image23.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb23.png" width="244" height="136" /></a></p>
<p>And I also like to refer <a href="http://blog.oraylis.de/2010/06/using-visio-and-ssrs-map-reports-for-store-layouts-etc/" target="_blank">to my older blog post</a> about using the map functionality of SSRS to display all kind of stuff. The example below is taken from this post. It shows a level in a park house together with the utilization of each single parking slot (based on data from a data base). The layout and all elements like the barriers, the arrows and the text have been created using Microsoft Visio.</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image24.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb24.png" width="537" height="421" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/04/some-more-reporting-services-charts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Die deutschen Fu&#223;ballmeister mit Tableau visualisiert</title>
		<link>http://blog.oraylis.de/2012/04/die-deutschen-fuballmeister-mit-tableau-visualisiert/</link>
		<comments>http://blog.oraylis.de/2012/04/die-deutschen-fuballmeister-mit-tableau-visualisiert/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 18:51:45 +0000</pubDate>
		<dc:creator>David Claßen</dc:creator>
				<category><![CDATA[Tableau]]></category>
		<category><![CDATA[deutscher Meister]]></category>
		<category><![CDATA[Visual BI]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1753</guid>
		<description><![CDATA[<p>&#160;</p>
<p>Die Bundesliga Saison 2011/2012 ist entschieden. Borussia Dortmund steht als “neuer alter” deutscher Meister bereits vor dem regulären Ende der laufenden Spielzeit fest und konnte damit den Titel erfolgreich verteidigen.   <br />Bei all den Diskussionen im Freundeskreis und mit den Arbeitskollegen zu diesem Thema kamen immer wieder Fragen auf, die sich darum drehten, welche Mannschaft denn nun wie oft Meister geworden ist.</p>
<p>Diese Fragestellung habe ich aufgenommen und das Ergebnis mit Tableau Desktop visualisiert:</p>
<p>&#160;</p>
<div style="width: 654px; height: 1769px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="MeisterDashboard " src="http://public.tableausoftware.com/static/images/de/deutscheFussballmeister/MeisterDashboard/1_rss.png" /></a></noscript></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/deutscheFussballmeister/MeisterDashboard" target="_blank">Powered by Tableau</a></div>
</p></div>
<div style="display:block"><small><em>by David Claßen <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F04%2Fdie-deutschen-fuballmeister-mit-tableau-visualisiert%2F&amp;linkname=Die%20deutschen%20Fu%26szlig%3Bballmeister%20mit%20Tableau%20visualisiert"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Die Bundesliga Saison 2011/2012 ist entschieden. Borussia Dortmund steht als “neuer alter” deutscher Meister bereits vor dem regulären Ende der laufenden Spielzeit fest und konnte damit den Titel erfolgreich verteidigen.   <br />Bei all den Diskussionen im Freundeskreis und mit den Arbeitskollegen zu diesem Thema kamen immer wieder Fragen auf, die sich darum drehten, welche Mannschaft denn nun wie oft Meister geworden ist.</p>
<p>Diese Fragestellung habe ich aufgenommen und das Ergebnis mit Tableau Desktop visualisiert:</p>
<p>&#160;</p>
<div style="width: 654px; height: 1769px" class="tableauPlaceholder"><noscript><a href="#"><img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" alt="MeisterDashboard " src="http://public.tableausoftware.com/static/images/de/deutscheFussballmeister/MeisterDashboard/1_rss.png" /></a></noscript></div>
<div style="padding-bottom: 0px; padding-left: 0px; width: 654px; padding-right: 10px; font: 8pt verdana,helvetica,arial,sans-serif; height: 22px; color: black; padding-top: 0px">
<div style="padding-right: 8px; float: right"><a href="http://www.tableausoftware.com/public?ref=http://public.tableausoftware.com/views/deutscheFussballmeister/MeisterDashboard" target="_blank">Powered by Tableau</a></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/04/die-deutschen-fuballmeister-mit-tableau-visualisiert/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Kommaseparierte Gruppenzusammenfassung</title>
		<link>http://blog.oraylis.de/2012/04/kommaseparierte-gruppenzusammenfassung/</link>
		<comments>http://blog.oraylis.de/2012/04/kommaseparierte-gruppenzusammenfassung/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 13:40:24 +0000</pubDate>
		<dc:creator>Arno Cebulla</dc:creator>
				<category><![CDATA[MS SSRS]]></category>
		<category><![CDATA[Gruppen]]></category>
		<category><![CDATA[Join]]></category>
		<category><![CDATA[Kommasepariert]]></category>
		<category><![CDATA[LookupSet]]></category>
		<category><![CDATA[SSRS 2008 R2]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1713</guid>
		<description><![CDATA[<p>In Reporting Services ab Version 2008 R2 lassen sich in einer Tabelle kommaseparierte Gruppenzusammenfassungen erzeugen. Das Ergebnis soll nachher so aussehen:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/Ergebnis.gif"><img class="alignleft  wp-image-1714" src="http://blog.oraylis.de/wp-content/uploads/2012/04/Ergebnis.gif" alt="" width="612" height="118" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>In dieser Inventar-Liste wird der Inhalt der Gruppe &#8220;Ort&#8221; in der Spalte &#8220;Orte&#8221; als kommaseparierte Zusammenfassung angezeigt.</p>
<p>Zunächst wird ein DataSet &#8220;Inventar&#8221; mit folgendem einfachen Query erstellt:</p>
<p style="text-align: left"><em>SELECT     &#8216;Möbel&#8217; AS Kategorie, &#8216;Stuhl&#8217; AS Bezeichnung, &#8216;Küche&#8217; AS Ort, 2 AS Menge </em><em>UNION </em><em> SELECT     &#8216;Möbel&#8217;, &#8216;Stuhl&#8217;, &#8216;Esszimmer&#8217;, 8 </em><em>UNION  </em><em>SELECT     &#8216;Möbel&#8217;, &#8216;Stuhl&#8217;, &#8216;Wohzimmer&#8217;, 2 </em><em>UNION </em><em> SELECT     &#8216;Möbel&#8217;, &#8216;Tisch&#8217;, &#8216;Küche&#8217;, 1 </em><em>UNION </em><em>SELECT     &#8216;Möbel&#8217; , &#8216;Tisch&#8217;, &#8216;Esszimmer&#8217;, 1 </em><em>UNION </em><em>SELECT     &#8216;Elektrogeräte&#8217;, &#8216;Kühlschrank&#8217;, &#8216;Küche&#8217;, 1 </em><em>UNION </em><em>SELECT     &#8216;Elektrogeräte&#8217;, &#8216;Kühlschrank&#8217;, &#8216;Keller&#8217;, 1 </em><em>UNION </em><em> SELECT     &#8216;Elektrogeräte&#8217;, &#8216;Kühlschrank&#8217;, &#8216;Garage&#8217;, 1 </em></p>
<p style="text-align: left">Als erster Schritt wird das Matrix-Element auf den Report gezogen. Die Felder Ort und Menge werden eingefügt:</p>
<p style="text-align: left"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/Matrix.gif"><img class="size-full wp-image-1726 alignnone" src="http://blog.oraylis.de/wp-content/uploads/2012/04/Matrix.gif" alt="" width="272" height="167" /></a></p>
<p style="text-align: left">Als nächstes wird nun die Gruppe &#8220;Orte&#8221; eingefügt. Hierfür wird auf der vorhandenen Gruppe &#8220;Ort&#8221; eine übergeordnete Gruppe eingefügt:</p>
<p style="text-align: left"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/Gruppe1.gif"><img class=" wp-image-1728 alignnone" src="http://blog.oraylis.de/wp-content/uploads/2012/04/Gruppe1.gif" alt="" width="632" height="120" /></a></p>
<p style="text-align: left">Gruppiert wird diese Gruppe mit folgendem Ausdruck:</p>
<p style="text-align: left"><em>=JOIN(LookupSet(Fields!Kategorie.Value &amp; Fields!Bezeichnung.Value,Fields!Kategorie.Value &amp; Fields!Bezeichnung.Value,Fields!Ort.Value, &#8220;Inventar&#8221;),&#8221;,&#8221;) </em></p>
<p> Was passiert nun hier im Einzelnen?</p>
<ul>
<li>Funktion &#8220;JOIN&#8221;: Die Syntax hierzu lautet <em>JOIN(&lt;SourceArray&gt;,&lt;Delimiter&gt;) . </em>Diese Funktion separiert eine Auflistung durch ein bestimmtes Zeichen. JOIN wird häufig verwendet, um Multivalue-Parameter anzuzeigen. Wäre in diesem Beispiel &#8220;Ort&#8221; ein Parameter mit Multivalue und sollte kommasepariert angezeigt werden, würde der Ausdruck so lauten: JOIN(Parameter!Ort.Value,&#8221;,&#8221;).</li>
<li>Funktion &#8220;LookupSet&#8221;: Syntax:<em> LookupSet(&lt;Expression1&gt;,&lt;Expression2&gt;,&lt;Expression3&gt;,&lt;Scope&gt;).</em> Die Funktion führt ein 1-to-many-Lookup aus. In diesem Beispiel wird die Kombination aus den Gruppen Kategorie und Bezeichnung des Resultsets (Expression1) gegen die gleiche Kombinationen des gesamten DataSets (Expression2) gestellt. Angezeigt werden soll der Ort (Expression3). Der Scope ist der Name des DataSets &#8221;Inventar&#8221; und bezieht sich auf Expression2 und Expression3. Natürlich kann sich der Scope auch auf ein anderes vorhandenes DataSet beziehen.</li>
</ul>
<p>Die Kombination dieser beiden Funktionen ergibt dann den Ausdruck, um die kommaseparierten Orte anzuzeigen. Wenn dann die anderen beiden Gruppen eingefügt werden und die Drilldown-Funktion implementiert wird, ergibt sich die am Anfang dieses Eintrags gezeigte Tabelle:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/GruppeKomplett.gif"><img class=" wp-image-1743 alignnone" src="http://blog.oraylis.de/wp-content/uploads/2012/04/GruppeKomplett.gif" alt="" width="643" height="139" /></a></p>
<p>Die Summen werden dann entsprechend der jeweils angezeigten Gruppe gebildet.</p>
<div style="display:block"><small><em>by Arno Cebulla <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F04%2Fkommaseparierte-gruppenzusammenfassung%2F&amp;linkname=Kommaseparierte%20Gruppenzusammenfassung"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p>In Reporting Services ab Version 2008 R2 lassen sich in einer Tabelle kommaseparierte Gruppenzusammenfassungen erzeugen. Das Ergebnis soll nachher so aussehen:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/Ergebnis.gif"><img class="alignleft  wp-image-1714" src="http://blog.oraylis.de/wp-content/uploads/2012/04/Ergebnis.gif" alt="" width="612" height="118" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>In dieser Inventar-Liste wird der Inhalt der Gruppe &#8220;Ort&#8221; in der Spalte &#8220;Orte&#8221; als kommaseparierte Zusammenfassung angezeigt.</p>
<p>Zunächst wird ein DataSet &#8220;Inventar&#8221; mit folgendem einfachen Query erstellt:</p>
<p style="text-align: left"><em>SELECT     &#8216;Möbel&#8217; AS Kategorie, &#8216;Stuhl&#8217; AS Bezeichnung, &#8216;Küche&#8217; AS Ort, 2 AS Menge </em><em>UNION </em><em> SELECT     &#8216;Möbel&#8217;, &#8216;Stuhl&#8217;, &#8216;Esszimmer&#8217;, 8 </em><em>UNION  </em><em>SELECT     &#8216;Möbel&#8217;, &#8216;Stuhl&#8217;, &#8216;Wohzimmer&#8217;, 2 </em><em>UNION </em><em> SELECT     &#8216;Möbel&#8217;, &#8216;Tisch&#8217;, &#8216;Küche&#8217;, 1 </em><em>UNION </em><em>SELECT     &#8216;Möbel&#8217; , &#8216;Tisch&#8217;, &#8216;Esszimmer&#8217;, 1 </em><em>UNION </em><em>SELECT     &#8216;Elektrogeräte&#8217;, &#8216;Kühlschrank&#8217;, &#8216;Küche&#8217;, 1 </em><em>UNION </em><em>SELECT     &#8216;Elektrogeräte&#8217;, &#8216;Kühlschrank&#8217;, &#8216;Keller&#8217;, 1 </em><em>UNION </em><em> SELECT     &#8216;Elektrogeräte&#8217;, &#8216;Kühlschrank&#8217;, &#8216;Garage&#8217;, 1 </em></p>
<p style="text-align: left">Als erster Schritt wird das Matrix-Element auf den Report gezogen. Die Felder Ort und Menge werden eingefügt:</p>
<p style="text-align: left"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/Matrix.gif"><img class="size-full wp-image-1726 alignnone" src="http://blog.oraylis.de/wp-content/uploads/2012/04/Matrix.gif" alt="" width="272" height="167" /></a></p>
<p style="text-align: left">Als nächstes wird nun die Gruppe &#8220;Orte&#8221; eingefügt. Hierfür wird auf der vorhandenen Gruppe &#8220;Ort&#8221; eine übergeordnete Gruppe eingefügt:</p>
<p style="text-align: left"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/Gruppe1.gif"><img class=" wp-image-1728 alignnone" src="http://blog.oraylis.de/wp-content/uploads/2012/04/Gruppe1.gif" alt="" width="632" height="120" /></a></p>
<p style="text-align: left">Gruppiert wird diese Gruppe mit folgendem Ausdruck:</p>
<p style="text-align: left"><em>=JOIN(LookupSet(Fields!Kategorie.Value &amp; Fields!Bezeichnung.Value,Fields!Kategorie.Value &amp; Fields!Bezeichnung.Value,Fields!Ort.Value, &#8220;Inventar&#8221;),&#8221;,&#8221;) </em></p>
<p> Was passiert nun hier im Einzelnen?</p>
<ul>
<li>Funktion &#8220;JOIN&#8221;: Die Syntax hierzu lautet <em>JOIN(&lt;SourceArray&gt;,&lt;Delimiter&gt;) . </em>Diese Funktion separiert eine Auflistung durch ein bestimmtes Zeichen. JOIN wird häufig verwendet, um Multivalue-Parameter anzuzeigen. Wäre in diesem Beispiel &#8220;Ort&#8221; ein Parameter mit Multivalue und sollte kommasepariert angezeigt werden, würde der Ausdruck so lauten: JOIN(Parameter!Ort.Value,&#8221;,&#8221;).</li>
<li>Funktion &#8220;LookupSet&#8221;: Syntax:<em> LookupSet(&lt;Expression1&gt;,&lt;Expression2&gt;,&lt;Expression3&gt;,&lt;Scope&gt;).</em> Die Funktion führt ein 1-to-many-Lookup aus. In diesem Beispiel wird die Kombination aus den Gruppen Kategorie und Bezeichnung des Resultsets (Expression1) gegen die gleiche Kombinationen des gesamten DataSets (Expression2) gestellt. Angezeigt werden soll der Ort (Expression3). Der Scope ist der Name des DataSets &#8221;Inventar&#8221; und bezieht sich auf Expression2 und Expression3. Natürlich kann sich der Scope auch auf ein anderes vorhandenes DataSet beziehen.</li>
</ul>
<p>Die Kombination dieser beiden Funktionen ergibt dann den Ausdruck, um die kommaseparierten Orte anzuzeigen. Wenn dann die anderen beiden Gruppen eingefügt werden und die Drilldown-Funktion implementiert wird, ergibt sich die am Anfang dieses Eintrags gezeigte Tabelle:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/GruppeKomplett.gif"><img class=" wp-image-1743 alignnone" src="http://blog.oraylis.de/wp-content/uploads/2012/04/GruppeKomplett.gif" alt="" width="643" height="139" /></a></p>
<p>Die Summen werden dann entsprechend der jeweils angezeigten Gruppe gebildet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/04/kommaseparierte-gruppenzusammenfassung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSRS Custom Drawing (Code)</title>
		<link>http://blog.oraylis.de/2012/04/ssrs-custom-drawing-code/</link>
		<comments>http://blog.oraylis.de/2012/04/ssrs-custom-drawing-code/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 06:24:22 +0000</pubDate>
		<dc:creator>Hilmar Buchta</dc:creator>
				<category><![CDATA[MS SSRS]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Microcharts]]></category>
		<category><![CDATA[Reporting]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1707</guid>
		<description><![CDATA[<p align="right">SQL Server 2005 &#8211; 2012</p>
<p>After my <a href="http://ms-olap.blogspot.com/2012/04/ssrs-custom-drawing.html" target="_blank">last blog post</a>, I got a lot of requests for the code I used for the graphics. So this post just shows the source code for the graphics of my last post.</p>
<p>Both examples require that you include a reference to System.Drawing to your report as shown below:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image5.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb5.png" width="244" height="189" /></a></p>
<p>&#160;</p>
<p><strong><font size="3">1. The deviation chart element</font></strong></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image6.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb6.png" width="244" height="109" /></a></p>
<p>Here is the code used for the last column’s image:</p>
<p><font face="Courier New">Function PaintAbw(ByVal width As Integer, ByVal height As Integer, ByVal min As Single, ByVal max As Single, ByVal middle As Single, ByVal cur As Single) As System.Drawing.Bitmap      <br />&#160;&#160;&#160; &#8216; Draws a vertical deviation chart       <br />&#160;&#160;&#160; &#8216; parameters       <br />&#160;&#160;&#160; &#8216;&#160;&#160; width/height&#160;&#160; width and height of the resulting image in pixel       <br />&#160;&#160;&#160; &#8216;&#160;&#160; min/max&#160;&#160;&#160;&#160;&#160;&#160;&#160; minimum and maximum value of the data being passed to the chart       <br />&#160;&#160;&#160; &#8216;&#160;&#160; middle&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; position of the vertical reference line (usually zero or avg of the data)       <br />&#160;&#160;&#160; &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; data points below this value are plotted in red, above this value in blue       <br />&#160;&#160;&#160; &#8216;&#160;&#160; cur&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; actual value to display</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Dim objBitmap As System.Drawing.Bitmap      <br />&#160;&#160;&#160; Dim objGraphic As System.Drawing.Graphics       <br />&#160;&#160;&#160; Dim myBrush As System.Drawing.Brush       <br />&#160;&#160;&#160; Dim x0 As Integer, x As Integer</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Initialize the graphic      <br />&#160;&#160;&#160; objBitmap = New System.Drawing.Bitmap(width, height)       <br />&#160;&#160;&#160; objGraphic = System.Drawing.Graphics.FromImage(objBitmap)       <br />&#160;&#160;&#160; objGraphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias       <br />&#160;&#160;&#160; objGraphic.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Draw the vertical line (the &quot;middle&quot; position)      <br />&#160;&#160;&#160; x0 = 8 + ((width &#8211; 18) * (middle &#8211; min)) \ (max &#8211; min)       <br />&#160;&#160;&#160; objGraphic.DrawLine(System.Drawing.Pens.Gray, x0, 0, x0, height)       <br />&#160;&#160;&#160; If cur &lt; min Then cur = min       <br />&#160;&#160;&#160; If cur &gt; max Then cur = max</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Draw the deviation (line and circle)      <br />&#160;&#160;&#160; x = 8 + ((width &#8211; 18) * (cur &#8211; min)) \ (max &#8211; min)       <br />&#160;&#160;&#160; objGraphic.DrawLine(System.Drawing.Pens.Gray, x0, height \ 2, x, height \ 2)       <br />&#160;&#160;&#160; If cur &lt; middle Then       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; myBrush = New System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(215, 100, 100))       <br />&#160;&#160;&#160; Else       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; myBrush = New System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(100, 100, 215))       <br />&#160;&#160;&#160; End If       <br />&#160;&#160;&#160; objGraphic.FillPie(myBrush, x &#8211; 4, height \ 2 &#8211; 4, 8, 8, 0, 360)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Return the image as type bitmap      <br />&#160;&#160;&#160; Return objBitmap       <br />End Function</font></p>
<p><font face="Courier New">Function PaintAbwBmp(ByVal width As Integer, ByVal height As Integer, ByVal min As Single, ByVal max As Single, ByVal middle As Single, ByVal cur As Single) As Byte()      <br />&#160;&#160;&#160; &#8216; Wrapper function for PaintAbw. This function is to be called from reporting services as       <br />&#160;&#160;&#160; &#8216; for parameters see PaintAbw</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Dim bmpImage As System.Drawing.Bitmap</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Get bitmap from PaintAbw      <br />&#160;&#160;&#160; bmpImage = PaintAbw(width, height, min, max, middle, cur)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Convert this bitmap to a byte array of type BMP      <br />&#160;&#160;&#160; Dim stream As System.IO.MemoryStream = New IO.MemoryStream       <br />&#160;&#160;&#160; Dim bitmapBytes As Byte()       <br />&#160;&#160;&#160; bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp)       <br />&#160;&#160;&#160; bitmapBytes = stream.ToArray       <br />&#160;&#160;&#160; stream.Close()       <br />&#160;&#160;&#160; bmpImage.Dispose()       <br />&#160;&#160;&#160; Return bitmapBytes       <br />End Function</font>     </p>
<p><strong>Examples</strong></p>
<table border="0" cellspacing="0" cellpadding="2" width="528">
<tbody>
<tr>
<td valign="top" width="425">PaintAbw(100, 20, -100.0, 100.0, 0.0, 50.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image7.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb7.png" width="102" height="21" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintAbw(100, 20, 0.0, 100.0, 0.0, 80.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image8.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb8.png" width="100" height="21" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintAbw(100, 20, -100.0, 100.0, 0.0, -80.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image9.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb9.png" width="102" height="21" /></a></td>
</tr>
</tbody>
</table>
<p>Usage within the report as the source for a bitmap</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image10.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb10.png" width="244" height="221" /></a></p>
<p><strong>Sample Expression:</strong></p>
<p>=Code.PaintAbwBmp(100,20,Min(Fields!Value.Value, &quot;DataSet1&quot;),Max(Fields!Value.Value, &quot;DataSet1&quot;), Avg(Fields!Value.Value, &quot;DataSet1&quot;), Fields!Value.Value)</p>
<p>&#160;</p>
<p><strong><font size="3">2. The KPI slider</font></strong></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image11.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb11.png" width="244" height="53" /></a></p>
<p>Here is the code used for the last column’s image:</p>
<p><font face="Courier New">Function PaintBox(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As System.Drawing.Bitmap      <br />&#160;&#160;&#160; &#8216; Draws a range chart (blending from red to green)       <br />&#160;&#160;&#160; &#8216; parameters       <br />&#160;&#160;&#160; &#8216;&#160;&#160; width/height&#160;&#160; width and height of the resulting image in pixel       <br />&#160;&#160;&#160; &#8216;&#160;&#160; min/max&#160;&#160;&#160;&#160;&#160;&#160;&#160; minimum and maximum value of the data being passed to the chart       <br />&#160;&#160;&#160; &#8216;&#160;&#160; level&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; position of slide       <br />&#160;&#160;&#160; &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0: left, 1: right, 0.5 middle       <br />&#160;&#160;&#160; &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; make sure you scale this value to your needs</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Dim objBitmap As System.Drawing.Bitmap      <br />&#160;&#160;&#160; Dim objGraphic As System.Drawing.Graphics</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Initialize the graphic      <br />&#160;&#160;&#160; objBitmap = New System.Drawing.Bitmap(width, height)       <br />&#160;&#160;&#160; objGraphic = System.Drawing.Graphics.FromImage(objBitmap)       <br />&#160;&#160;&#160; objGraphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias       <br />&#160;&#160;&#160; objGraphic.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Create color gradient for the background      <br />&#160;&#160;&#160; Dim BrushRedYellow As New System.Drawing.Drawing2D.LinearGradientBrush(New System.Drawing.Rectangle(8, 0, (width &#8211; 16) \ 2, height), System.Drawing.Color.Red, System.Drawing.Color.Yellow, System.Drawing.Drawing2D.LinearGradientMode.Horizontal)       <br />&#160;&#160;&#160; Dim BrushYellowGreen As New System.Drawing.Drawing2D.LinearGradientBrush(New System.Drawing.Rectangle(7 + (width &#8211; 16) \ 2, 0, (width &#8211; 16) \ 2, height), System.Drawing.Color.Yellow, System.Drawing.Color.Green, System.Drawing.Drawing2D.LinearGradientMode.Horizontal)       <br />&#160;&#160;&#160; objGraphic.FillRectangle(BrushRedYellow, 8, 3, (width &#8211; 16) \ 2, height &#8211; 10)       <br />&#160;&#160;&#160; objGraphic.FillRectangle(BrushYellowGreen, 8 + (width &#8211; 16) \ 2, 3, (width &#8211; 16) \ 2, height &#8211; 10)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Scale level properly      <br />&#160;&#160;&#160; If level &gt; 1 Then level = 1       <br />&#160;&#160;&#160; If level &lt; 0 Then level = 0</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Draw the arrow      <br />&#160;&#160;&#160; Dim Arrow(2) As System.Drawing.PointF       <br />&#160;&#160;&#160; Arrow(0) = New System.Drawing.PointF(8 + (width &#8211; 16) * level, height &#8211; 10)       <br />&#160;&#160;&#160; Arrow(1) = New System.Drawing.PointF(16 + (width &#8211; 16) * level, height &#8211; 2)       <br />&#160;&#160;&#160; Arrow(2) = New System.Drawing.PointF(0 + (width &#8211; 16) * level, height &#8211; 2)       <br />&#160;&#160;&#160; objGraphic.FillPolygon(System.Drawing.Brushes.Black, Arrow)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Return the image as type bitmap      <br />&#160;&#160;&#160; Return objBitmap       <br />End Function</font></p>
<p><font face="Courier New">Function PaintBoxBmp(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As Byte()      <br />&#160;&#160;&#160; &#8216; Wrapper function for PaintBox. This function is to be called from reporting services as       <br />&#160;&#160;&#160; &#8216; for parameters see PaintBox       <br />&#160;&#160;&#160; Dim bmpImage As System.Drawing.Bitmap</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Get bitmap from PaintBox      <br />&#160;&#160;&#160; bmpImage = PaintBox(width, height, level)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Convert this bitmap to a byte array of type BMP      <br />&#160;&#160;&#160; Dim stream As System.IO.MemoryStream = New IO.MemoryStream       <br />&#160;&#160;&#160; Dim bitmapBytes As Byte()       <br />&#160;&#160;&#160; bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp)       <br />&#160;&#160;&#160; bitmapBytes = stream.ToArray       <br />&#160;&#160;&#160; stream.Close()       <br />&#160;&#160;&#160; bmpImage.Dispose()       <br />&#160;&#160;&#160; Return bitmapBytes       <br />End Function       <br /></font></p>
<p>&#160;</p>
<p><strong>Examples</strong></p>
<table border="0" cellspacing="0" cellpadding="2" width="528">
<tbody>
<tr>
<td valign="top" width="425">PaintBox(100, 20, 0.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image12.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb12.png" width="100" height="19" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintBox(100, 20, 1.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image13.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb13.png" width="101" height="20" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintBox(100, 20, 0.5)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image14.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb14.png" width="100" height="19" /></a></td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>=Code.PaintBoxBmp(100,20,Fields!Sales_Amount.Value/Fields!Sales_Amount_Quota.Value)</p>
<p><strong>Sample Expression:</strong></p>
<p>=Code.PaintAbwBmp(100,20,Min(Fields!Value.Value, &quot;DataSet1&quot;),Max(Fields!Value.Value, &quot;DataSet1&quot;), Avg(Fields!Value.Value, &quot;DataSet1&quot;), Fields!Value.Value)</p>
<div style="display:block"><small><em>by Hilmar Buchta <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F04%2Fssrs-custom-drawing-code%2F&amp;linkname=SSRS%20Custom%20Drawing%20%28Code%29"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p align="right">SQL Server 2005 &#8211; 2012</p>
<p>After my <a href="http://ms-olap.blogspot.com/2012/04/ssrs-custom-drawing.html" target="_blank">last blog post</a>, I got a lot of requests for the code I used for the graphics. So this post just shows the source code for the graphics of my last post.</p>
<p>Both examples require that you include a reference to System.Drawing to your report as shown below:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image5.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb5.png" width="244" height="189" /></a></p>
<p>&#160;</p>
<p><strong><font size="3">1. The deviation chart element</font></strong></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image6.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb6.png" width="244" height="109" /></a></p>
<p>Here is the code used for the last column’s image:</p>
<p><font face="Courier New">Function PaintAbw(ByVal width As Integer, ByVal height As Integer, ByVal min As Single, ByVal max As Single, ByVal middle As Single, ByVal cur As Single) As System.Drawing.Bitmap      <br />&#160;&#160;&#160; &#8216; Draws a vertical deviation chart       <br />&#160;&#160;&#160; &#8216; parameters       <br />&#160;&#160;&#160; &#8216;&#160;&#160; width/height&#160;&#160; width and height of the resulting image in pixel       <br />&#160;&#160;&#160; &#8216;&#160;&#160; min/max&#160;&#160;&#160;&#160;&#160;&#160;&#160; minimum and maximum value of the data being passed to the chart       <br />&#160;&#160;&#160; &#8216;&#160;&#160; middle&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; position of the vertical reference line (usually zero or avg of the data)       <br />&#160;&#160;&#160; &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; data points below this value are plotted in red, above this value in blue       <br />&#160;&#160;&#160; &#8216;&#160;&#160; cur&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; actual value to display</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Dim objBitmap As System.Drawing.Bitmap      <br />&#160;&#160;&#160; Dim objGraphic As System.Drawing.Graphics       <br />&#160;&#160;&#160; Dim myBrush As System.Drawing.Brush       <br />&#160;&#160;&#160; Dim x0 As Integer, x As Integer</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Initialize the graphic      <br />&#160;&#160;&#160; objBitmap = New System.Drawing.Bitmap(width, height)       <br />&#160;&#160;&#160; objGraphic = System.Drawing.Graphics.FromImage(objBitmap)       <br />&#160;&#160;&#160; objGraphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias       <br />&#160;&#160;&#160; objGraphic.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Draw the vertical line (the &quot;middle&quot; position)      <br />&#160;&#160;&#160; x0 = 8 + ((width &#8211; 18) * (middle &#8211; min)) \ (max &#8211; min)       <br />&#160;&#160;&#160; objGraphic.DrawLine(System.Drawing.Pens.Gray, x0, 0, x0, height)       <br />&#160;&#160;&#160; If cur &lt; min Then cur = min       <br />&#160;&#160;&#160; If cur &gt; max Then cur = max</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Draw the deviation (line and circle)      <br />&#160;&#160;&#160; x = 8 + ((width &#8211; 18) * (cur &#8211; min)) \ (max &#8211; min)       <br />&#160;&#160;&#160; objGraphic.DrawLine(System.Drawing.Pens.Gray, x0, height \ 2, x, height \ 2)       <br />&#160;&#160;&#160; If cur &lt; middle Then       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; myBrush = New System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(215, 100, 100))       <br />&#160;&#160;&#160; Else       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; myBrush = New System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(100, 100, 215))       <br />&#160;&#160;&#160; End If       <br />&#160;&#160;&#160; objGraphic.FillPie(myBrush, x &#8211; 4, height \ 2 &#8211; 4, 8, 8, 0, 360)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Return the image as type bitmap      <br />&#160;&#160;&#160; Return objBitmap       <br />End Function</font></p>
<p><font face="Courier New">Function PaintAbwBmp(ByVal width As Integer, ByVal height As Integer, ByVal min As Single, ByVal max As Single, ByVal middle As Single, ByVal cur As Single) As Byte()      <br />&#160;&#160;&#160; &#8216; Wrapper function for PaintAbw. This function is to be called from reporting services as       <br />&#160;&#160;&#160; &#8216; for parameters see PaintAbw</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Dim bmpImage As System.Drawing.Bitmap</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Get bitmap from PaintAbw      <br />&#160;&#160;&#160; bmpImage = PaintAbw(width, height, min, max, middle, cur)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Convert this bitmap to a byte array of type BMP      <br />&#160;&#160;&#160; Dim stream As System.IO.MemoryStream = New IO.MemoryStream       <br />&#160;&#160;&#160; Dim bitmapBytes As Byte()       <br />&#160;&#160;&#160; bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp)       <br />&#160;&#160;&#160; bitmapBytes = stream.ToArray       <br />&#160;&#160;&#160; stream.Close()       <br />&#160;&#160;&#160; bmpImage.Dispose()       <br />&#160;&#160;&#160; Return bitmapBytes       <br />End Function</font>     </p>
<p><strong>Examples</strong></p>
<table border="0" cellspacing="0" cellpadding="2" width="528">
<tbody>
<tr>
<td valign="top" width="425">PaintAbw(100, 20, -100.0, 100.0, 0.0, 50.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image7.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb7.png" width="102" height="21" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintAbw(100, 20, 0.0, 100.0, 0.0, 80.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image8.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb8.png" width="100" height="21" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintAbw(100, 20, -100.0, 100.0, 0.0, -80.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image9.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb9.png" width="102" height="21" /></a></td>
</tr>
</tbody>
</table>
<p>Usage within the report as the source for a bitmap</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image10.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb10.png" width="244" height="221" /></a></p>
<p><strong>Sample Expression:</strong></p>
<p>=Code.PaintAbwBmp(100,20,Min(Fields!Value.Value, &quot;DataSet1&quot;),Max(Fields!Value.Value, &quot;DataSet1&quot;), Avg(Fields!Value.Value, &quot;DataSet1&quot;), Fields!Value.Value)</p>
<p>&#160;</p>
<p><strong><font size="3">2. The KPI slider</font></strong></p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image11.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb11.png" width="244" height="53" /></a></p>
<p>Here is the code used for the last column’s image:</p>
<p><font face="Courier New">Function PaintBox(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As System.Drawing.Bitmap      <br />&#160;&#160;&#160; &#8216; Draws a range chart (blending from red to green)       <br />&#160;&#160;&#160; &#8216; parameters       <br />&#160;&#160;&#160; &#8216;&#160;&#160; width/height&#160;&#160; width and height of the resulting image in pixel       <br />&#160;&#160;&#160; &#8216;&#160;&#160; min/max&#160;&#160;&#160;&#160;&#160;&#160;&#160; minimum and maximum value of the data being passed to the chart       <br />&#160;&#160;&#160; &#8216;&#160;&#160; level&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; position of slide       <br />&#160;&#160;&#160; &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0: left, 1: right, 0.5 middle       <br />&#160;&#160;&#160; &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; make sure you scale this value to your needs</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Dim objBitmap As System.Drawing.Bitmap      <br />&#160;&#160;&#160; Dim objGraphic As System.Drawing.Graphics</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Initialize the graphic      <br />&#160;&#160;&#160; objBitmap = New System.Drawing.Bitmap(width, height)       <br />&#160;&#160;&#160; objGraphic = System.Drawing.Graphics.FromImage(objBitmap)       <br />&#160;&#160;&#160; objGraphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias       <br />&#160;&#160;&#160; objGraphic.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Create color gradient for the background      <br />&#160;&#160;&#160; Dim BrushRedYellow As New System.Drawing.Drawing2D.LinearGradientBrush(New System.Drawing.Rectangle(8, 0, (width &#8211; 16) \ 2, height), System.Drawing.Color.Red, System.Drawing.Color.Yellow, System.Drawing.Drawing2D.LinearGradientMode.Horizontal)       <br />&#160;&#160;&#160; Dim BrushYellowGreen As New System.Drawing.Drawing2D.LinearGradientBrush(New System.Drawing.Rectangle(7 + (width &#8211; 16) \ 2, 0, (width &#8211; 16) \ 2, height), System.Drawing.Color.Yellow, System.Drawing.Color.Green, System.Drawing.Drawing2D.LinearGradientMode.Horizontal)       <br />&#160;&#160;&#160; objGraphic.FillRectangle(BrushRedYellow, 8, 3, (width &#8211; 16) \ 2, height &#8211; 10)       <br />&#160;&#160;&#160; objGraphic.FillRectangle(BrushYellowGreen, 8 + (width &#8211; 16) \ 2, 3, (width &#8211; 16) \ 2, height &#8211; 10)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Scale level properly      <br />&#160;&#160;&#160; If level &gt; 1 Then level = 1       <br />&#160;&#160;&#160; If level &lt; 0 Then level = 0</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Draw the arrow      <br />&#160;&#160;&#160; Dim Arrow(2) As System.Drawing.PointF       <br />&#160;&#160;&#160; Arrow(0) = New System.Drawing.PointF(8 + (width &#8211; 16) * level, height &#8211; 10)       <br />&#160;&#160;&#160; Arrow(1) = New System.Drawing.PointF(16 + (width &#8211; 16) * level, height &#8211; 2)       <br />&#160;&#160;&#160; Arrow(2) = New System.Drawing.PointF(0 + (width &#8211; 16) * level, height &#8211; 2)       <br />&#160;&#160;&#160; objGraphic.FillPolygon(System.Drawing.Brushes.Black, Arrow)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Return the image as type bitmap      <br />&#160;&#160;&#160; Return objBitmap       <br />End Function</font></p>
<p><font face="Courier New">Function PaintBoxBmp(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As Byte()      <br />&#160;&#160;&#160; &#8216; Wrapper function for PaintBox. This function is to be called from reporting services as       <br />&#160;&#160;&#160; &#8216; for parameters see PaintBox       <br />&#160;&#160;&#160; Dim bmpImage As System.Drawing.Bitmap</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Get bitmap from PaintBox      <br />&#160;&#160;&#160; bmpImage = PaintBox(width, height, level)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; Convert this bitmap to a byte array of type BMP      <br />&#160;&#160;&#160; Dim stream As System.IO.MemoryStream = New IO.MemoryStream       <br />&#160;&#160;&#160; Dim bitmapBytes As Byte()       <br />&#160;&#160;&#160; bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp)       <br />&#160;&#160;&#160; bitmapBytes = stream.ToArray       <br />&#160;&#160;&#160; stream.Close()       <br />&#160;&#160;&#160; bmpImage.Dispose()       <br />&#160;&#160;&#160; Return bitmapBytes       <br />End Function       <br /></font></p>
<p>&#160;</p>
<p><strong>Examples</strong></p>
<table border="0" cellspacing="0" cellpadding="2" width="528">
<tbody>
<tr>
<td valign="top" width="425">PaintBox(100, 20, 0.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image12.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb12.png" width="100" height="19" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintBox(100, 20, 1.0)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image13.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb13.png" width="101" height="20" /></a></td>
</tr>
<tr>
<td valign="top" width="425">PaintBox(100, 20, 0.5)</td>
<td valign="top" width="101"><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image14.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb14.png" width="100" height="19" /></a></td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>=Code.PaintBoxBmp(100,20,Fields!Sales_Amount.Value/Fields!Sales_Amount_Quota.Value)</p>
<p><strong>Sample Expression:</strong></p>
<p>=Code.PaintAbwBmp(100,20,Min(Fields!Value.Value, &quot;DataSet1&quot;),Max(Fields!Value.Value, &quot;DataSet1&quot;), Avg(Fields!Value.Value, &quot;DataSet1&quot;), Fields!Value.Value)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/04/ssrs-custom-drawing-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSRS Custom Drawing</title>
		<link>http://blog.oraylis.de/2012/04/ssrs-custom-drawing/</link>
		<comments>http://blog.oraylis.de/2012/04/ssrs-custom-drawing/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 06:37:08 +0000</pubDate>
		<dc:creator>Hilmar Buchta</dc:creator>
				<category><![CDATA[MS SSRS]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Microcharts]]></category>
		<category><![CDATA[Reporting]]></category>

		<guid isPermaLink="false">http://blog.oraylis.de/?p=1683</guid>
		<description><![CDATA[<p align="right"><em>SQL Server 2005 -&#160; SQL Server 2012</em></p>
<p>In my last post I showed some tricks with reporting services charts. As I mentioned, the possibilities are almost endless.For example, Jason Thomas created an excellent step-by-step instruction of how to <a href="http://road-blogs.blogspot.de/2012/03/overlapping-charts-in-ssrs-using-range.html" target="_blank">create overlapping bar charts</a>. So, I can just encourage everybody to be creative with these chart properties. It’s really amazing what kind of charts can be created this way.</p>
<p>But with the ability to use code behind a report, SSRS is even more powerful. In an early post, Jason Thomas reported about a method of <a href="http://road-blogs.blogspot.de/2011/01/rotate-text-in-ssrs.html" target="_blank">rotating text in SSRS 2005</a>. As SSRS 2005 has no property to rotate text, the solution was to write custom code that actually returns a bitmap as a byte array. This bitmap can then be placed on the report. Just imagine what this means for you: You can create a .Net drawing function, pass parameters from the report (maybe from a data set) to the function and place the resulting imagine on the report! Being able to use the powerful System.Drawing functions gives us almost unlimited power to create interesting graphical representations. This post shows just two examples. </p>
<p>In the following screenshot of a Reporting Services report I used this technique to create a custom KPI representation (the “sliders” in the last column).</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb.png" width="490" height="169" /></a></p>
<p>In order to create this graphical element, I used two functions. The first function returns a System.Drawing.Bitmap, the second function converts this bitmap to a byte array. I removed the simple drawing code itself here to focus on the idea. This is how the two functions look like:</p>
<p><font face="Courier New">Function PaintBox(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As System.Drawing.Bitmap      <br />&#160;&#160;&#160; Dim objBitmap As System.Drawing.Bitmap       <br />&#160;&#160;&#160; Dim objGraphic As System.Drawing.Graphics</font></p>
<p><font face="Courier New">&#160;&#160;&#160; objBitmap = New System.Drawing.Bitmap(width, height)      <br />&#160;&#160;&#160; objGraphic = System.Drawing.Graphics.FromImage(objBitmap)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; … do the drawing here, for example objGraphic.DrawLine(System.Drawing.Pens.Gray, 0, 0, width, height)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Return objBitmap      <br />End Function</font></p>
<p><font face="Courier New">Function PaintBoxBmp(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As Byte()      <br />&#160;&#160;&#160; Dim bmpImage As System.Drawing.Bitmap</font></p>
<p><font face="Courier New">&#160;&#160;&#160; bmpImage = PaintBox(width, height, level)      <br />&#160;&#160;&#160; Dim stream As System.IO.MemoryStream = New IO.MemoryStream       <br />&#160;&#160;&#160; Dim bitmapBytes As Byte()       <br />&#160;&#160;&#160; bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp)       <br />&#160;&#160;&#160; bitmapBytes = stream.ToArray       <br />&#160;&#160;&#160; stream.Close()       <br />&#160;&#160;&#160; bmpImage.Dispose()       <br />&#160;&#160;&#160; Return bitmapBytes       <br />End Function       <br /></font></p>
<p>The report uses a table with an image in the last column:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb1.png" width="357" height="47" /></a></p>
<p>In the image properties, the following settings have to be made:</p>
<ul>
<li>Image Source: Database </li>
<li>MIME Type: image/bmp (you may use one of the other mime types instead, as long if the mime type matches the output format for the function PaintBoxBmp above). </li>
<li>Use this field: Expression      <br /><font face="Courier New">=Code.PaintBoxBmp(100,20,Fields!Sales_Amount.Value/Fields!Sales_Amount_Quota.Value)</font> </li>
</ul>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb2.png" width="244" height="221" /></a></p>
<p>Also, the code above requires a reference to the System.Drawing assembly:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image3.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb3.png" width="279" height="216" /></a></p>
<p>When writing such functions, it’s a good practice to wrap them in a custom .Net assembly.</p>
<p>If you use a custom .Net assembly…</p>
<ul>
<li>… it’s easier to write the code. Nobody wants to write larger code blocks using the SSRS code editor which gives no hints or syntax highlighting </li>
<li>… you may use C# to code the custom assembly </li>
<li>… you can use import statements to reference assemblies (like System.Drawing). With code behind a report, this doesn’t work yet, so you always have to use the fully qualified class name </li>
<li>… it’s easier to test and debug your code for example by sending the output to a Windows Forms test application </li>
</ul>
<p>Here is another example of a graphical element (last column) created using the approach from above:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb4.png" width="462" height="275" /></a></p>
<p>These kind of charts show which rows are above or below the average. There is one image (chart) per line composing the effect of a single chart with a straight vertical line.</p>
<p>So with just a little bit of code behind the report it’s possible to create interesting graphical representations of data that are not provided by Reporting Services out of the box.</p>
<div style="display:block"><small><em>by Hilmar Buchta <ul class="addtoany_list"><li><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.oraylis.de%2F2012%2F04%2Fssrs-custom-drawing%2F&amp;linkname=SSRS%20Custom%20Drawing"><img src="http://blog.oraylis.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a></li></ul></em></small></div>]]></description>
			<content:encoded><![CDATA[<p align="right"><em>SQL Server 2005 -&#160; SQL Server 2012</em></p>
<p>In my last post I showed some tricks with reporting services charts. As I mentioned, the possibilities are almost endless.For example, Jason Thomas created an excellent step-by-step instruction of how to <a href="http://road-blogs.blogspot.de/2012/03/overlapping-charts-in-ssrs-using-range.html" target="_blank">create overlapping bar charts</a>. So, I can just encourage everybody to be creative with these chart properties. It’s really amazing what kind of charts can be created this way.</p>
<p>But with the ability to use code behind a report, SSRS is even more powerful. In an early post, Jason Thomas reported about a method of <a href="http://road-blogs.blogspot.de/2011/01/rotate-text-in-ssrs.html" target="_blank">rotating text in SSRS 2005</a>. As SSRS 2005 has no property to rotate text, the solution was to write custom code that actually returns a bitmap as a byte array. This bitmap can then be placed on the report. Just imagine what this means for you: You can create a .Net drawing function, pass parameters from the report (maybe from a data set) to the function and place the resulting imagine on the report! Being able to use the powerful System.Drawing functions gives us almost unlimited power to create interesting graphical representations. This post shows just two examples. </p>
<p>In the following screenshot of a Reporting Services report I used this technique to create a custom KPI representation (the “sliders” in the last column).</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb.png" width="490" height="169" /></a></p>
<p>In order to create this graphical element, I used two functions. The first function returns a System.Drawing.Bitmap, the second function converts this bitmap to a byte array. I removed the simple drawing code itself here to focus on the idea. This is how the two functions look like:</p>
<p><font face="Courier New">Function PaintBox(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As System.Drawing.Bitmap      <br />&#160;&#160;&#160; Dim objBitmap As System.Drawing.Bitmap       <br />&#160;&#160;&#160; Dim objGraphic As System.Drawing.Graphics</font></p>
<p><font face="Courier New">&#160;&#160;&#160; objBitmap = New System.Drawing.Bitmap(width, height)      <br />&#160;&#160;&#160; objGraphic = System.Drawing.Graphics.FromImage(objBitmap)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; &#8216; … do the drawing here, for example objGraphic.DrawLine(System.Drawing.Pens.Gray, 0, 0, width, height)</font></p>
<p><font face="Courier New">&#160;&#160;&#160; Return objBitmap      <br />End Function</font></p>
<p><font face="Courier New">Function PaintBoxBmp(ByVal width As Integer, ByVal height As Integer, ByVal level As Single) As Byte()      <br />&#160;&#160;&#160; Dim bmpImage As System.Drawing.Bitmap</font></p>
<p><font face="Courier New">&#160;&#160;&#160; bmpImage = PaintBox(width, height, level)      <br />&#160;&#160;&#160; Dim stream As System.IO.MemoryStream = New IO.MemoryStream       <br />&#160;&#160;&#160; Dim bitmapBytes As Byte()       <br />&#160;&#160;&#160; bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp)       <br />&#160;&#160;&#160; bitmapBytes = stream.ToArray       <br />&#160;&#160;&#160; stream.Close()       <br />&#160;&#160;&#160; bmpImage.Dispose()       <br />&#160;&#160;&#160; Return bitmapBytes       <br />End Function       <br /></font></p>
<p>The report uses a table with an image in the last column:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb1.png" width="357" height="47" /></a></p>
<p>In the image properties, the following settings have to be made:</p>
<ul>
<li>Image Source: Database </li>
<li>MIME Type: image/bmp (you may use one of the other mime types instead, as long if the mime type matches the output format for the function PaintBoxBmp above). </li>
<li>Use this field: Expression      <br /><font face="Courier New">=Code.PaintBoxBmp(100,20,Fields!Sales_Amount.Value/Fields!Sales_Amount_Quota.Value)</font> </li>
</ul>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb2.png" width="244" height="221" /></a></p>
<p>Also, the code above requires a reference to the System.Drawing assembly:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image3.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb3.png" width="279" height="216" /></a></p>
<p>When writing such functions, it’s a good practice to wrap them in a custom .Net assembly.</p>
<p>If you use a custom .Net assembly…</p>
<ul>
<li>… it’s easier to write the code. Nobody wants to write larger code blocks using the SSRS code editor which gives no hints or syntax highlighting </li>
<li>… you may use C# to code the custom assembly </li>
<li>… you can use import statements to reference assemblies (like System.Drawing). With code behind a report, this doesn’t work yet, so you always have to use the fully qualified class name </li>
<li>… it’s easier to test and debug your code for example by sending the output to a Windows Forms test application </li>
</ul>
<p>Here is another example of a graphical element (last column) created using the approach from above:</p>
<p><a href="http://blog.oraylis.de/wp-content/uploads/2012/04/image4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.oraylis.de/wp-content/uploads/2012/04/image_thumb4.png" width="462" height="275" /></a></p>
<p>These kind of charts show which rows are above or below the average. There is one image (chart) per line composing the effect of a single chart with a straight vertical line.</p>
<p>So with just a little bit of code behind the report it’s possible to create interesting graphical representations of data that are not provided by Reporting Services out of the box.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oraylis.de/2012/04/ssrs-custom-drawing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

