<?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 2005</title>
	<atom:link href="http://www.ixto.de/blog/category/sql-server-2005/reportingservices/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>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>Dynamische Rahmen innerhalb einer Matrix und/oder die Knechtschaft des Layouts durch das Dataset</title>
		<link>http://www.ixto.de/blog/sql-server-2005/reportingservices/dynamische-rahmen-innerhalb-einer-matrix-undoder-die-knechtschaft-des-layouts-durch-das-dataset/</link>
		<comments>http://www.ixto.de/blog/sql-server-2005/reportingservices/dynamische-rahmen-innerhalb-einer-matrix-undoder-die-knechtschaft-des-layouts-durch-das-dataset/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 17:29:19 +0000</pubDate>
		<dc:creator>Marcel Ebner</dc:creator>
				<category><![CDATA[Reporting Services 2005]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2005/reportingservices/dynamische-rahmen-innerhalb-einer-matrix-undoder-die-knechtschaft-des-layouts-durch-das-dataset/</guid>
		<description><![CDATA[1. Die Anforderung ist simpel:

&#8220;Die Linien innerhalb der Matrix sollen Grau und die untere Zeile soll bitte schwarz sein.&#8221;

Die meisten Reportdesigner schreiben sich solch ein Anliegen gar nicht auf, sondern setzen schlicht die Rahmenfarbe der Zeilen auf Grau und die des Subtotals auf Schwarz und reichen den Report zufrieden weiter.


Ergebnis:


2. Die Anforderung erweitert sich &#8220;gering&#8221;:

&#8220;Sehr [...]]]></description>
			<content:encoded><![CDATA[<p>1. Die Anforderung ist simpel:<br />
<br\><br />
&#8220;Die Linien innerhalb der Matrix sollen Grau und die untere Zeile soll bitte schwarz sein.&#8221;<br />
<br\><br />
Die meisten Reportdesigner schreiben sich solch ein Anliegen gar nicht auf, sondern setzen schlicht die Rahmenfarbe der Zeilen auf Grau und die des Subtotals auf Schwarz und reichen den Report zufrieden weiter.</p>
<p><span id="more-41"></span><br />
<br\><br />
Ergebnis:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR1.jpg" alt="" /><br />
<br\><br />
2. Die Anforderung erweitert sich &#8220;gering&#8221;:<br />
<br\><br />
&#8220;Sehr geehrter Reportdesigner, die senkrechten Linien gefallen uns nicht, könnten Sie stattdessen einen Abstand zwischen die Länderspalten einbauen?&#8221;<br />
<br\><br />
Noch kommt keine Unruhe auf, flugs wird folgendes Design umgesetzt:<br />
Auf den Zeilen wird eine neue Gruppe mit derselben Gruppierung wie die vorhergehende und im Detailfeld der Matrix einfach eine weitere Spalte eingefügt.<br />
Die Rahmen der eingefügten Abstandsspalten bleiben unsichtbar, die Rahmenfarbe des Subtotals bleibt weiterhin schwarz.</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR2.jpg" alt="" /><br />
<br\><br />
Ergebnis:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR3.jpg" alt="" /><br />
<br\><br />
Die Linie des Subtotals zieht sich leider über alle Spalten hinweg. Dies mag dem einen oder anderen nicht der Rede wert erscheinen, ärgerlich und unschön bleibt es trotzdem.<br />
<br\><br />
Konsequenz des pfiffigen Reportdesigners:<br />
<br\><br />
<strong>Ausblenden der Rahmen des Subtotals und Formatierung der Rahmenfarbe der Zeilengruppen und des Detailfeldes!<br />
</strong><br />
<br\><br />
Dies kann durch folgende Ausdrücke erreicht werden <span style="font-size: 9pt;"><em>(bei BorderStyle, Bottom=Solid)</em></span><br />
<br\><br />
Für die Zeilengruppen (Textbox Product) gilt:<br />
<span style="color: #0070c0;">BorderColor=IIF(RowNumber(&#8220;MyDataSetName&#8221;)=CountRows(&#8220;MyDataSetName&#8221;), &#8220;Black&#8221;,&#8221;Silver&#8221;)</span><span style="color: #548dd4;"><br />
</span>d.h.:<span style="color: #1f497d;"><br />
</span>Wenn die letzte Zeile des Datasets erreicht ist, färbe die Rahmen bitte Schwarz ein, sonst Silber.<br />
<br\><br />
Für die Zeile funktioniert das prima, für das Detailfeld muss aber auf die letzte Zeile der <strong>Spaltengruppe</strong> verwiesen werden, da das Scope <span style="color: #1f497d;">(&#8220;MyDataSetName&#8221;) </span>auf Detailebene nicht gültig ist.<br />
<br\><br />
Für das Detailfeld (Textbox mit Wertfeld) muss also gelten:<br />
<span style="color: #0070c0;">BorderColor=IIF(RowNumber(&#8220;<strong>MyColumnGroupName</strong>&#8220;)=CountRows(&#8220;<strong>MyColumnGroupName</strong> &#8220;),&#8221;Black&#8221;,&#8221;Silver&#8221;)<br />
</span><br />
<br\><br />
Und genau an dieser Stelle fängt der Ärger an.<br />
<br\><br />
Nehmen wir an, der Reportdesigner ist ein sparsamer Mensch und möchte sich im Dataset die leeren Zeilen für den OrderCount in Australien und Frankreich sparen und filtert diese Zeilen heraus.</p>
<p><span style="font-size: 8pt;"><em>MDX:<br />
</em></span></p>
<p><span style="font-size: 10pt; font-family: Courier New;"><span style="color: blue;">SELECT</span><br />
<span style="color: blue;">NON</span><br />
<span style="color: blue;">EMPTY</span><br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">{<br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">[Measures].[Reseller Order Count]<br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">} <span style="color: blue;">ON</span><br />
<span style="color: blue;">COLUMNS</span>,<br />
</span></p>
<p><span style="font-family: Courier New;"><strong><span style="font-size: 12pt; color: blue;">NON</span><span style="font-size: 12pt;"><br />
<span style="color: blue;">EMPTY </span></span><span style="font-size: 10pt;">&#8212; &gt; !! FILTERT LEERZEILEN<span style="color: blue;"><br />
</span></span></strong></span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">{ (<span style="color: maroon;">STRTOSET</span>(@countryCountry,<span style="color: blue;">CONSTRAINED</span>) ,<br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;"><br />
<span style="color: maroon;">STRTOSET</span>(@productProduct,<span style="color: blue;">CONSTRAINED</span>))} <span style="color: blue;">ON</span><br />
<span style="color: blue;">ROWS</span><br />
<span style="color: blue;">FROM</span> [Adventure Works]</span><br />
<br\><br />
Das Dataset sieht dann wie folgt aus:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR4.jpg" alt="" /><br />
<br\><br />
Ergebnis im <strong>bereitgestellten</strong> Report<span style="font-size: 9pt;">: (Die Vorschau im VisualStudio zählt natürlich NICHT!)<br />
</span></p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR5.jpg" alt="" /><br />
<br\><br />
Das Problem wird schnell klar, natürlich ist die letzte Zeile in der Ländergruppe für Australien auch die einzige,<br />
der o.g. Ausdruck sorgt für eine schwarze Färbung und <strong>alle</strong><br />
<strong>nachfolgenden</strong>, vom Report zu rendernden Elemente <strong>übernehmen die Formatierung des letzten Elementes</strong>, welches noch einen direkten Bezug zur Datasetzeile bzw. den Zeilen der angegebenen Gruppe besitzt<strong>. </strong>Das Phänomen kann sowohl auf Zeilen wie auch auf Spaltengruppen beobachtet werden.<br />
<br\><br />
Ein weiterer Versuch, die Ausdrücke für die Rahmenfarbe anders zu formulieren:<br />
<span style="color: #0070c0;">BorderColor=IIF(InScope(&#8220;matrix1_RowGroup1&#8243;),&#8221;Silver&#8221;,&#8221;Black&#8221;)</span><span style="color: #1f497d;"></span>zeigte gar kein Ergebnis für die Spalten:<br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR6.jpg" alt="" /><span style="color: #1f497d;"><br />
</span><br />
<br\><br />
Damit bleibt leider kein anderer Schluss, als die Leerzeilen für die Ländergruppierung mit ins Dataset aufzunehmen:</p>
<p><span style="font-size: 10pt; font-family: Courier New;"><span style="color: blue;">SELECT</span><br />
<span style="color: blue;">NON</span><br />
<span style="color: blue;">EMPTY</span><br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">{<br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">[Measures].[Reseller Order Count]<br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">} <span style="color: blue;">ON</span><br />
<span style="color: blue;">COLUMNS</span>,<br />
</span></p>
<p><span style="font-size: 10pt; color: green; font-family: Courier New;">&#8211;non empty auskommentiert<br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;">{ (<span style="color: maroon;">STRTOSET</span>(@countryCountry,<span style="color: blue;">CONSTRAINED</span>) ,<br />
</span></p>
<p><span style="font-size: 10pt; font-family: Courier New;"><br />
<span style="color: maroon;">STRTOSET</span>(@productProduct,<span style="color: blue;">CONSTRAINED</span>))} <span style="color: blue;">ON</span><br />
<span style="color: blue;">ROWS</span><br />
<span style="color: blue;">FROM</span> [Adventure Works]</span><br />
<br\><br />
Dataset:<br />
<img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR7.jpg" alt="" /><br />
<br\><br />
Gewünschtes Ergebnis im Report:</p>
<p><img src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/121508_1728_DynamischeR8.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2005/reportingservices/dynamische-rahmen-innerhalb-einer-matrix-undoder-die-knechtschaft-des-layouts-durch-das-dataset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Probleme mit Reporting Services 2005 nach Installation von Vista SP1</title>
		<link>http://www.ixto.de/blog/sql-server-2005/reportingservices/probleme-mit-reporting-services-2005-nach-installation-von-vista-sp1/</link>
		<comments>http://www.ixto.de/blog/sql-server-2005/reportingservices/probleme-mit-reporting-services-2005-nach-installation-von-vista-sp1/#comments</comments>
		<pubDate>Tue, 13 May 2008 16:43:02 +0000</pubDate>
		<dc:creator>Jörg Knuth</dc:creator>
				<category><![CDATA[Reporting Services 2005]]></category>
		<category><![CDATA[Windows Vista]]></category>
		<category><![CDATA[reporting services 2005]]></category>
		<category><![CDATA[service pack]]></category>
		<category><![CDATA[sp]]></category>

		<guid isPermaLink="false">http://www.ixto.de/blog/sql-server-2005/reportingservices/probleme-mit-reporting-services-2005-nach-installation-von-vista-sp1/</guid>
		<description><![CDATA[Dieser Eintrag ist für alle interessant die mit Vista als Betriebssystem arbeiten und sich an die Installation des SP1 gewagt haben.

Nach der Installation dürften sich die Nutzer folgender Ansichten im Internet Explorer erfreuen:




Abb. 1: Fehlermeldung beim Aufruf des Berichts Managers

 

Abb. 2: Fehlermeldung beim Aufruf des Berichtsservers

 
Voraussetzung ist natürlich ein Reporting Services Dienst der vor dem [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Verdana">Dieser Eintrag ist für alle interessant die mit Vista als Betriebssystem arbeiten und sich an die Installation des SP1 gewagt haben.<br />
</span></p>
<p><span style="font-family: Verdana">Nach der Installation dürften sich die Nutzer folgender Ansichten im Internet Explorer erfreuen:<br />
</span><br />
<span id="more-33"></span><br />
<br\></p>
<p><img width="434" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/051308_1642_Problememit1.png" height="264" /></p>
<p><span style="font-size: 8pt; font-family: Verdana"><strong>Abb. 1: </strong>Fehlermeldung beim Aufruf des Berichts Managers</span></p>
<p><span style="font-size: 8pt; font-family: Verdana"><br />
 </span></p>
<p><img width="404" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/051308_1642_Problememit2.png" height="324" style="width: 433px; height: 353px" /></p>
<p><span style="font-size: 8pt; font-family: Verdana"><strong>Abb. 2: </strong>Fehlermeldung beim Aufruf des Berichtsservers</span></p>
<p><span style="font-size: 8pt; font-family: Verdana"><strong><br />
 </strong></span></p>
<p><span style="font-family: Verdana">Voraussetzung ist natürlich ein Reporting Services Dienst der vor dem SP1 korrekt lief. Sollte das nicht der Fall sein, könnte folgender Artikel weiterhelfen <a href="http://support.microsoft.com/kb/934164">Wie Installieren von SQL Server 2005 Reporting Services auf einem Windows Vista-based Computer</a>.<br />
</span></p>
<p><span style="font-size: 8pt; font-family: Verdana"><br />
</span><br />
<span style="font-family: Verdana"><strong>Nun zur Behebung des Problems<br />
</strong></span></p>
<p><span style="font-family: Verdana">Die Ursache ist die Abschaltung der Funktionalitäten für ‚Skripte&#8217; und ‚Ausführen&#8217; für die Site des Berichtsservers. Mit folgenden Schritten sollten die geliebten Berichte wieder erreichbar sein:<br />
</span><span style="font-family: Verdana"><br />
</span></p>
<ol>
<li>Klicken Sie in der Systemsteuerung auf <em>System und Verwaltung</em>.</li>
<li>Klicken Sie auf <em>Verwaltung</em>.</li>
<li>Doppelklicken Sie auf <em>Internetinformationsdienste-Manager</em>.</li>
<li>Klicken Sie in dem Dialogfeld User Account Control auf <em>Fortsetzen</em>.</li>
<li>Öffnen Sie im linken Bereich der Verbindungen den Baum soweit bis Sie auf <em>ReportServer</em> treffen. Im Normalfall sollte das folgender Pfad sein &lt;Servername&gt; -&gt; Sites -&gt; Default Web Site -&gt; ReportServer.</li>
<li>Klicken Sie auf <em>ReportServer</em>.</li>
<li>Im mittleren Bereich auf <em>Handlerzuordnungen</em> doppelklicken.
</li>
<p>     <img width="390" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/051308_1642_Problememit3.png" height="276" /><span style="font-family: Verdana"><br />
</span></p>
<li>Hier liegt die Ursache des Ganzen, das deaktivierte ISAPI Modul. Diese muss nun wieder aktiviert werde. Im Bereich Aktionen auf <em>Featureberechtigungen bearbeiten</em> klicken.
</li>
<p>     <img width="353" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/051308_1642_Problememit4.png" height="249" style="width: 396px; height: 292px" /><span style="font-family: Verdana"><br />
</span></p>
<li>Im Dialog Featureberechtigungen <em>Skript aktivieren</em> und mit <em>OK</em> bestätigen.</li>
<li>Nochmals im Bereich Aktionen auf <em>Featureberechtigungen bearbeiten</em> klicken.</li>
<li>Im Dialog Featureberechtigungen <em>Ausführen aktivieren</em> und mit <em>OK</em> bestätigen. Das ISAPI Modul sollte nun wieder aktiviert sein.</li>
<li>Anschließend muss jetzt noch der IIS neu gestartet werden. Dazu im linken Bereich Verbindungen den Server auswählen und im rechten Bereich Aktionen auf <em>Neu starten</em> klicken.</li>
</ol>
<p><span style="font-size: 8pt; font-family: Verdana"><br />
</span><br />
<span style="font-family: Verdana">Viel Spaß beim weiteren Arbeiten mit Reporting Services 2005, Ihr Jörg Knuth.</span><br />
<span style="font-size: 8pt; font-family: Verdana"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2005/reportingservices/probleme-mit-reporting-services-2005-nach-installation-von-vista-sp1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Trendlinie in Reporting Services 2005 dank MDX</title>
		<link>http://www.ixto.de/blog/sql-server-2005/reportingservices/trendlinie-in-reporting-services-2005-dank-mdx/</link>
		<comments>http://www.ixto.de/blog/sql-server-2005/reportingservices/trendlinie-in-reporting-services-2005-dank-mdx/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 09:34:14 +0000</pubDate>
		<dc:creator>Markus Schechner</dc:creator>
				<category><![CDATA[Reporting Services 2005]]></category>

		<guid isPermaLink="false">http://www.ixto.de/wordpress/?p=21</guid>
		<description><![CDATA[Viele Controller kennen und lieben sie aus Excel: die Trendlinie. Mal eben die Umsätze der letzten Quartale als Balkendiagramm betrachtet und mit zwei Klicks den Trend visualisiert.
&#160;

&#160;
Um so verwirrter guckt dann dieser Controller, wenn man ihm versucht zu erklären, dass das mit den Reporting Services nicht möglich ist. Zum Glück stimmt das auch nicht ganz.
Mit [...]]]></description>
			<content:encoded><![CDATA[<p>Viele Controller kennen und lieben sie aus Excel: die Trendlinie. Mal eben die Umsätze der letzten Quartale als Balkendiagramm betrachtet und mit zwei Klicks den Trend visualisiert.</p>
<p>&nbsp;</p>
<p><a href="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/1cfd5452e220_B9BD/Excel.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="171" alt="Trendlinie in Excel" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/1cfd5452e220_B9BD/Excel_thumb.jpg" width="358" border="0"></a></p>
<p>&nbsp;</p>
<p>Um so verwirrter guckt dann dieser Controller, wenn man ihm versucht zu erklären, dass das mit den Reporting Services nicht möglich ist. Zum Glück stimmt das auch nicht ganz.</p>
<p>Mit Hilfe von <a href="http://www.dundas.com/Products/Chart/RS/index.aspx" target="_blank">Dundas Chart für Reporting Services</a> ist dies fast so einfach wie in Excel. Der Haken liegt dann nur noch bei den Lizenzkosten.</p>
<p>&nbsp;</p>
<p><span id="more-21"></span><br />
<br\></p>
<p>Aber auch ohne zusätzliche Software sind einfache Trendlinien mit SSRS möglich, denn genaugenommen ist das ja nichts weiter als ein &#8220;bisschen&#8221; Mathematik.</p>
<p>Grundlage für die oben gezeigte gerade Trendlinie ist die <em>einfache lineare Regression</em>. Und dafür gibt es in MDX Funktionen, die sich nutzen lassen, um diesen Trend zu berechnen. Die Grundlagen dieser MDX Funktionen und der mathematischen Konzepte dahinter hat Mosha bereits vor einigen Jahren in seinem <a href="http://www.mosha.com/msolap/articles/mdxlinreg.htm" target="_blank">Blog</a> veröffentlicht.</p>
<p>&nbsp;</p>
<p>Nun aber zurück zum eigentlichen Thema, das Erzeugen der oben gezeigten Grafik in den Reporting Services:</p>
<p>Mit dem Assistenten erstellen wir einen neuen Bericht auf den <em>Adventure Works</em> Cube aus der <a href="http://www.codeplex.com/MSFTDBProdSamples" target="_blank"><em>Adventure Works DW</em></a> Datenbank. Nach dem Umschalten des Designmodes kommt für das Dataset folgender Quellcode zum Vorschein:</p>
<p><font size="2"></font></p>
<p><font size="2"><font color="#0000ff" size="2">SELECT</font><font size="2"> </font></font></p>
<p><font size="2"><font color="#0000ff" size="2">NON</font><font size="2"> </font><font color="#0000ff" size="2">EMPTY</font><font size="2"> { [Measures].[Sales Amount] } </font><font color="#0000ff" size="2">ON</font><font size="2"> </font><font color="#0000ff" size="2">COLUMNS</font><font size="2">, </font></font></p>
<p><font size="2"><font color="#0000ff" size="2">NON</font><font size="2"> </font><font color="#0000ff" size="2">EMPTY</font><font size="2"> { </font><font size="2">([Date].[Calendar].[Calendar Quarter].ALLMEMBERS) } </font><font color="#0000ff" size="2">ON</font><font size="2"> </font><font color="#0000ff" size="2">ROWS</font><font size="2"> </font></font></p>
<p><font size="2"><font color="#0000ff" size="2">FROM</font><font size="2"> [Adventure Works] </font></font></p>
<p>&nbsp;</p>
<p>Um später die Lesbarkeit des Codes zu erhöhen, erstellen wir uns als erstes ein Set, dass alle Quartale enthält, die wir auch der Achse anzeigen wollen.</p>
<p><font color="#0000ff" size="2"></font></p>
<p><font color="#0000ff" size="2">WITH</font></p>
<p><font color="#0000ff" size="2">SET</font></p>
<p><font color="#0000ff" size="2"><font size="2">myMonate </font><font color="#0000ff" size="2">AS</font><font size="2"> </font><font size="2"><font size="2">([Date].[Calendar].[Calendar Quarter].ALLMEMBERS)</font></font></font></p>
<p>&nbsp;</p>
<p>Nun müssen wir für jede Zeile den Wert ermitteln, der für das jeweilige Quartal auf der Trendlinie liegt. Dazu nutzen wir die MDX-Funktion: LinRegPoint.</p>
<pre>&nbsp;</pre>
<pre>LinRegPoint(<em>Slice_Expression_x</em>, <em>Set_Expression</em>, <em>Numeric_Expression_y </em>[ ,<em>Numeric_Expression_x</em> ] )</pre>
<p><strong></strong>&nbsp;</p>
<p><strong>Slice_Expression_x</strong>: Hier wird ein numerischer Ausdruck erwartet, der als x-Wert genutzt werden soll. Da die Quartale nicht numerisch sind, können wir diese hier nicht direkt benutzen. Wir können jedoch die RANK-Funktion nutzen, um die Position des jeweiligen Quartales auf der X-Achse zu ermitteln. Diesen merken wir uns in einem eigenen Member:</p>
<p><font color="#0000ff" size="2">MEMBER</font></p>
<p><font color="#0000ff" size="2"><font size="2">Measures.myX </font><font color="#0000ff" size="2">AS</font><font size="2"> </font><font color="#800000" size="2">Rank</font><font size="2">([Date].[Calendar].</font><font color="#800000" size="2">CurrentMember</font><font size="2">, [Date].[Calendar].</font><font color="#800000" size="2">CURRENTMEMBER</font><font size="2">.</font><font color="#0000ff" size="2">LEVEL</font><font size="2">.</font><font color="#0000ff" size="2">MEMBERS</font><font size="2">)</font> </font></p>
<p><font color="#000000" size="2"><strong></strong></font>&nbsp;</p>
<p><font color="#000000" size="2"><strong>Set_Expression</strong>: An dieser Stelle wird definiert, über welches Set der Trend-Wert berechnet werden soll. Hier könnte z.B. die letzten 10 Perioden gewählt werden, oder ein Set, das von Berichtsparametern abhängig ist, genutzt werden. In unserem Fall wollen wir einfach alle Quartale zur Berechnung heranziehen und nutzen deshalb das eben erstellte Set <em>myMonate</em>.</font></p>
<p><font color="#000000" size="2"><strong></strong></font>&nbsp;</p>
<p><font color="#000000" size="2"><strong>Numeric_Expression_y</strong>: Der gewünschte y-Wert ist einleuchtend: <em>[Measures].[Sales Amount]</em>, dafür machen wir das ganze ja schließlich.</font></p>
<p><font color="#000000" size="2"><strong></strong></font>&nbsp;</p>
<p><font color="#000000" size="2"><strong>Numeric_Expression_x</strong>: Hier wird die Formel erwartet, die genutzt werden kann, um die x-Werte der anderen Punkte &#8220;vorauszusagen&#8221;. Wir können hier einfach den gleichen Ausdruck benutzen, wie bei Slice_Expression_x: myX</font></p>
<p><font color="#000000" size="2"></font>&nbsp;</p>
<p><font color="#000000" size="2">Wenn wir das alles einsetzen und dem Ganzen dann noch einen Namen geben, erhalten wir folgenden Ausdruck:</font></p>
<p><font color="#0000ff" size="2"></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2">MEMBER</font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font size="2">Measures.[Sales Trend] </font><font color="#0000ff" size="2">AS</font><font size="2"> </font><font color="#800000" size="2">LinRegPoint</font><font size="2">(Measures.myX, myMonate, [Measures].[Sales Amount], Measures.myX)</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2"> </font></font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2"></font><font color="#000000" size="2"></font></font></font>&nbsp;</p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#000000" size="2">Unsere Quelle für das Berichts-Dataset sieht nun also folgendermaßen aus:</font></font><font color="#0000ff" size="2"> </font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2">WITH</font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2">SET</font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font size="2">myMonate </font><font color="#0000ff" size="2">AS</font><font size="2"> ([Date].[Calendar].[Calendar Quarter].</font><font color="#800000" size="2">ALLMEMBERS</font><font size="2">)</font></font><font color="#0000ff" size="2"> </font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2">MEMBER</font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font size="2">Measures.myX </font><font color="#0000ff" size="2">AS</font><font size="2"> </font><font color="#800000" size="2">Rank</font><font size="2">([Date].[Calendar].</font><font color="#800000" size="2">CurrentMember</font><font size="2">, [Date].[Calendar].</font><font color="#800000" size="2">CURRENTMEMBER</font><font size="2">.</font><font color="#0000ff" size="2">LEVEL</font><font size="2">.</font><font color="#0000ff" size="2">MEMBERS</font><font size="2">)</font></font><font color="#0000ff" size="2"> </font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2">MEMBER</font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font size="2">Measures.[Sales Trend] </font><font color="#0000ff" size="2">AS</font><font size="2"> </font><font color="#800000" size="2">LinRegPoint</font><font size="2">(Measures.myX, myMonate, [Measures].[Sales Amount], Measures.myX)</font> </font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2">SELECT</font><font size="2"> </font></font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2">NON</font><font size="2"> </font><font color="#0000ff" size="2">EMPTY</font><font size="2"> { [Measures].[Sales Amount],Measures.[Sales Trend] } </font><font color="#0000ff" size="2">ON</font><font size="2"> </font><font color="#0000ff" size="2">COLUMNS</font><font size="2">, </font></font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2">NON</font><font size="2"> </font><font color="#0000ff" size="2">EMPTY</font><font size="2"> {myMonate} </font><font color="#0000ff" size="2">ON</font><font size="2"> </font><font color="#0000ff" size="2">ROWS</font><font size="2"> </font></font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2">FROM</font><font size="2"> [Adventure Works] </font></font></font></p>
<p><font color="#000000" size="2"><font size="2"></font></font>&nbsp;</p>
<p><font color="#000000" size="2"><font size="2">Und wenn wir das ganze als Grafik anzeigen, dann sieht das in etwa so aus:</font></font></p>
<p><font size="2"></font>&nbsp;</p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><a href="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/1cfd5452e220_B9BD/SSRS.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="228" alt="Trendlinie in den Reporting Services" src="http://blog.ixtoprod.s15244651.onlinehome-server.info/blogbilder/1cfd5452e220_B9BD/SSRS_thumb.jpg" width="412" border="0"></a> </font></font></p>
<p><font color="#000000" size="2"><font size="2"></font></font>&nbsp;</p>
<p><font color="#000000" size="2"><font size="2">Wenn das unseren Controller nicht glücklich macht <img src='http://www.ixto.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </font></font></p>
<p><font color="#000000" size="2"><font size="2"></font></font>&nbsp;</p>
<p><font color="#000000" size="2"><font size="2">An dieser Stelle sollte noch angemerkt werden, dass die LinRegPoint-Funktion mit Rekursion arbeitet und damit, vor allem bei vielen Zeit-Werten, eine potentielle Performancebremse ist. Wer also beim Darstellen des Trends mit diesem Verfahren an die Grenzen stößt, der sollte dann doch mal Dundas ausprobieren, oder auf die nächste Version des SQL Servers (2008) hoffen.</font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"></font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ixto.de/blog/sql-server-2005/reportingservices/trendlinie-in-reporting-services-2005-dank-mdx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

