<?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>ixto-Blog &#187; Reporting Services 2008</title>
	<atom:link href="http://www.ixto.de/blog/category/sql-server-2008/reporting-services-sql-server-2008/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ixto.de/blog</link>
	<description>Business Intelligence, Database Consulting, Software Development</description>
	<lastBuildDate>Mon, 26 Sep 2011 09:23:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Deaktivieren von Reporting Services Abonnements</title>
		<link>http://www.ixto.de/blog/sql-server-2005/reportingservices/deaktivieren-von-reporting-services-abonnements/</link>
		<comments>http://www.ixto.de/blog/sql-server-2005/reportingservices/deaktivieren-von-reporting-services-abonnements/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 14:50:16 +0000</pubDate>
		<dc:creator>Sven Bayer</dc:creator>
				<category><![CDATA[Reporting Services 2005]]></category>
		<category><![CDATA[Reporting Services 2008]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/?p=145</guid>
		<description><![CDATA[Wenn man häufiger mit den Abonnements der Reporting Services zu tun hat, musste der ein oder andere, ich leider auch, mit bedauern feststellen, dass es keine Möglichkeit gibt die angelegten Abonnements zu deaktivieren. Um das Verenden eines Berichts zu verhindern, konnte man dessen Abonnement entweder löschen oder den Zeitpunkt für die Ausführung weit in die [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man häufiger mit den Abonnements der Reporting Services zu tun hat, musste der ein oder andere, ich leider auch, mit bedauern feststellen, dass es keine Möglichkeit gibt die angelegten Abonnements zu deaktivieren. Um das Verenden eines Berichts zu verhindern, konnte man dessen Abonnement entweder löschen oder den Zeitpunkt für die Ausführung weit in die Zukunft verlegen. Für mich zwei Methoden, die nicht wirklich benutzerfreundlich sind, entweder muss ich das Abonnement neu anlegen oder ich muss darauf achten meine Zeitänderungen wieder rückgängig zu machen und hab keine richtige Kontrolle über aktivierte oder deaktivierte Abonnements.</p>
<p> Ich möchte hier kurz beschreiben, wie es möglich ist, unter Verwendung der <em>ReportServer</em> Datenbank, die Ausführung der Abonnements einfach zu verwalten.</p>
<p><span id="more-145"></span><br />
<br\></p>
<h2>Die Grundidee</h2>
<p><br\><br />
Die Reporting Services speichern ihre Abonnements in der zugehörigen DB(Standardname: <em>ReportServer</em>). Die Tabelle in der alle Abonnements aufgeführt sind nennt sich <em>dbo.Subscriptions</em>:</p>
<p><img class="alignnone" title="Tabelle" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SB/blog1.png" alt="" width="1059" height="648" /><br />
<br\><br />
In dieser Tabelle gibt es eine Spalte mit dem Namen <em>InactiveFlags</em>. Bei einem aktiven Abo ist dieser Wert auf 0 gesetzt. Um das Abo zu deaktivieren muss dieser Wert auf 1 geändert werden.<br />
<br\><br />
<br\></p>
<h2>Die Umsetzung</h2>
<p><br\><br />
Zunächst benötigen wir noch einige Tabellen, um die Lesbarkeit zu erhöhen, indem wir die IDs durch die zugehörigen Namen für Bericht, Abonnement und Benutzer ersetzen:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup span="1">
<col style="width: 191px;" span="1"></col>
<col style="width: 181px;" span="1"></col>
<col style="width: 18px;" span="1"></col>
<col style="width: 251px;" span="1"></col>
</colgroup>
<tbody>
<tr style="background: black;">
<td style="padding-left: 7px; padding-right: 7px; border-top: solid black 1.5pt; border-left: solid black 1.5pt;"><span style="color: white; font-family: Times New Roman; font-size: 10pt;"><strong>Tabelle</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid black 1.5pt;" colspan="2"><span style="color: white; font-family: Times New Roman; font-size: 10pt;"><strong>Information</strong></span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid black 1.5pt; border-right: solid black 1.5pt;"> </td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-left: solid black 1.5pt;">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">Dbo.Users u</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px;">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">Benutzername</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-right: solid black 1.5pt;" colspan="2">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">u.UserID = OwnerID</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-left: solid black 1.5pt;">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">Dbo.Catalog c</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px;">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">Berichtsname</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-right: solid black 1.5pt;" colspan="2">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">c.ItemID = Report_OID</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-left: solid black 1.5pt; border-bottom: solid black 1.5pt;">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">[dbo].[ReportSchedule] rs</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-bottom: solid black 1.5pt;">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">SQL Server Agent Job Name</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-bottom: solid black 1.5pt; border-right: solid black 1.5pt;" colspan="2">
<p style="text-align: justify;"><span style="font-family: Times New Roman; font-size: 10pt;">SubscriptionID = rs.SubscriptionID</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p> <br />
<br\><br />
Mit dem nachfolgendem SQL-Statement können wir die passenden Informationen auslesen:<br />
<br\><br />
<span style="font-family: Courier New;"><span style="color: blue;">SELECT<br />
</span>     s<span style="color: gray;">.</span>[SubscriptionID]<br />
     </span><span style="color: gray;">,</span>s<span style="color: gray;">.</span>[Description]<br />
             <span style="color: gray;">,</span>u<span style="color: gray;">.</span>UserName<br />
<span style="color: gray;">             ,</span>c<span style="color: gray;">.</span>Name as ReportName<br />
             <span style="color: gray;">,</span>[InactiveFlags]<br />
             <span style="color: gray;">,</span>rs<span style="color: gray;">.</span>ScheduleID <span style="color: blue;">AS</span> JobName<br />
             <span style="color: gray;">,</span>rs<span style="color: gray;">.</span>ReportAction<br />
             <span style="color: gray;">,</span>[ExtensionSettings]<br />
             <span style="color: gray;">,</span>[Locale]<br />
             <span style="color: gray;">,</span>s<span style="color: gray;">.</span>[ModifiedByID]<br />
             <span style="color: gray;">,</span>s<span style="color: gray;">.</span>[ModifiedDate]<br />
             <span style="color: gray;">,</span>[LastStatus]<br />
             <span style="color: gray;">,</span>[EventType]<br />
             <span style="color: gray;">,</span>[MatchData]<br />
             <span style="color: gray;">,</span>[LastRunTime]<br />
             <span style="color: gray;">,</span>[Parameters]<br />
             <span style="color: gray;">,</span>[DataSettings]<br />
             <span style="color: gray;">,</span>[DeliveryExtension]<br />
             <span style="color: gray;">,</span>[Version]<br />
             <span style="color: gray;">,</span>[ReportZone]<br />
             <span style="color: gray;">,</span>[OwnerID]<br />
             <span style="color: gray;">,</span>[Report_OID]<br />
<span style="color: blue;">FROM</span> [ReportServer]<span style="color: gray;">.</span>[dbo]<span style="color: gray;">.</span>[Subscriptions] s<br />
<span style="color: gray;">             inner </span><span style="color: gray;">join</span> dbo<span style="color: gray;">.</span>Users u <span style="color: blue;">on</span> u<span style="color: gray;">.</span>UserID <span style="color: gray;">=</span> OwnerID<br />
             <span style="color: gray;">inner </span><span style="color: gray;">join</span> [dbo]<span style="color: gray;">.</span>[Catalog] c <span style="color: blue;">on</span> s<span style="color: gray;">.</span>Report_OID <span style="color: gray;">=</span> c<span style="color: gray;">.</span>ItemID<br />
             <span style="color: gray;">inner </span><span style="color: gray;">join</span> [dbo]<span style="color: gray;">.</span>[ReportSchedule] rs <span style="color: blue;">on</span> s<span style="color: gray;">.</span>SubscriptionID <span style="color: gray;">=</span> rs<span style="color: gray;">.</span>SubscriptionID<br />
<br\><br />
Abhängig von den Abonnements sollte die Abfrage in etwa das folgende Ergebnis liefern:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup span="1">
<col style="width: 126px;" span="1"></col>
<col style="width: 169px;" span="1"></col>
<col style="width: 115px;" span="1"></col>
<col style="width: 109px;" span="1"></col>
<col style="width: 122px;" span="1"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;"><span style="font-family: Times New Roman;">SubscriptionID</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">Description</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">UserName</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">
<p style="text-align: center;"><span style="font-family: Times New Roman;">ReportName</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">InactiveFlags</span></td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">929CDEE8-…</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">In &#8216;…&#8217; unter &#8216;Arbeitszeit Übersicht&#8217; speichern</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Domäne\Bayer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">Arbeitszeit Übersicht</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">7A4B049E-…</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">In &#8216;…&#8217; unter &#8216;</span><br />
<span style="font-family: Times New Roman;">Fluktuation &#8216; speichern</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Domäne\Bayer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Fluktuation</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">23E7F4EF-…</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;"><span style="font-family: Times New Roman;">In &#8216;…&#8217; unter Haushalt&#8217; speichern</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Domäne\Bayer</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Haushalt</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0</td>
</tr>
</tbody>
</table>
</div>
<p> <br />
<br\><br />
Mit den oben stehenden Informationen können wir jetzt einzelne Abonnements aktivieren bzw. deaktivieren.<br />
<br\><br />
Für die Deaktivierung kann folgende Query verwendet werden:</p>
<p><span style="font-family: Courier New;">UPDATE Subscriptions set<br />
[InactiveFlags] = 1<br />
where<br />
[SubscriptionID] = &#8216;929CDEE8-…&#8217;<br />
END<br />
</span></p>
<p>Für die Aktivierung kann das gleiche Update-Statement verwendet werden, der Wert <em>InactiveFlags</em> muss jetzt nur auf 0 gesetzt werden.<br />
<br\><br />
<br\></p>
<h2>Ausführung von Abonnements</h2>
<p><br\><br />
Gelegentlich kommt es vor, dass ein Abonnement außerhalb der geplanten Zeiten durchgeführt werden soll.<br />
<br\><br />
Da die Ausführung der Abonnements über den SQL Server Agent gesteuert wird, haben wir die Möglichkeit die passenden Jobs von Hand zu starten. Dies kann im SQL Server Management Studio erfolgen.</p>
<p><img title="Tabelle" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SB/blog2.png" alt="" /><br />
<br\><br />
Oder es können vordefinierte gespeicherte Prozeduren aus der msdb Datenbank verwendet werden.<br />
<br\><br />
<em>EXEC msdb.dbo.sp_start_job ‚251601B4…&#8217;<br />
</em><br />
<br\><br />
Die IDs der für die angelegten Jobs und die IDs für die zugehörigen Abos sind in der <em>[dbo].[ReportSchedule] </em>Tabelle der <em>ReportServer</em> DB hinterlegt. Wenn man diese Tabelle noch mit der <em>dbo.Subscriptions</em> verbindet:</p>
<p><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">SELECT</span><br />
<span style="color: #0000ff;">   </span>[ScheduleID]<br />
  </span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: gray;">,</span>[ReportID]<br />
</span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: gray;">  ,</span>rs<span style="color: gray;">.</span>[SubscriptionID]<br />
</span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: gray;">  ,</span>s<span style="color: gray;">.<span style="color: blue;">Description<br />
</span></span></span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: gray;">  ,</span>[ReportAction]<br />
</span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">FROM</span> [dbo]<span style="color: gray;">.</span>[ReportSchedule] rs<br />
</span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: gray;">INNER </span><span style="color: gray;">JOIN</span> dbo<span style="color: gray;">.</span>Subscriptions s <span style="color: blue;">ON</span> rs<span style="color: gray;">.</span>SubscriptionID <span style="color: gray;">=</span> s<span style="color: gray;">.</span>SubscriptionID<br />
</span><br />
können die JobIDs den zugehörigen Abos zugeordnet werden.<br />
<br\><br />
<br\></p>
<h2>Der passende Bericht</h2>
<p><br\><br />
Nachdem die Grundlagen für die Deaktivierung bzw. Aktivierung der Abonnements geklärt sind, kann ein einfacher Bericht erstellt werden, mit dem die Ausführung und der Status des Abos gesteuert werden kann.</p>
<p><img title="Tabelle" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SB/blog3.png" alt="" /><br />
<br\><br />
Für den Bericht muss eine Datenquelle für die <em>ReportServer</em> Datenbank erstellt werden und die folgenden Parameter werden benötigt, um die zugehörigen Funktionalitäten zu gewährleisten:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup span="1">
<col style="width: 187px;" span="1"></col>
<col style="width: 83px;" span="1"></col>
<col style="width: 372px;" span="1"></col>
</colgroup>
<tbody>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 0.5pt;">Parameter</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Typ</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Beschreibung</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">SetActiv</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Text (0,1) Default: 0</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">0 – Keine Aktion wird ausgeführt1 – Der Status des ausgewählten Abos wird geändert</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">SubscriptionID</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Text</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">ID des Abos.Blank und null Value aktiviert</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">JobName</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Text</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">ID des JobsBlank und null Value aktiviert</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">InactiveFlags</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Text</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Neue Status für das zugehörige Abo0 – aktiviert1 – deaktiviert</p>
<p>Blank und null Value aktiviert</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Execute</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Text (0,1)</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;">Job0 – nicht ausführen1 &#8211; ausführen</td>
</tr>
</tbody>
</table>
</div>
<p><br\><br />
Des Weiteren brauchen wir ein Dataset, das zum einen die Informationen, wie vorhandene Abos, Berichtsnamen, etc. ermittelt, um sie im Bericht anzuzeigen, zum anderen aber auch Abos aktiviert und deaktiviert, sowie einzelne Jobs ausführt. Die Steuerung der Ausführung wird durch die einzelnen Parameter vollzogen und einzelne Teile der Abfrage übergangen oder ausgeführt:</p>
<p><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">if</span> @SetActiv <span style="color: gray;">=</span> 1<br />
</span><span style="color: blue; font-family: Courier New; font-size: 10pt;">BEGIN<br />
</span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">UPDATE</span> Subscriptions <span style="color: blue;">set </span></span><span style="font-family: Courier New; font-size: 10pt;">[InactiveFlags] <span style="color: gray;">=</span> @InactiveFlags<br />
</span><span style="color: blue; font-family: Courier New; font-size: 10pt;">where<br />
    </span><span style="font-family: Courier New; font-size: 10pt;">[SubscriptionID] <span style="color: gray;">=</span> @id<br />
</span><span style="color: blue; font-family: Courier New; font-size: 10pt;">END<br />
</span></p>
<p><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">if</span> @Execute <span style="color: gray;">=</span> 1<br />
</span><span style="color: blue; font-family: Courier New; font-size: 10pt;">BEGIN<br />
</span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">EXEC</span> msdb<span style="color: gray;">.</span>dbo<span style="color: gray;">.<span style="color: maroon;">sp_start_job @JobName<br />
</span></span></span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">WAITFOR</span><br />
<span style="color: blue;">delay </span><span style="color: red;">&#8216;00:00:05&#8242;<br />
</span></span><span style="color: blue; font-family: Courier New; font-size: 10pt;">END<br />
</span></p>
<p><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">SELECT</span> s<span style="color: gray;">.</span>SubscriptionID<span style="color: gray;">,</span> rs<span style="color: gray;">.</span>ScheduleID <span style="color: blue;">AS</span> JobName<span style="color: gray;">,</span> s<span style="color: gray;">.</span>OwnerID<span style="color: gray;">,</span> u<span style="color: gray;">.</span>UserName<span style="color: gray;">,</span> s<span style="color: gray;">.</span>Report_OID<span style="color: gray;">,</span> c<span style="color: gray;">.</span>Name <span style="color: blue;">AS</span> Reportname<span style="color: gray;">,</span> s<span style="color: gray;">.<span style="color: blue;">Description </span><span style="color: blue;">AS</span> SubDesc,</span> s<span style="color: gray;">.</span>InactiveFlags <span style="color: blue;">AS</span> Active<span style="color: gray;">, </span></span><span style="font-family: Courier New; font-size: 10pt;">s<span style="color: gray;">.</span>ExtensionSettings<span style="color: gray;">,</span> s<span style="color: gray;">.</span>Locale<span style="color: gray;">,</span> s<span style="color: gray;">.</span>ModifiedByID<span style="color: gray;">,</span> s<span style="color: gray;">.</span>ModifiedDate<span style="color: gray;">,</span> s<span style="color: gray;">.</span>LastStatus<span style="color: gray;">,</span> s<span style="color: gray;">.</span>EventType<span style="color: gray;">,</span> s<span style="color: gray;">.</span>MatchData<span style="color: gray;">,</span> s<span style="color: gray;">.</span>LastRunTime<span style="color: gray;">,</span> s<span style="color: gray;">.<span style="color: green;">Parameters<span style="color: gray;">,</span> s<span style="color: gray;">.</span>DataSettings<span style="color: gray;">, </span></span></span></span><span style="font-family: Courier New; font-size: 10pt;">s<span style="color: gray;">.</span>DeliveryExtension<span style="color: gray;">,</span> s<span style="color: gray;">.<span style="color: blue;">Version<span style="color: gray;">,</span> s<span style="color: gray;">.</span>ReportZone<br />
</span></span></span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">FROM</span> Subscriptions <span style="color: blue;">AS</span> s<br />
   </span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: gray;">INNER </span><span style="color: gray;">JOIN </span></span><span style="font-family: Courier New; font-size: 10pt;">Users <span style="color: blue;">AS</span> u <span style="color: blue;">ON</span> u<span style="color: gray;">.</span>UserID <span style="color: gray;">=</span> s<span style="color: gray;">.</span>OwnerID<br />
   <span style="color: gray;">INNER </span><span style="color: gray;">JOIN </span></span><span style="font-family: Courier New; font-size: 10pt;"><span style="color: blue;">Catalog </span><span style="color: blue;">AS</span> c <span style="color: blue;">ON</span> s<span style="color: gray;">.</span>Report_OID <span style="color: gray;">=</span> c<span style="color: gray;">.</span>ItemID<br />
   <span style="color: gray;">INNER </span><span style="color: gray;">JOIN </span></span><span style="font-family: Courier New; font-size: 10pt;">ReportSchedule <span style="color: blue;">AS</span> rs <span style="color: blue;">ON</span> s<span style="color: gray;">.</span>SubscriptionID <span style="color: gray;">=</span> rs<span style="color: gray;">.</span>SubscriptionID<br />
</span><br />
<br\><br />
Im unteren Teil der Abfrage werden die Informationen ermittelt, im oberen Teil wird zunächst der Status des Abos aktualisiert oder der ausgewählte Job gestartet. Dadurch, dass das Statusänderungen und Jobausführungen über die Links in der Tabelle gesteuert werden, ist immer nur einer der beiden Parameter @SetActiv und @Execute eins und es wird immer nur eine der beiden Aktionen ausgeführt.<br />
<br\><br />
Um die Daten anzuzeigen erstellen wir eine einfache Tabelle:<br />
<img title="Tabelle" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SB/blog3a.png" alt="" /><br />
<br\><br />
Für das Feld Aktiv wird die folgende Expression: <span style="font-family: Courier New; font-size: 10pt;">=iif(Fields!Active.Value = 0,<span style="color: #a31515;">&#8220;Aktiv&#8221;</span>,<span style="color: #a31515;">&#8220;Deaktiviert&#8221;</span>) </span>verwendet und die folgende Aktion, für die Änderung des Status, definiert:<br />
<img title="Tabelle" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SB/blog4.png" alt="" /><br />
<br\><br />
Zum Schluss muss noch das Ausführen des Jobs ermöglicht werden. Hierfür definieren wir eine Aktion für das Textfeld Execute:<br />
<img title="Tabelle" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SB/blog5.png" alt="" /><br />
Jetzt ist der Bericht soweit fertig, dass der Status und das Ausführen der Abos verwaltet werden kann, birgt aber noch die ein oder andere Gefahr in sich. So wird z.B. ein Abo erneut ausgeführt, wenn man den Bericht nach einem <em>Execute </em>aktualisiert. Für eine erste Demonstration sollte er aber reichen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2005/reportingservices/deaktivieren-von-reporting-services-abonnements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lookup in Reporting Services – oder: Jetzt kommt zusammen, was zusammen gehört!</title>
		<link>http://www.ixto.de/blog/sql-server-2008/lookup-%e2%80%93-oder-jetzt-kommt-zusammen-was-zusammen-gehort/</link>
		<comments>http://www.ixto.de/blog/sql-server-2008/lookup-%e2%80%93-oder-jetzt-kommt-zusammen-was-zusammen-gehort/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 11:41:55 +0000</pubDate>
		<dc:creator>David Veenhuis</dc:creator>
				<category><![CDATA[Reporting Services 2008]]></category>
		<category><![CDATA[SQL Server 2008]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/?p=122</guid>
		<description><![CDATA[SQL Server 2008 R2 SSRS wartet mit einer interessanten Neuerung auf, nämlich der Suche in Datasets. Damit gibt es Möglichkeiten zwei Datasets in einem Datenbereich zu verknüpfen.

Grundsätzlich gilt: Ein Datenbereich in einem Report kann nur an ein Dataset gebunden sein. Es ist also sinnvoll, alle benötigten Felder bereits vom Datenbankserver in ein Dataset vereinigen zu [...]]]></description>
			<content:encoded><![CDATA[<p>SQL Server 2008 R2 SSRS wartet mit einer interessanten Neuerung auf, nämlich der Suche in Datasets. Damit gibt es Möglichkeiten zwei Datasets in einem Datenbereich zu verknüpfen.<br />
<br\><br />
Grundsätzlich gilt: Ein Datenbereich in einem Report kann nur an ein Dataset gebunden sein. Es ist also sinnvoll, alle benötigten Felder bereits vom Datenbankserver in ein Dataset vereinigen zu lassen. Es sind aber auch Situationen denkbar, in denen es nicht möglich ist, die benötigten Felder in ein Dataset zu integrieren (z.B. bei der Nutzung von bereits bestehenden <em>Shared</em><em> Datasets</em> oder bei verschiedenen Quellen). Die Möglichkeiten in einem Datenbereich auf Inhalte eines zweiten Datasets zuzugreifen waren bisher wenig komfortabel. Es gab dazu nur die Funktionen <em>Last</em>, <em>First</em> und die Aggregatfunktionen, die auf das gesamte Ziel-Dataset anzuwenden sind. Ein wahlfreier Zugriff auf eine beliebige Zeile in dem Ziel-Dataset, anhand eines Suchwertes, wurde nicht von SSRS unterstützt. Um das zu erreichen, war es nötig, das komplette Dataset in einem Hashtable zu cachen und dann mittels einer Custom-Code-Funktion den gesuchten Wert zu ermitteln.<br />
<span id="more-122"></span><br />
<br\><br />
Mit der Veröffentlichung von SQL Server 2008 R2 SSRS gibt es dafür jetzt die Lookup-Funktionen. Diese gibt es gleich in drei Versionen: <em>Lookup</em>, <em>LookupSet</em> und <em>MultiLookup</em>.<br />
<br\><br />
Die <em>Lookup</em>-Funktion wertet einen Wert (Ausdruck) pro Zeile aus und sucht durch Vergleich mit diesem Wert eine passende Zeile im Ziel-Dataset. <em>LookupSet</em> wertet ebenfalls einen Wert pro Zeile im aktuellen Dataset aus, liefert aber alle passenden Zeilen aus dem Ziel-Dataset. <em>MultiLookup</em> wertet mehrere Werte pro Zeile des aktuellen Datasets aus und liefert alle passenden Zeile aus dem Ziel-Dataset. Konkret wird für jede passende Zeile ein Wert zurückgegeben, der das Ergebnis der Auswertung eines Ausdrucks über die Felder der Zeile ist. Im einfachsten Fall wird der Wert eines der Felder zurückgegeben.<br />
<br\><br />
Diese drei Lookup-Funktionen sollen hier demonstriert werden.<br />
<br\></p>
<pre><code><span style="font-family: Calibri; font-size: 12pt;"><strong>

Lookup</strong>

				</span></code></pre>
<p><br\><br />
<strong>Ein Beispiel für den Einsatz von Lookup:</strong></p>
<p><strong><br />
</strong></p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/Lookup_1.GIF" alt="" /><span style="font-size: 10pt;"> </span><span style="font-family: Times New Roman;"><br />
<br\><br />
</span>Der Umsatz pro Mitarbeiter aus Dataset2 soll in der Tabelle  angezeigt werden, die mit Dataset1 verknüpft ist.<br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/Lookup_2.GIF" alt="" /><span style="font-size: 10pt;"> </span><span style="font-family: Times New Roman;"><br />
<br\><br />
</span>Dazu wird ein neues Feld mit einem Ausdruck erstellt. Der hier verwendete Ausdruck lautet: <em>=Lookup(Fields!MitarbeiterID.Value, Fields!PersonalID.Value, Fields!Umsatz.Value, &#8220;DataSet2&#8243;)</em></p>
<ul>
<li><em>Der erste Parameter, <em>Fields!MitarbeiterID.Value</em>, ist ein Feld der Tabelle (Datenbereichs), die an Dataset1 gebunden ist. Es ist aber auch möglich einen Ausdruck zu verwenden, um z.B. mehrere Felder zu konkatenieren, wenn der Vergleich mit den Zeilen im Ziel-Dataset mehrere Spalten berücksichtigen soll.</em></li>
<li><em>Der zweite Parameter ,<em> Fields!PersonalID.Value</em> , ist ein Feld aus dem Dataset2, in dem nach einer passenden Zeile gesucht werden soll. Es kann auch ein Ausdruck verwendet werden. Wie bei einem <em>Join</em> wird verglichen ob dieser Wert mit dem Suchwert (der erste Parameter) übereinstimmt.</em></li>
<li><em>Der dritte Parameter, <em>Fields!Umsatz.Value</em> , gibt den Rückgabewert der Funktion an. Auch hier kann anstelle eines Feldes ein Ausdruck angegeben werden. Bei <em>Lookup</em> wird der Rückgabewert aus der ersten Zeile ermittelt, bei der die Suche erfolgreich war. Gibt es keine Zeile, die die Bedingung erfüllt, liefert der <em>Lookup</em>-Aufruf <em>Nothing</em> zurück.</em></li>
<li><em>Der vierte Parameter benennt das Ziel-Dataset (hier Dataset2), in dem ein passender Wert gesucht wird.</em></li>
</ul>
<p><em><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/Lookup_3.GIF" alt="" /> <code><span style="font-family: Calibri;"> </span></code></em><br />
Die mit Dataset1 verbundene Tabelle enthält jetzt die gewünschten Werte aus DataSet2.<br />
<br\><br />
<code><span style="font-family: Calibri; font-size: 12pt;"><em><em><strong> </strong></em></em><strong>LookupSet</strong><em><em><strong> </strong></em></em></span></code><br />
<br\><br />
<code><em><em><span style="font-family: Calibri; font-size: 12pt;"> </span></em></em><span style="font-family: Calibri; font-size: 12pt;"> </span></code> Bei der <em>Lookup</em>-Funktion wird wie bereits beschrieben nur die erste Zeile berücksichtigt, auf die der Suchwert passt. <em>LookupSet</em> wertet immer alle Zeilen des Ziel-Datasets aus und liefert für jede passende Zeile einen Wert zurück. <em>LookupSet</em> gibt diese Werte in Form eines Array zurück. Dieses Array kann nicht direkt als Ausgabe eines Textfeldes verwendet werden. Es muss also eine Bearbeitung z.B. mit der VB-Funktion <em>Join</em> erfolgen wodurch aus dem Array ein anzeigefähiger Wert wird. Das Array kann auch als Argument für eine Custom-Code-Funktion verwendet werden, um einen Anzeigewert zu bestimmen.</p>
<pre><code><span style="font-family: Calibri; font-size: 12pt;"><em><em><strong>
</strong></em></em>

<strong>Beispiel für die Verwendung von LookupSet</strong><em><em><strong>

</strong></em></em></span></code></pre>
<p> </p>
<p><em><em><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/LookupSet_1.GIF" alt="" /><br />
<span style="font-family: Calibri;"><em>=Join(LookupSet(Fields!ProductCategoryID.Value, Fields!ProductCategoryID.Value, Fields!Name.Value, &#8220;DataSet2&#8243;),&#8221;, &#8220;)<br />
</em></span></em></em></p>
<pre><code><span style="font-family: Calibri;"><span style="font-size: 12pt;"><em><em>					</em></em></span></span></code></pre>
<pre><code><span style="font-family: Calibri; font-size: 12pt;">Zu Jeder Zeile in DataSet1 werden alle passenden Zeilen aus DataSet2 gesucht. Join wandelt das Ergebnis-Array in einen String um, der anschließend im Feld Subcategory zu sehen ist.<em><em>
</em></em></span></code></pre>
<p><em><em><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/LookupSet_2.GIF" alt="" /></em></em></p>
<pre><code><span style="font-family: Calibri;"><em><em>Zu Jeder <em>ProductCategory</em> sind nun alle <em>Subcategories</em> in einem Feld zu sehen.
</em></em></span></code></pre>
<p> </p>
<pre><code><span style="font-family: Calibri; font-size: 12pt;">

<em><em><strong>

</strong></em></em><strong>MultiLookup</strong><em><em><strong>
</strong></em></em></span></code></pre>
<p> </p>
<pre><code><span style="font-family: Calibri; font-size: 12pt;">MulitLookup nimmt keinen einzelnen Wert sondern ein Array von Suchwerten pro Zeile. Ein Aufruf von MultiLookup wird dann so durchgeführt, dass für jedes Element des Suchwerte-Arrays ein gesonderter Lookup-Aufruf durchgeführt wird. Die Ergebnisse der einzelnen Lookup's werden dann dem Ergebnis-Array zugefügt.
</span></code></pre>
<pre><code><span style="font-family: Calibri; font-size: 12pt;">Ein Mehrwertiger Parameter kann direkt als Suchwert verwendet werden. Ein String, der eine Liste von Werten enthält, muss erst in ein Array umgewandelt werden. Dazu eignet sich die VB-Funktion Split.
</span></code></pre>
<pre><code><span style="font-family: Calibri; font-size: 12pt;"><strong>Beispiel:</strong> Ein Mehrwertiger Parameter enthält mehrere Monate, die als Auflistung von Zahlwerten angegeben sind. Mithilfe eines Aufrufes der Funktion MultiLookup werden die Zahlwerte in den
jeweiligen Monatsnamen umgewandelt. Dabei wird das Dataset Monatsnamen als Ziel-Dataset für die Suche verwendet.<em><em>
</em></em></span></code></pre>
<p><em><em><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/MultiLookup_1.GIF" alt="" /></em></em></p>
<p><em><em><br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/MultiLookup_2.GIF" alt="" /><code><span style="font-family: Calibri;"> </span></code></em></em><br />
Anzeige der Parameterwerte in einem Textfeld mit dem Ausdruck <em>=Join(Parameters!Monate.Value,&#8221;, &#8220;)</em></p>
<p><em><em><code><span style="font-family: Calibri;"><em><br />
</em></span></code><br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/SSRS_Lookup/MultiLookup_3.GIF" alt="" /><br />
</em></em>Anzeige der Werte nach Änderung des Ausdrucks auf <em>=Join(MultiLookup(Parameters!Monate.Value, Fields!MonatNr.Value,Fields!MonatName.Value,&#8221;Monatsnamen&#8221;),&#8221;, &#8220;)</em></p>
<p><span style="font-family: Calibri;"><em><em><em><br />
</em></em></em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2008/lookup-%e2%80%93-oder-jetzt-kommt-zusammen-was-zusammen-gehort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was gibt es neues beim SQL Server 2008 R2 SSRS</title>
		<link>http://www.ixto.de/blog/sql-server-2008/was-gibt-es-neues-beim-sql-server-2008-r2-ssrs/</link>
		<comments>http://www.ixto.de/blog/sql-server-2008/was-gibt-es-neues-beim-sql-server-2008-r2-ssrs/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 22:24:02 +0000</pubDate>
		<dc:creator>Sven Bayer</dc:creator>
				<category><![CDATA[Reporting Services 2008]]></category>
		<category><![CDATA[SQL Server 2008]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2008/was-gibt-es-neues-beim-sql-server-2008-r2-ssrs/</guid>
		<description><![CDATA[Die November CTP des SLQ Server 2008 R2 steht seit einiger Zeit zum Download bereit und bietet zahlreiche neue Features. In diesem Artikel sollen die zahlreichen Neuerungen, die die Reporting Services erhalten haben, beschrieben werden. Wir beschränken uns auf die Features, die unmittelbar mit der Entwicklung der Berichte zu tun haben und lassen die Änderungen, [...]]]></description>
			<content:encoded><![CDATA[<p>Die November CTP des SLQ Server 2008 R2 steht seit einiger Zeit zum Download bereit und bietet zahlreiche neue Features. In diesem Artikel sollen die zahlreichen Neuerungen, die die Reporting Services erhalten haben, beschrieben werden. Wir beschränken uns auf die Features, die unmittelbar mit der Entwicklung der Berichte zu tun haben und lassen die Änderungen, die bezüglich der erweiterten Sharepoint Integration vorhanden sind, außen vor. Der Report Manager hat ein neues Äußeres bekommen und der Report Builder steht jetzt in Version 3.0 zur Verfügung, die auch benötigt wird, um mit den neuen Features arbeiten zu können:</p>
<p><span id="more-78"></span><br />
<br\></p>
<h3>Freigegebene Data Sets</h3>
<p><br\><br />
Genau wie freigegebene Datenquellen, die in jedem größerem Projekt verwendet werden, um Änderungen an der Datenquelle an zentraler Stelle zu realisieren, können jetzt auch Data Sets freigegeben werden und in einem geeigneten Ordner auf dem Server zu speichern. Freigegebene Data Sets können von allen Berichten verwendet werden, so können Sie z.B. für einen Parameter, der in mehreren Berichten vorkommt, ein Data Set anpassen, dieses freigeben und es dann auch in den anderen Berichten verwenden.<br />
Mit dem Report Builder können Sie alle freigegebenen Data Sets auf dem Server verwenden, mit dem BIDS hingegen können Sie nur die freigegebenen Data Sets ihres Projekts verwenden.<br />
<br\></p>
<h3>Report Part Gallery</h3>
<p><br\><br />
Seit der November CTP ist es möglich Teile eines Berichts zu veröffentlichen. Diese Report Parts können dann in anderen Berichten verwendet werden. Im Gegensatz zu den freigegebenen Data Sets, können Report Parts in einem neuen Bericht weiter angepasst werden, ohne dass die Vorlage davon beeinflusst wird. Ein Report Part wird sozusagen ein normales Berichtselement im neuen Report. Falls das Original aktualisiert wurde, wird Ihnen dies mitgeteilt, damit Sie Ihre verwendeten Elemente aktualisieren können.<br />
Beim Hinzufügen eines Report Parts werden automatisch die zugehörigen Data Sets und Datenquellen mit angelegt.<br />
Report Parts können sowohl mit dem BIDS, als auch mit dem Report Builder erstellt werden. Sie können aber zurzeit nur mit dem Report Builder verwendet werden, indem Sie einfach per Drag&amp;Drop aus der Report Part Gallery in den Bericht gezogen werden.<br />
<br\><br />
Folgende Elemente stehen zur Verfügung:</p>
<ul>
<li>Charts</li>
<li>Tabellen, Matrizen und Listen</li>
<li>Messgeräte</li>
<li>Maps</li>
<li>Bilder</li>
<li>Rectangles</li>
</ul>
<p><br\></p>
<h3>Neue Berichtselemente zur Datenvisualisierung</h3>
<p><br\><br />
Die neuen Berichtselemente sind speziell konzipiert worden, um in Tabellen und Matrizen eingesetzt zu werden.<br />
<br\></p>
<h3><span style="color: #999999;">Sparklines und Data Bars</span></h3>
<p><br\><br />
Sparklines und Data Bars sind einfache Charts, die nur die wesentlichen Elemente beinhalten und gänzlich auf Legenden, Achsen und Beschriftungen verzichten. Sie werden in erster Linie in Tabellen und Matrizen verwendet, um viel Information auf möglichst geringem Raum zu repräsentieren.<br />
Typischerweise zeigen Data Bars nur einen Wert pro Zeile an, um den Vergleich der Werte untereinander zu vereinfachen:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/122309_2210_Wasgibtesne2.png" alt="" /><br />
<br\><br />
Im Gegensatz zu den Sparklines, die normalerweise den zeitlichen Verlauf wiederspiegeln:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/122309_2210_Wasgibtesne3.png" alt="" /><br />
<br\><br />
Bei den Sparklines wäre noch anzumerken, dass sie nur in Gruppen- und nicht in Detailzeilen verwendet werden können.<br />
<br\></p>
<h3><span style="color: #999999;">Indikatoren</span></h3>
<p><br\><br />
Indikatoren werden verwendet, um den Status eines Wertes auf den ersten Blick erkennen zu können. Sie werden häufig in Tabellen und Matrizen eingesetzt. Ein Indikator ist ein vereinfachtes Messgerät und kann auch in eben dieses umgewandelt werden. Sie können Trends anhand von Pfeilen, Abstimmungen durch Sterne und Status durch Bilder wie z.B. der Ampel darstellen:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/122309_2210_Wasgibtesne4.png" alt="" /><br />
<br\></p>
<h3>Erweiterungen der RDL Ausdruckssprache</h3>
<p><br\></p>
<h3><span style="color: #999999;">Aggregationen von Aggregationen</span></h3>
<p><br\><br />
In der aktuellen Version ist es endlich möglich Ausdrücke zu verwenden, die Aggregationen von Aggregationen bilden. Dadurch können Werte, wie z.B. der Durchschnitt der monatlichen Einnahmen gebildet werden.<br />
<span style="font-family: Courier New;">=Avg(Sum(Fields!Reseller_Sales_Amount.Value, &#8220;Month&#8221;),&#8221;Year&#8221;)</span><strong><br />
</strong><br />
<br\></p>
<h3><span style="color: #999999;">OverallPageNumber und OverallTotalPages</span></h3>
<p><br\><br />
Zeigt die Gesamtseitenzahl und die aktuelle Seitenzahl bezogen auf das gesamte Dokument. Im Gegensatz zu den schon bekannten Feldern <span style="font-family: Courier New;">PageNumber</span> und <span style="font-family: Courier New;">TotalPages</span>, die die Seitenzahlen abhängig von einer Sequenz angeben(die Seitenzahlen können durch ein PageBreak zurückgesetzt werden). Diese Eigenschaften können nur im Seitenkopf oder –fuß verwendet werden.<br />
<br\></p>
<h3><span style="color: #999999;">RenderFormat</span></h3>
<p><br\><br />
Eine weitere neue, in meinen Augen sehr nützliche Eigenschaft, ist die Globale <span style="font-family: Courier New;">RenderFormat</span>. Zum Einen kann der Name durch <span style="font-family: Courier New;">Globals!RenderFormat.Name</span> ermittelt werden und zum Anderen, mit der Expression <span style="font-family: Courier New;">=Globals!RenderFormat.IsInteractive,</span> ob es sich um ein interaktives Ausgabeformat handelt.<br />
<br\><br />
Durch die Möglichkeit das Ausgabeformat zu ermitteln ergeben sich ganz neue Gestaltungsmöglichkeiten. So können für ein Excel-Export z.B. Spalten einer Tabelle ein- oder ausgeblendet werden. Es können Abhängig vom Ausgabeformat komplett unterschiedliche Elemente angezeigt werden.<br />
Bei nicht interaktiven Formaten können, durch den Drilldown versteckte Elemente, sichtbar gemacht werden.<br />
<br\></p>
<h3><span style="color: #999999;">PageName</span></h3>
<p><br\><br />
Endlich können Excelsheets einer Excel-Datei mit Namen versehen werden. Dafür müssen Sie einfach den PageName angeben. Wenn Sie den PageName dynamisch vergeben und den Gruppennamen verwenden für den ein PageBreak existiert, bekommt jedes Excelsheet den Namen der Gruppe.</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/122309_2210_Wasgibtesne5.png" alt="" /><br />
<br\><br />
Mit der Eigenschaft PageBreak/Disabled kann z.B., abhängig vom RenderFormat, der Seitenumbruch deaktiviert werden.<br />
<br\></p>
<h3>Maps</h3>
<p><br\><br />
Was man in früheren Versionen der Reporting Services von Drittanbietern kaufen musste, wurde in der aktuellen Version integriert. Dieses neue Berichtselement dient zur Visualisierung von Daten abhängig von ihrer geographischen Lage. Es stehen eine Vielzahl von Karten in der Kartengalerie zur Verfügung (zurzeit, wohl aus rechtlichen Gründen, nur Karten der USA). Falls Sie eine andere Karte benötigen, können auch ESRI-Shapefiles oder SQL Spatial Datentypen verwendet werden. Sie können hinter Ihre Karte noch eine Bing Karte legen, um die Darstellung noch etwas aufzuwerten. Folgende Kartenvisualisierungen stehen zur Verfügung:</p>
<ul>
<li><strong>Basic Map (Basis Karte)</strong> – Es werden einfach nur Gebiete angezeigt. So können z.B. Ihre Verkaufsgebiete angezeigt werden.</li>
<li><strong>Color Analytical Map (Farbanalytische Karte) </strong>– Informationen werden durch Farbvariationen hervorgehoben. Z.B. werden die Verkaufszahlen pro Gebiet farblich gekennzeichnet.</li>
<li><strong>Bubble Map (Blasen Karte)</strong> – Informationen werden durch die Größe der Blasen angezeigt. Die Blasen liegen zentriert in den zugehörigen Gebieten.</li>
</ul>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/122309_2210_Wasgibtesne6.png" alt="" /><br />
<br\></p>
<h3><span style="color: #000000;">Report Viewer</span></h3>
<p><br\><br />
Der neue Report Viewer verwendet AJAX für die Seitennavigation und die Interaktivität. So wird beim Öffnen eines Drilldowns die aktuelle Scrollposition beibehalten.<br />
Das Aussehen wurde angepasst und optimiert, um mehr Platz für den Bericht zu haben.<br />
<br\><br />
Wir konnten natürlich nur einen kurzen Überblick über die neuen Features der Reporting Services des SQL Server 2008 R2 geben und werden daher in den nächsten Blogeinträgen gezielt und detailliert einzelne der oben genannten Features beschreiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2008/was-gibt-es-neues-beim-sql-server-2008-r2-ssrs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kaskadierende Parameter – Easy as can be</title>
		<link>http://www.ixto.de/blog/sql-server-2005/reportingservices/kaskadierende-parameter-%e2%80%93-easy-as-can-be/</link>
		<comments>http://www.ixto.de/blog/sql-server-2005/reportingservices/kaskadierende-parameter-%e2%80%93-easy-as-can-be/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 09:41:57 +0000</pubDate>
		<dc:creator>Marcel Ebner</dc:creator>
				<category><![CDATA[Reporting Services 2005]]></category>
		<category><![CDATA[Reporting Services 2008]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2005/reportingservices/kaskadierende-parameter-%e2%80%93-easy-as-can-be/</guid>
		<description><![CDATA[Herr G. Ordnet, Controller der Firma Adventure Works, möchte sich für ausgewählte Produkte seines Unternehmens die Internetverkäufe und die Frachtkosten ansehen. Er beauftragt den Reportbauer Z. Schnell mit dem Erstellen eines Berichts. Selbiger überdenkt die Anforderung und stellt einen Bericht mit einer Parameterliste aller Produkte zur Verfügung.

Nachdem Herr G. Ordnet mehrere Male alle 606 Produkte [...]]]></description>
			<content:encoded><![CDATA[<p>Herr G. Ordnet, Controller der Firma Adventure Works, möchte sich für ausgewählte Produkte seines Unternehmens die Internetverkäufe und die Frachtkosten ansehen. Er beauftragt den Reportbauer Z. Schnell mit dem Erstellen eines Berichts. Selbiger überdenkt die Anforderung und stellt einen Bericht mit einer Parameterliste aller Produkte zur Verfügung.<br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/071009_0941_Kaskadieren1.jpg" alt="" width="306" height="186" /><br />
Nachdem Herr G. Ordnet mehrere Male alle 606 Produkte seiner Firma in der Auswahlkombobox des Berichtes durchforstet hat, platzt ihm der Kragen und er bittet um eine &#8220;vernünftige Einschränkung der Produkte nach Kategorien.&#8221;</p>
<p><span id="more-59"></span><br />
<br\><br />
Ein Glück, dass in der Datenbank diese Produktkategorien vorhanden sind, denkt sich Herr Schnell und entwickelt die sog. &#8220;cascading parameters&#8221; &#8211; also voneinander abhängige, hierarchisch angeordnete Parameter, deren Auswahl die Wertanzahl folgender Parameter einschränkt.<br />
<br\><br />
Zuerst werden im Report drei statt einem Parameter erzeugt. Alle Parameter sind mehrwertig und haben keinen Standardwert.</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/071009_0941_Kaskadieren2.jpg" alt="" width="256" height="144" /><br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/071009_0941_Kaskadieren3.jpg" alt="" width="144" height="156" /><br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/071009_0941_Kaskadieren4.jpg" alt="" width="387" height="87" /><br />
<br\><br />
Dann werden drei Datasets für die Parameter mit folgenden Statements angelegt:</p>
<p><strong>Produktkategorie:<br />
</strong></p>
<p>SELECT      ProductCategoryKey, EnglishProductCategoryName FROM  DimProductCategory</p>
<p><strong>Produktunterkategorie:<br />
</strong></p>
<p>SELECT        ProductSubcategoryKey, EnglishProductSubcategoryName FROM         DimProductSubcategory</p>
<p><span style="color: #4f81bd;"><strong>WHERE        (ProductCategoryKey IN (@ProductCategory))</strong><br />
</span></p>
<p><strong>Produkte selbst</strong>:</p>
<p>SELECT        EnglishProductName, ProductKey FROM  DimProduct</p>
<p><span style="color: #4f81bd;"><strong>WHERE        (ProductSubcategoryKey IN (@ProdSubCategory))</strong><br />
</span><br />
<br\><br />
Schlussendlich erzeugt Herr Schnell ein Dataset für die Werteabfrage:<br />
<strong></strong><br />
SELECT   DimProduct.EnglishProductName, FactInternetSales.OrderQuantity * FactInternetSales.UnitPrice AS OrderVolume, FactInternetSales.Freight FROM DimProduct INNER JOIN FactInternetSales ON DimProduct.ProductKey = FactInternetSales.ProductKey</p>
<p><span style="color: #4f81bd;"><strong>WHERE  (FactInternetSales.ProductKey IN (@Products))</strong><br />
</span><br />
<strong></strong><br />
<br\><br />
Weil Herr Schnell auf Standardwerte verzichtet hat, und alle vom vorhergehenden Parameter abhängigen Parameterabfragen ohne eine Auswahl des vorhergehenden Parameters nicht getätigt werden können, sind die Auswahlboxen der nachfolgenden Parameter solange deaktiviert, bis die nötige Vorauswahl von Kategorien oder Unterkategorien abgeschlossen ist.</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/071009_0941_Kaskadieren5.jpg" alt="" width="609" height="62" /><br />
<strong> </strong><br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/071009_0941_Kaskadieren6.jpg" alt="" width="609" height="103" /></p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/071009_0941_Kaskadieren7.jpg" alt="" width="609" height="190" /><br />
<br\><br />
Nun hat Herr G. Ordnet nur die Produkte zur Auswahl, deren Anzahl er vorher durch die Auswahl an Kategorien eingeschränkt hat – und Herr Schnell noch seinen Job.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2005/reportingservices/kaskadierende-parameter-%e2%80%93-easy-as-can-be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DistinctSum oder ich will den Reiniger nicht zweimal zählen</title>
		<link>http://www.ixto.de/blog/sql-server-2005/reportingservices/distinctsum-oder-ich-will-den-reiniger-nicht-zweimal-zahlen/</link>
		<comments>http://www.ixto.de/blog/sql-server-2005/reportingservices/distinctsum-oder-ich-will-den-reiniger-nicht-zweimal-zahlen/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 16:23:36 +0000</pubDate>
		<dc:creator>Sven Bayer</dc:creator>
				<category><![CDATA[Reporting Services 2005]]></category>
		<category><![CDATA[Reporting Services 2008]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2005/reportingservices/distinctsum-oder-ich-will-den-reiniger-nicht-zweimal-zahlen/</guid>
		<description><![CDATA[Eine der häufigsten Anforderungen in Berichten, neben der grafischen Darstellung von Datenreihen, ist die Auflistung von Daten in Tabellen und Matrizen. Dabei sollen in den meisten Fällen auch die Summen der Gruppen und die Gesamtsumme, wie in der ersten Abbildung, gebildet werden.



Ja und, kann doch jeder: Einfach die Sum-Funktion verwenden:


Stimmt, in den meisten Fällen kommen wir [...]]]></description>
			<content:encoded><![CDATA[<p>Eine der häufigsten Anforderungen in Berichten, neben der grafischen Darstellung von Datenreihen, ist die Auflistung von Daten in Tabellen und Matrizen. Dabei sollen in den meisten Fällen auch die Summen der Gruppen und die Gesamtsumme, wie in der ersten Abbildung, gebildet werden.</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/063009_1622_1.png" alt="" /></p>
<p><span id="more-55"></span><br />
<br\><br />
Ja und, kann doch jeder: Einfach die Sum-Funktion verwenden:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/063009_1622_2.png" alt="" /><br />
<br\><br />
Stimmt, in den meisten Fällen kommen wir damit zum Ziel.<br />
<br\><br />
Was aber, wenn wir noch mehr Informationen anzeigen wollen und dadurch einige Werte doppelt vor kommen, wie z.B. in unserem Beispiel, wenn wir nicht nur die Informationen des Internetverkaufs anzeigen wollen, sondern auch noch die Daten der Wiederverkäufer und zwar landesbezogen. Wenn wir dann die Sum-Funktion verwenden bekommen wir folgende Tabelle:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/063009_1622_3.png" alt="" /><br />
<br\><br />
Wie man erkennen kann sind die Informationen über den Internetverkauf unabhängig vom Land, wodurch in jeder Zeile die Gesamtmenge für diesen einen Reiniger angezeigt wird. Der Wert für die Anzahl, der mit der einfachen Summenfunktion ermittelt wurde, summiert natürlich jede Zeile auf, wodurch wir ein Ergebnis von 6 * 908 = 5448 erhalten. Richtig wäre, wenn auch in der Gruppenzeile 908 stehen würde.<br />
<br\><br />
<strong>Die Lösung</strong><br />
<br\><br />
Wir müssen also in der Summenfunktion prüfen, ob der Wert schon mal aufsummiert wurde. Das können wir erreichen, indem wir im Code eine globale Variable vom Typ String definieren. Jedes neue Produkt wird ans Ende des Strings geschrieben, so dass eine Liste mit den einzelnen Produkten entsteht. Als nächstes wird noch eine Funktion benötigt, die zum Einen den Wert und zum Anderen den Produktnamen übergeben bekommt. Diese überprüft, ob das Produkt schon in der Liste steht, falls dies nicht der Fall ist, wird der Wert zurückgegeben und der Name in der Liste aufgenommen. Falls der Name schon vorhanden ist, wird 0 zurückgegeben, wie der Codeausschnitt zeigt:</p>
<p><span style="font-family: Courier New;">private productList as String = String.Empty<br />
</span></p>
<p><span style="font-family: Courier New;">function DistinctSum(quantity as Integer, product as String) as Integer<br />
    if productList.IndexOf(product) = -1 then<br />
        productList += product + &#8220;, &#8221;<br />
        return quantity<br />
    else<br />
        return 0<br />
    end if<br />
end function<br />
</span><br />
<br\><br />
Man muss nur darauf achten, dass die Funktion immer Daten vom gleichen Typ zurück gibt, da es sonst passieren kann, dass die Summe nicht berechnet wird.<br />
<br\><br />
Abschließend muss die Gruppenzeile so angepasst werden, dass sie die neu erstellte Funktion verwendet. Leider ist es nicht möglich, einfach das Array mit den Details zu übergeben und die Summe zu berechnen. Daher verwenden wir weiterhin die Summenfunktion, um die Liste der Details einer Gruppe zu durchlaufen. Der Trick ist jetzt  nicht einfach ein Feld eines Datasets einzutragen, sondern inerhalb der Summe die im Code erstellte Funktion zu verwenden, die dann für jedes einzelne Element prüft, ob es schon aufaddiert wurde:</p>
<p><span style="font-family: Courier New;">=Sum(code.DistinctSum(Fields!Internet_Order_Quantity.Value,Fields!Product.Value))<br />
</span><br />
<br\><br />
Wenn der Bericht, wie beschrieben angepasst wurde sollte jetzt für die Anzahl der Bestellungen, wie in der abschließenden Grafik,  der richtige Wert angezeigt werden.</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/063009_1622_4.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2005/reportingservices/distinctsum-oder-ich-will-den-reiniger-nicht-zweimal-zahlen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aktuelle Probleme mit dem Abfrage-Designer für MDX</title>
		<link>http://www.ixto.de/blog/sql-server-2008/reporting-services-sql-server-2008/aktuelle-probleme-mit-dem-abfrage-designer-fur-mdx/</link>
		<comments>http://www.ixto.de/blog/sql-server-2008/reporting-services-sql-server-2008/aktuelle-probleme-mit-dem-abfrage-designer-fur-mdx/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 10:58:05 +0000</pubDate>
		<dc:creator>Tilo Sommerwerk</dc:creator>
				<category><![CDATA[Reporting Services 2008]]></category>
		<category><![CDATA[Abfrage-Designer]]></category>
		<category><![CDATA[MDX im SQL Server 2005]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2008/reporting-services-sql-server-2008/aktuelle-probleme-mit-dem-abfrage-designer-fur-mdx/</guid>
		<description><![CDATA[Bei ixto sind wir meistens sehr mit der Produktqualität von Microsoft zufrieden und auch SQL Server 2008 macht auf den ersten Blick einen ausgezeichneten Eindruck. Wir, das Team der Berichtsdesigner, sahen uns allerdings schnell an unsere Toleranzgrenzen gebracht als wir den neuen Abfrage-Designer für MDX im Berichtsdesigner erleben durften.

Nun, nicht jeder von uns schreibt sein [...]]]></description>
			<content:encoded><![CDATA[<p>Bei ixto sind wir meistens sehr mit der Produktqualität von Microsoft zufrieden und auch SQL Server 2008 macht auf den ersten Blick einen ausgezeichneten Eindruck. Wir, das Team der Berichtsdesigner, sahen uns allerdings schnell an unsere Toleranzgrenzen gebracht als wir den neuen Abfrage-Designer für MDX im Berichtsdesigner erleben durften.<br />
<br\><br />
Nun, nicht jeder von uns schreibt sein MDX selbst, sondern benutzt den sehr komfortablen grafischen Editor. Performance spielt bei vielen Abfragen und natürlich für den Benutzer eine Rolle, also tunen wir gelegentlich die generierten Abfragen manuell, d.h. wir greifen direkt in die MDX-Syntax ein und verändern diese. Manchmal ist eine Modifizierung grundsätzlich notwendig, wenn man beispielsweise in einer Hierarchie nur bis zu einer bestimmten Ebene Daten abfragen möchte.<br />
<span id="more-45"></span><br />
<br\><br />
Wir haben folgende Problemstellen mit dem MDX Abfrage-Designer identifiziert und Microsoft dazu befragt:<br />
 <br\><br />
<strong>Verlorene Formatierungen</strong><br />
<br\><br />
Modifizierte und formatierte MDX-Abfragen verlieren jegliche Formatierungen, wie z.B. Zeilenumbrüche und Einrückungen, nachdem man den Bericht komplett geschlossen und dann bis zur Abfrage wieder geöffnet hat. Jeder, der sich schon mal die Abfrage eines vom Visual Studio 2005 generierten Parameters angesehen hat, weiß, wie unlesbar dieser Code ist.</p>
<p style="margin-left: 35pt;"><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121808_1057_AktuellePro1.jpg" alt="" /></p>
<p style="margin-left: 35pt;"> </p>
<p>Die Zeilenumbrüche finden sich allerdings im RDL direkt wieder. Nur ist diese Tatsache wenig hilfreich, wenn die Zeilenumbrüche im Abfrage-Designer nicht angezeigt werden.<br />
Der Bug scheint bisher keine Beachtung bei den Entwicklern gefunden zu haben.<br />
 <br />
<strong>Kein Syntax Highlighting</strong></p>
<p>Schon schlimm genug, dass die Formatierung immer verloren geht, da wurde das Syntax Highlighting auch noch Opfer von Integrationsproblemen. Wie im Screenshot zu sehen, ist die Abfrage im neuen Editor so gut wie unlesbar.</p>
<p style="margin-left: 35pt;"><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121808_1057_AktuellePro2.jpg" alt="" /></p>
<p style="margin-left: 35pt;"> </p>
<p>Es heißt, dass es ein Visual Studio Integrationsproblem war, welches bis zum Release von SQL Server 2008 nicht behoben werden konnte. Es wird angestrebt, es in einer zukünftigen Version zu beheben.</p>
<p style="margin-left: 35pt;"> </p>
<p><strong>Sonderzeichen </strong></p>
<p>In der englischen Version ist das Problem mit den Formatierungen noch gravierender. Hier entstehen Sonderzeichen, die die Zeilenumbrüche sein sollen, aber nicht entsprechend angezeigt werden.</p>
<p style="margin-left: 35pt;"><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121808_1057_AktuellePro3.jpg" alt="" /></p>
<p style="margin-left: 35pt;"> </p>
<p>Auch dieser Bug scheint bei den Entwicklern noch nicht wirklich angekommen zu sein.</p>
<p style="margin-left: 18pt;"> </p>
<p>Für die Punkte 1 bis 3 gibt es den Workaround, die MDX-Abfrage in eine Abfrage im Management Studio zu kopieren. Hier hat man die Formatierung und das Syntaxhighlighting wieder. Durch zurückkopieren erhält man jetzt auch im Designer die Formatierung zurück.<br />
Leider kann das Management Studio nicht mit den Parametern in der Abfrage umgehen, daher würden wir das MDX Studio von Mosha Pasumansky empfehlen, denn mit dieser Anwendung gewinnen Sie nicht nur das Syntax Highlighting zurück und haben eine Autoformatierungsfunktion, sondern es ist auch möglich Parameter via XML-Tags in die Abfrage einzubinden.<br />
Das MDX Studio ist auf der Seite <a href="http://www.mdxstudio.com/">http://www.mdxstudio.com/</a> zu finden.<br />
Um sich das Schreiben der einzelnen XML-Tags für die Parameter, es können ja doch manchmal ganz schön viele sein, zu ersparen, kann die Abfrage mit dem SQL-Profiler &#8220;mitgeschnitten&#8221; und dann direkt in das MDX Studio kopiert werden.<br />
<br\><br />
<strong>Automatisch überschriebene Parameterdatasets</strong><br />
Die Probleme, die bis jetzt beschrieben wurden, hatten nur etwas mit der Benutzerfreundlichkeit zu tun, das jetzt beschriebene Verhalten kann aber zu richtigen Fehlern führen, wie es unbemerkt bleibt.</p>
<p>Wie auch bei SSRS 2005 werden Datasets für Parameter automatisch generiert, wenn sie in der Hauptabfrage erzeugt werden. Das Problem entsteht, wenn man die Abfrage für die Parameter anpasst, da man vielleicht einige Elemente nicht benötigt, und danach noch mal die Hauptabfrage ändert, wird wieder das &#8220;Default&#8221; Dataset für den Parameter erstellt und die eigenen Anpassungen gehen verloren.</p>
<p>Was möglicherweise gut gemeint ist, und das manuelle generieren von Parameterdatasets abnehmen soll, führt unter diesen Umständen zu mehrfachem Wiederholen derselben Arbeit oder sogar zu Fehlern, wenn die automatische Änderung unbemerkt bleibt.</p>
<p>Dieses Problem haben die Entwickler wohlwollend aufgenommen und scheint zur Diskussion zu stehen.</p>
<p style="margin-left: 35pt;"> </p>
<p>Ein Workaround das automatische Überschreiben der Parameterdatasets zu unterbinden ist, die Bindungen an die Dimensionen zu entfernen. Als Standardwerte muss man Elemente in MDX-Syntax setzen, was natürlich die Funktionalität des Assistenten einschränkt und das Ändern der Standardwerte stark erschwert.</p>
<p style="margin-left: 18pt;"><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121808_1057_AktuellePro4.jpg" alt="" /></p>
<p style="margin-left: 18pt;"> </p>
<p>Mit den hier beschriebenen Workarounds ist es aber auch für MDX-Fans durchaus sinnvoll mit dem SSRS 08 zu arbeiten und die neuen Features, wie Tablix und erweiterte Gruppierbarkeit zu nutzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2008/reporting-services-sql-server-2008/aktuelle-probleme-mit-dem-abfrage-designer-fur-mdx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Berichtmigration von Reporting Services 2005 nach 2008 mit Dundas Charts</title>
		<link>http://www.ixto.de/blog/sql-server-2008/berichtmigration-von-reporting-services-2005-nach-2008-mit-dundas-charts/</link>
		<comments>http://www.ixto.de/blog/sql-server-2008/berichtmigration-von-reporting-services-2005-nach-2008-mit-dundas-charts/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 13:56:51 +0000</pubDate>
		<dc:creator>Tilo Sommerwerk</dc:creator>
				<category><![CDATA[Reporting Services 2008]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[Bericht]]></category>
		<category><![CDATA[Chart]]></category>
		<category><![CDATA[Diagramm]]></category>
		<category><![CDATA[Dundas]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Reporting Services]]></category>
		<category><![CDATA[RS]]></category>
		<category><![CDATA[Tabelle]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2008/berichtmigration-von-reporting-services-2005-nach-2008-mit-dundas-charts/</guid>
		<description><![CDATA[



  

Eine Migration von Berichten mit Dundas Charts von Reporting Services (RS) 2005 nach 2008 funktioniert dank der neu integrierten Diagrammfunktionalitäten in RS 2008 relativ problemlos.
Einige Konvertierungen mit Diagrammen von Dundas laufen allerdings darauf hinaus, dass sie in RS 2008 als fehlerhaft gemeldet werden und auch nicht ersichtlich ist, woran es liegt. Visual Studio [...]]]></description>
			<content:encoded><![CDATA[<p><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="ProgId" content="Word.Document" /><meta name="Generator" content="Microsoft Word 12" /><meta name="Originator" content="Microsoft Word 12" /></p>
<link href="file:///C:%5CUsers%5CTSOMME%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List" />
<link href="file:///C:%5CUsers%5CTSOMME%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData" />
<link href="file:///C:%5CUsers%5CTSOMME%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping" /><!--[if gte mso 9]><xml>  <w:WordDocument>   <w:View>Normal</w:View>   <w:Zoom>0</w:Zoom>   <w:TrackMoves/>   <w:TrackFormatting/>   <w:HyphenationZone>21</w:HyphenationZone>   <w:PunctuationKerning/>   <w:ValidateAgainstSchemas/>   <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>   <w:IgnoreMixedContent>false</w:IgnoreMixedContent>   <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>   <w:DoNotPromoteQF/>   <w:LidThemeOther>DE</w:LidThemeOther>   <w:LidThemeAsian>X-NONE</w:LidThemeAsian>   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>   <w:Compatibility>    <w:BreakWrappedTables/>    <w:SnapToGridInCell/>    <w:WrapTextWithPunct/>    <w:UseAsianBreakRules/>    <w:DontGrowAutofit/>    <w:SplitPgBreakAndParaMark/>    <w:DontVertAlignCellWithSp/>    <w:DontBreakConstrainedForcedTables/>    <w:DontVertAlignInTxbx/>    <w:Word11KerningPairs/>    <w:CachedColBalance/>   </w:Compatibility>   <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>   <m:mathPr>    <m:mathFont m:val="Cambria Math"/>    <m:brkBin m:val="before"/>    <m:brkBinSub m:val="&#45;-"/>    <m:smallFrac m:val="off"/>    <m:dispDef/>    <m:lMargin m:val="0"/>    <m:rMargin m:val="0"/>    <m:defJc m:val="centerGroup"/>    <m:wrapIndent m:val="1440"/>    <m:intLim m:val="subSup"/>    <m:naryLim m:val="undOvr"/>   </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml>  <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267">   <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal"/>   <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>   <w:LsdException Locked="false" Priority="39" Name="toc 1"/>   <w:LsdException Locked="false" Priority="39" Name="toc 2"/>   <w:LsdException Locked="false" Priority="39" Name="toc 3"/>   <w:LsdException Locked="false" Priority="39" Name="toc 4"/>   <w:LsdException Locked="false" Priority="39" Name="toc 5"/>   <w:LsdException Locked="false" Priority="39" Name="toc 6"/>   <w:LsdException Locked="false" Priority="39" Name="toc 7"/>   <w:LsdException Locked="false" Priority="39" Name="toc 8"/>   <w:LsdException Locked="false" Priority="39" Name="toc 9"/>   <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>   <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title"/>   <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>   <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>   <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong"/>   <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>   <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid"/>   <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>   <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>   <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>   <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>   <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote"/>   <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>   <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>   <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>   <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>   <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>   <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>   <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>   <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>  </w:LatentStyles> </xml><![endif]--><br />
<style> <!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-alt:"Calisto MT"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-alt:"Arial Rounded MT Bold"; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman";} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 70.85pt 2.0cm 70.85pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --> </style>
<p><!--[if gte mso 10]></p>
<style>  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Normale Tabelle"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} </style>
<p> <![endif]--></p>
<p class="MsoNormal">Eine Migration von Berichten mit Dundas Charts von Reporting Services (RS) 2005 nach 2008 funktioniert dank der neu integrierten Diagrammfunktionalitäten in RS 2008 relativ problemlos.</p>
<p class="MsoNormal">Einige Konvertierungen mit Diagrammen von Dundas laufen allerdings darauf hinaus, dass sie in RS 2008 als fehlerhaft gemeldet werden und auch nicht ersichtlich ist, woran es liegt. Visual Studio bietet an, den Code zu sichten, aber wer möchte gerne seitenlanges XML durchforsten auf der Suche nach möglichen Fehlern?</p>
<p><span id="more-38"></span><br />
<br\></p>
<p class="MsoNormal">Empirisch gelangten wir zu dem Schluss, dass in jedem letztlich fehlerhaften Bericht die Dundas Charts in einer Tabelle eingebettet waren. Nun ist die Lösung ganz einfach: in RS 2005 die Charts aus der Tabelle herausschneiden und im Bericht außerhalb der Tabelle einfügen. Der Bericht muss gespeichert und als nächstes in Visual Studio 2008 erneut geöffnet werden. Dieses Mal war die Konvertierung erfolgreich! Der Entwickler braucht nur noch die Charts wieder in die Tabelle an die ursprüngliche Stelle einfügen und umgeht damit einen zeitaufwendigen Neubau.</p>
<p class="MsoNormal">Vor einer Konvertierung mit Dundas Charts in einer Tabelle die Diagramme also aus der Tabelle herausnehmen und alles wird gut.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2008/berichtmigration-von-reporting-services-2005-nach-2008-mit-dundas-charts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

