<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4443486754940179968</id><updated>2012-01-22T12:31:58.629+01:00</updated><category term='Analysis Services'/><category term='Reporting Services'/><category term='MDX'/><category term='Excel'/><title type='text'>Gurvan Guyader - BI Blog</title><subtitle type='html'>Analysis Services &amp;amp; Reporting Services</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-306853415353500327</id><published>2012-01-15T22:29:00.001+01:00</published><updated>2012-01-15T22:29:18.874+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><title type='text'>Intégration de données spatiales dans une table SQL Server</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Depuis la version 2008, SQL Server permet de stocker directement des données spatiales dans une table.&lt;br /&gt;Une application directe est la création de rapport type carte dans reporting services.&lt;br /&gt;Reporting Services permet en effet de constuire un rapport carte de 2 façons:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;fichier ESRI&lt;/li&gt;&lt;li&gt;requête spatiale SQL Server&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pMlio4ySm6U/TxMsWXXX5kI/AAAAAAAAA4g/nM_z7_gsEug/s1600/ssrs.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-pMlio4ySm6U/TxMsWXXX5kI/AAAAAAAAA4g/nM_z7_gsEug/s320/ssrs.JPG" width="320" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;La première option est la plus simple. En général, depuis votre logiciel de création de carte (MapInfo par exemple), vous pouvez exporter la carte dans le format ESRI (shapefile) et essayer de l'utiliser dans SSRS.&lt;br /&gt;&lt;br /&gt;Cependant il est préférable de l'intégrer dans SQL serveur pour centraliser vos informations spatiales dans un endroit unique. De plus le fait de les charger en base apporte beaucoup de souplesse pour la création dynamique de carte.&lt;br /&gt;&lt;br /&gt;Le chargement dans SQL server peut se faire par un outil développé par Morten Nielsen vraiment très pratique : &lt;a href="http://www.sharpgis.net/page/Shape2SQL.aspx" target="_blank"&gt;Shape2SQL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Y5Wd72vLDII/TxM8GBTkY8I/AAAAAAAAA4o/7k52GD7oYeQ/s1600/shape2sql.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://3.bp.blogspot.com/-Y5Wd72vLDII/TxM8GBTkY8I/AAAAAAAAA4o/7k52GD7oYeQ/s320/shape2sql.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Une fois les données intégrées. Il est possible de valider le résultat directement via Management Studio :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XmWl8WvGpRw/TxM8cEgQiDI/AAAAAAAAA4w/P9SpwcNPYG8/s1600/mapsql.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-XmWl8WvGpRw/TxM8cEgQiDI/AAAAAAAAA4w/P9SpwcNPYG8/s640/mapsql.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;La carte ESRI ci-dessus est issue du site &lt;a href="http://www.diva-gis.org/gdata"&gt;http://www.diva-gis.org/gdata&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-306853415353500327?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/306853415353500327/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2012/01/integration-de-donnees-spatiales-dans.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/306853415353500327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/306853415353500327'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2012/01/integration-de-donnees-spatiales-dans.html' title='Intégration de données spatiales dans une table SQL Server'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-pMlio4ySm6U/TxMsWXXX5kI/AAAAAAAAA4g/nM_z7_gsEug/s72-c/ssrs.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-2555653905687750939</id><published>2012-01-08T21:45:00.000+01:00</published><updated>2012-01-08T21:45:39.139+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><title type='text'>Datasource MySQL avec SSRS</title><content type='html'>&lt;div style="text-align: justify;"&gt;L'interopérabilité SSRS et MySQL fonctionne parfaitement via le driver ODBC fournit par Oracle. Cela est bien pratique si vous souhaitez faire du reporting avancés (pour de l'impression par exemple) sur une application fonctionnant avec une base MySQL.&lt;/div&gt;&lt;br /&gt;Les étapes consistent à :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Télécharger le driver depuis le site d'Oracle (32 ou 64 en fonction de votre serveur SSRS)&lt;/li&gt;&lt;li&gt;Installer le driver sur votre serveur SSRS&lt;/li&gt;&lt;li&gt;Configurer le lien odbc via ODBC Datasource administrator sur le serveur SSRS&lt;/li&gt;&lt;li&gt;Créer le lien au niveau System et non Utilisateur pour qu'il soit vu par le service SSRS &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KRGlJlWNNgU/Twn98TcCXAI/AAAAAAAAA4I/p6YUYafucCU/s1600/mysql1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://1.bp.blogspot.com/-KRGlJlWNNgU/Twn98TcCXAI/AAAAAAAAA4I/p6YUYafucCU/s320/mysql1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;Indiquer le nom du serveur et le le login/password pour se connecter à la base MySQL&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-gXivc_c_Z1A/Twn98_JD3sI/AAAAAAAAA4U/dtTelIMaUsY/s1600/mysql2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="302" src="http://3.bp.blogspot.com/-gXivc_c_Z1A/Twn98_JD3sI/AAAAAAAAA4U/dtTelIMaUsY/s320/mysql2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Créer la datasource dans SSRS en mentionnant le nom du lien ODBC créé précédemment&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-_msljU32f8s/Twn97XU5oYI/AAAAAAAAA4E/TKJ5y0ty2-U/s1600/mysql3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://3.bp.blogspot.com/-_msljU32f8s/Twn97XU5oYI/AAAAAAAAA4E/TKJ5y0ty2-U/s320/mysql3.JPG" width="320" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;ul&gt;&lt;li&gt;Créer vos rapport !&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;N'oubliez pas d'installer le driver et de configurer le même lien ODBC sur votre machine de dev afin de pouvoir réliaser les rapports dans BIDS ou Report Builder.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-2555653905687750939?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/2555653905687750939/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2010/08/datasource-mysql-avec-ssrs.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/2555653905687750939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/2555653905687750939'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2010/08/datasource-mysql-avec-ssrs.html' title='Datasource MySQL avec SSRS'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-KRGlJlWNNgU/Twn98TcCXAI/AAAAAAAAA4I/p6YUYafucCU/s72-c/mysql1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-3987992309655566565</id><published>2009-09-27T18:17:00.001+02:00</published><updated>2009-09-27T18:21:41.906+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MDX'/><title type='text'>Quartile Excel en MDX</title><content type='html'>&lt;p&gt;La fonction Excel &lt;a href="http://fr.wikipedia.org/wiki/Quartile" target="_blank"&gt;quartile&lt;/a&gt; est une fonction statistique couramment utilisée en analyse des ventes pour segmenter une population en fonction d’un indicateur.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;le 1er quartile sépare les 25 % inférieurs des données &lt;/li&gt;&lt;li&gt;le 2e quartile sépare les 50 % inférieurs des données (médiane) &lt;/li&gt;&lt;li&gt;le 3e quartile sépare les 75 % inférieurs des données &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;La fonction quartile n’est pas disponible en tant que fonction native MDX, cependant elle existe dans l’assembly &lt;strong&gt;ExcelMDX&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Attention, cette assembly a quelques contraintes d’utilisation : &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Excel 2003 ou supérieur installé sur le serveur Analysis Services. &lt;/li&gt;&lt;li&gt;Droits suffisant pour le compte Analysis Services sur l’application DCOM « Application Microsoft Excel » (a minima Execution locale et Activation locale). &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Une fois ces pré requis remplis à vous les joies des fonctions Excel dans vos requêtes MDX.&lt;/p&gt;&lt;p&gt;Ainsi pour récupérer les quartiles d’un set, quelques lignes de MDX et le tour est joué :&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="545"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="543"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Member [Measures].[Indicator] as cdbl([Measures].[Internet Sales Amount]) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;set [Base] as&lt;br /&gt;NONEMPTY([Product].[Product Categories].[Subcategory].members,[Measures].[Indicator]) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Member [Measures].[Q3] as ExcelMDX!quartile(settoarray([Base],[Measures].[Indicator]),3)&lt;br /&gt;Member [Measures].[Q2] as ExcelMDX!quartile(settoarray([Base],[Measures].[Indicator]),2)&lt;br /&gt;Member [Measures].[Q1] as ExcelMDX!quartile(settoarray([Base],[Measures].[Indicator]),1) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;select {[Measures].[Q1],[Measures].[Q2],[Measures].[Q3]} on 0 from [Adventure Works]&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;NB1 : la fonction VB cdbl permet de typer explicitement la mesure car certains types natifs Analysis Services ne sont pas supportés par le fonction quartile.&lt;/p&gt;&lt;p&gt;NB2 : La fonction quartile ne prend pas en paramètre directement un SET mais une liste d’ou l’utilisation de la fonction SetToArray.&lt;/p&gt;&lt;p&gt;NB3 : bien penser à exclure les valeurs nulles du SET avec la fonction Nonempty.&lt;/p&gt;&lt;p&gt;Enfin si besoin, un FILTER sur le SET de base permet de récupérer le détail des membres d’un quartile :&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="535"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="533"&gt;&lt;p align="center"&gt;&lt;span style="font-size:78%;"&gt;filter([Base],[Measures].[Indicator]&amp;lt;[Measures].[Q1])&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-3987992309655566565?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/3987992309655566565/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/09/quartile-excel-en-mdx.html#comment-form' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/3987992309655566565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/3987992309655566565'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/09/quartile-excel-en-mdx.html' title='Quartile Excel en MDX'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-7769481592888194844</id><published>2009-08-04T16:58:00.000+02:00</published><updated>2010-08-12T15:09:52.884+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>Quoi de neuf dans les pivot tables Office 2010 ?</title><content type='html'>&lt;p align="justify"&gt;Depuis la sortie de la CTP (Community Technical Preview) d’Office 2010 et bien que &lt;a href="http://cwebbbi.spaces.live.com/blog/cns!7B84B0F2C239489A!4645.entry" target="_blank"&gt;Chris Webb&lt;/a&gt; nous ait déjà donné un aperçu de ce à quoi il fallait s’attendre, je n’ai pu m’empêcher de regarder un peu plus en détail les nouveautés des pivot tables pour Analysis Services :). Globalement, leur comportement est très proche de celles de la version 2007 avec tout de même quelques nouveautés fort sympathiques :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;La nouveauté majeure se situe au niveau du Slicer présenté initialement pendant la démonstration du &lt;a href="http://gurvang.blogspot.com/2009/05/kilimandjaro-devient-sql-server-2008-r2.html" target="_blank"&gt;projet Gemini&lt;/a&gt; de la BI Conference 2008. En gros Il s’agit d’un nouveau composant graphique affichant les membres d’une hiérarchie Analysis Services sous forme d’une liste de boutons : &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/SnilK_2NRII/AAAAAAAAAPw/66kUAAE74Y4/s1600-h/image18.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SnilLnsXvyI/AAAAAAAAAP0/tKK6uS6oSVA/image_thumb8.png?imgmax=800" width="206" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="justify"&gt;Les slicers prennent tous leurs intérêts lorsqu’ils sont connectés à une pivot table. En effet dans ce cas ils se comportent exactement comme une hiérarchie placée dans le “Report Filter” de la pivot table. Sauf que l’avantage ici est que les membres du filtre sont directement visibles. L’analyse est donc plus claire et intuitive.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SnilMvLTAcI/AAAAAAAAAP4/SZlQ9SxmF9E/s1600-h/image%5B5%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__t7RQcg6-2U/SnilNBSwpeI/AAAAAAAAAP8/FPL8TTruOuQ/image_thumb%5B2%5D.png?imgmax=800" width="547" height="385" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p align="justify"&gt;Voici une liste de points notés pendant leur utilisation :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Seul les membres d’un seul niveau d’une hiérarchie sont affichés (pas possible d’afficher tous les membres d’une hiérarchie utilisateur multi niveaux).&lt;/li&gt;&lt;li&gt;La multi sélection de membres est supportée.&lt;/li&gt;&lt;li&gt;Un slicer peut être connecté à plusieurs Pivot Tables (idéal pour la construction de Dashboard).&lt;/li&gt;&lt;li&gt;Si plusieurs Slicers sont liés à une même pivot table. Ces derniers deviennent interdépendants. Par exemple lorsqu’on sélectionne un membre dans le slicer des catégories de produit alors le slicer des sous catégories met en évidence seulement les membres ayant des valeurs dans le cube.&lt;/li&gt;&lt;li&gt;Leur design est très personnalisable (couleur, taille des boutons, nombre de colonnes, position,…).&lt;/li&gt;&lt;li&gt;Les slicers seront très probablement exportables dans SharePoint via les Excel Services.&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Le wirteback (écriture dans les cubes) est enfin supporté nativement dans les pivot tables. Cette fonction appelée aussi “what-if Analysis” est souvent implémentée dans les applications BI de type budgétisation / planification / prévision. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt; &lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="514"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/SnilOBxolmI/AAAAAAAAAQA/_fwfVCnFxEo/s1600-h/image7.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__t7RQcg6-2U/SnilPf4HDMI/AAAAAAAAAQE/xGjnQ-68A7U/image_thumb3.png?imgmax=800" width="186" height="188" /&gt;&lt;/a&gt;  &lt;/td&gt;&lt;td valign="top" width="312"&gt;&lt;a href="http://lh4.ggpht.com/__t7RQcg6-2U/SnilP9oAhSI/AAAAAAAAAQI/-d4ffyPdgTQ/s1600-h/image30.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__t7RQcg6-2U/SnilQr-tlwI/AAAAAAAAAQM/W_Pf8EOm0NA/image_thumb14.png?imgmax=800" width="285" height="133" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;p align="center"&gt;bouton dans le menu&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="312"&gt;&lt;p align="center"&gt;option au niveau des cellules de saisies&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;&lt;p align="justify"&gt;Un designer de Set calculé est désormais disponible. Les utilisateurs peuvent donc créer eux-mêmes des sets qu’il pourront sélectionner ensuite dans la zone “Pivot Table Field List” pour construire leurs tableaux (avec possibilité d’éditer le MDX si besoin).&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/SnilRbzDcZI/AAAAAAAAAQQ/BYXbcTII-ew/s1600-h/image29.png"&gt;&lt;/a&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__t7RQcg6-2U/SnilR_u9Y7I/AAAAAAAAAQU/68G08MHk8Sw/image_thumb13.png?imgmax=800" width="303" height="222" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p align="justify"&gt;Enfin, dans les menus de sélection des membres des hiérarchies, une zone de filtre interactif des membres fait son apparition  : &lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/SnilSFNUytI/AAAAAAAAAQY/XzaHgh7Pgyc/s1600-h/image15.png"&gt;&lt;/a&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SnilSgyjM-I/AAAAAAAAAQc/a1E8EM9Ycmc/image_thumb7.png?imgmax=800" width="207" height="328" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p align="justify"&gt;Pour conclure, cette version 2010 des Pivot Tables nous réserve sûrement encore quelques surprises car certains items du menu étaient visibles mais non sélectionnables :(. Je pense entre autres aux “calculated field” et “calculated Item”.&lt;/p&gt;&lt;p&gt;Bonne CTP.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-7769481592888194844?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/7769481592888194844/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/08/quoi-de-neuf-dans-les-pivot-tables.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/7769481592888194844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/7769481592888194844'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/08/quoi-de-neuf-dans-les-pivot-tables.html' title='Quoi de neuf dans les pivot tables Office 2010 ?'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/__t7RQcg6-2U/SnilLnsXvyI/AAAAAAAAAP0/tKK6uS6oSVA/s72-c/image_thumb8.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-1172662277187060368</id><published>2009-07-14T19:56:00.001+02:00</published><updated>2009-07-14T19:59:14.471+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>[SSAS] : Quelques précisions sur les DMV</title><content type='html'>&lt;p&gt;Les DMV pour “Data Management Views” permettent d’accéder facilement aux informations retournées par la méthode XMLA Discover.&lt;/p&gt;&lt;p&gt;Il existe plusieurs types de DMV, en voici quelques exemples :&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="446"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="127"&gt;Type&lt;/td&gt;&lt;td valign="top" width="317"&gt;DMV&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="127"&gt;Activité et état du serveur&lt;/td&gt;&lt;td valign="top" width="317"&gt;&lt;p&gt;$system.discover_connections&lt;br /&gt;$system.discover_sessions&lt;br /&gt;$system.discover_jobs&lt;br /&gt;$system.discover_object_activity&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="127"&gt;Méta données du serveur&lt;/td&gt;&lt;td valign="top" width="317"&gt;&lt;p&gt;$system.dbschema_catalogs&lt;br /&gt;$system.dbschema_tables&lt;br /&gt;$system.dbschema_columns&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="127"&gt;Objets Analysis Services&lt;/td&gt;&lt;td valign="top" width="317"&gt;&lt;p&gt;$system.mdschema_cubes&lt;br /&gt;$system.mdschema_dimensions&lt;br /&gt;$system.mdschema_measuregroups&lt;br /&gt;$system.mdschema_measuregroup_dimensions&lt;br /&gt;$system.mdschema_kpis&lt;br /&gt;$system.mdschema_hierarchies&lt;br /&gt;$system.mdschema_sets&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="127"&gt;Objets Data Mining&lt;/td&gt;&lt;td valign="top" width="317"&gt;&lt;p&gt;$System.dmschema_mining_functions&lt;br /&gt;$System.dmschema_mining_models&lt;br /&gt;$System.dmschema_mining_structures&lt;br /&gt;$System.dmschema_mining_structure_columns&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Le langage utilisé n’est pas du MDX mais du SQL très basique : SELECT (…) FROM (…) WHERE (…) avec si besoin quelques fonctions du type LIKE. Les jointures entre DMV ne sont pas supportées nativement (on peut cependant contourner cette limitation en passant par un serveur liée dans SQL Server et des OPENQUERY).&lt;/p&gt;&lt;p&gt;Voici une illustration de requête que l’on peut exécuter directement dans l’éditeur MDX de Management Studio :&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;SELECT table_schema, table_name&lt;br /&gt;FROM $system.dbschema_tables&lt;br /&gt;WHERE table_schema = '$system'&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;a href="http://lh3.ggpht.com/__t7RQcg6-2U/SlzG3MDafOI/AAAAAAAAAJM/7l8oNc5d2eo/s1600-h/image%5B2%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__t7RQcg6-2U/SlzG3oG8EDI/AAAAAAAAAJQ/GhB53J4Mavk/image_thumb.png?imgmax=800" width="244" height="124" /&gt;&lt;span style="color:#669933;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;Ce qui nous donne ici la liste des DMV disponibles :) très pratique !&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Les DMV sont supportées nativement par le moteur SSAS depuis la version 2008. En 2005 elles sont accessibles à condition d’installer la procédure stockées ASSP qui se trouve sur &lt;a href="http://asstoredprocedures.codeplex.com/Wiki/View.aspx?title=DMV&amp;amp;referringTitle=Home" target="_blank"&gt;Codeplex&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;&lt;span style="color:#0080ff;"&gt;Quelques cas d’utilisations des DMV :&lt;/span&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Réaliser la supervision de l’activité de serveur Analysis Services (“qui est connecté ?”, “avec quelle application ?”, “depuis combien de temps ?”,…). Un projet développé par Carl Rabeler de la SQL Cat Team est d’ailleurs mis à disposition &lt;a href="http://sqlcat.com/toolbox/archive/2009/02/27/ssas-monitoring-scripts-for-management-data-warehouse.aspx" target="_blank"&gt;ici&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;Récupérer les méta données d’un serveur SSAS pour faire de la documentation (cf. &lt;a href="http://www.ssas-info.com/VidasMatelisBlog/144_using-ssrs-to-report-ssas-2008-database-structure-using-dmvs" target="_blank"&gt;post&lt;/a&gt; de Vidas Matelis) &lt;/li&gt;&lt;li&gt;Récupérer les dates de dernier traitement des cubes et dimensions &lt;/li&gt;&lt;/ul&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;SELECT LAST_DATA_UPDATE&lt;br /&gt;FROM $SYSTEM.MDSCHEMA_CUBES&lt;br /&gt;WHERE CUBE_NAME = 'Adventure Works'&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SlzG4MjlGtI/AAAAAAAAAJU/xO6mU_e3c0Q/image_thumb%5B11%5D.png?imgmax=800" width="163" height="45" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;Récupérer les UniqueNames des hiérarchies pour faire du MDX dynamique dans Reporting Services &lt;/li&gt;&lt;/ul&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="445"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="443"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;SELECT [LEVEL_UNIQUE_NAME]&lt;br /&gt;FROM $SYSTEM.MDSCHEMA_LEVELS&lt;br /&gt;WHERE CUBE_NAME = 'Adventure Works'&lt;br /&gt;AND [HIERARCHY_UNIQUE_NAME] = '[Customer].[Customer Geography]'&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="443"&gt;&lt;a href="http://lh3.ggpht.com/__t7RQcg6-2U/SlzG4Tq1tdI/AAAAAAAAAJY/6pBYQtqbNDI/s1600-h/image%5B24%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SlzG4pHHHzI/AAAAAAAAAJc/ghReeYj6oTU/image_thumb%5B10%5D.png?imgmax=800" width="244" height="122" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;Récupérer les valeurs courantes des compteurs de performance sans passer par PerfMon &lt;/li&gt;&lt;/ul&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="447"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="445"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;SELECT *&lt;br /&gt;FROM SYSTEMRESTRICTSCHEMA(&lt;br /&gt;$SYSTEM.DISCOVER_PERFORMANCE_COUNTERS ,&lt;br /&gt;PERF_COUNTER_NAME = '\MSOLAP$SQL2008:Connection\Total Requests')&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="445"&gt;&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/SlzG49-ZnAI/AAAAAAAAAJg/q2iwfZEPjug/s1600-h/image%5B48%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SlzG5eMoTlI/AAAAAAAAAJk/qOEKpEQnRBo/image_thumb%5B24%5D.png?imgmax=800" width="304" height="30" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-1172662277187060368?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/1172662277187060368/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/07/ssas-quelques-precisions-sur-les-dmv.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/1172662277187060368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/1172662277187060368'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/07/ssas-quelques-precisions-sur-les-dmv.html' title='[SSAS] : Quelques précisions sur les DMV'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/__t7RQcg6-2U/SlzG3oG8EDI/AAAAAAAAAJQ/GhB53J4Mavk/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-6285563284590703339</id><published>2009-07-06T00:13:00.001+02:00</published><updated>2009-07-06T00:13:50.536+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><title type='text'>[SSRS] : Bug du Render HTML avec les Placeholders</title><content type='html'>&lt;p&gt;Je poste ce billet car j’ai été confronté à ce problème certes très spécifique mais pour lequel il est difficile de trouver des informations.&lt;/p&gt;  &lt;p&gt;L’anomalie se produit avec ssrs 2008 SP0 et SP1 et est liée à la nouvelle implémentation du composant textbox supportant le “Rich Format Text”. La textbox est désormais un conteneur de placeholders (et plus précisément de textruns) avec chacun des propriétés spécifiques. Cette nouveauté est très pratique par exemple lors du développement des rapports pour concaténer du texte statique avec des paramètres dynamiques.&lt;/p&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;Etapes pour reproduire l’anomalie :&lt;/font&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;création d’une textbox dans le body d’un rapport&amp;#160; avec un texte statique et le paramètre global “Execution” : &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SlElkGZMoTI/AAAAAAAAAIs/w_BzJ9xdwew/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SlElk2C95gI/AAAAAAAAAIw/xCNfXNu7DsA/image_thumb%5B6%5D.png?imgmax=800" width="244" height="28" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ce qui nous donne le résultat suivant avec le render HTML du Report Server :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/__t7RQcg6-2U/SlEllMi1LlI/AAAAAAAAAI0/o4v6VDppF0c/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SlEllshKWGI/AAAAAAAAAI4/o0-5DjcKvGo/image_thumb%5B5%5D.png?imgmax=800" width="244" height="32" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Jusque là tout va bien, maintenant nous allons modifier le format de la date en changeant la propriété “language” de la textbox (en “en-US” au lieu du langage par défaut) : &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/SlElmDDXdcI/AAAAAAAAAI8/G4qhnaTzNfs/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__t7RQcg6-2U/SlElmpSr-fI/AAAAAAAAAJA/ktSiarHFrD4/image_thumb%5B7%5D.png?imgmax=800" width="244" height="130" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Résultat une fois déployé dans le Report Server :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SlElmxFlCcI/AAAAAAAAAJE/UydBLOmFJjg/s1600-h/image%5B18%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__t7RQcg6-2U/SlElnY2Qq2I/AAAAAAAAAJI/OsAfm_30h1w/image_thumb%5B8%5D.png?imgmax=800" width="244" height="35" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Pas terrible n’est ce pas. En regardant de plus près dans le HTML on constate que la classe de style appliquée au texte statique contient un erreur de syntaxe : un guillemet est manquant dans la&amp;#160; propriété LANG ! D’ou le problème d’affichage dans IE.&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="400"&gt;.a7{font-family:Arial;font-size:10pt;font-weight:700;font-style:normal;text-decoration:none;color:Red;&lt;font color="#ff0000"&gt; LANG=&amp;quot;en-US&lt;/font&gt;;}.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;&lt;font color="#8080ff"&gt;&lt;/font&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;Remarques complémentaires :&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;Dans le Report Designer ou le Report Builder 2 l’anomalie n’est pas visible directement car l’outil de prévisualisation n’utilise pas tout à fait la même render extension HTML que celle du Report Server. Dans tout les cas l’anomalie est visible avec un export MHTML.&lt;/p&gt;  &lt;p&gt;L’anomalie est seulement constatée avec la propriété “Language” appliquée sur du contenu de type texte dans une textbox contenant plusieurs placeholders et seulement pour le render HTML.&lt;/p&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;Moyens de contournement :&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;Dans l’exemple ci-dessus il existe des moyens de contournement pour appliquer correctement le format de la date.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;En appliquant la propriété uniquement sur le placeholder du paramètre “Execution”. &lt;/li&gt;    &lt;li&gt;Ou si le format est global au rapport, en l’appliquant directement au niveau du composant Report. &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-6285563284590703339?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/6285563284590703339/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/07/ssrs-bug-du-render-html-avec-les.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/6285563284590703339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/6285563284590703339'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/07/ssrs-bug-du-render-html-avec-les.html' title='[SSRS] : Bug du Render HTML avec les Placeholders'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/__t7RQcg6-2U/SlElk2C95gI/AAAAAAAAAIw/xCNfXNu7DsA/s72-c/image_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-8847919950797792117</id><published>2009-06-14T23:37:00.001+02:00</published><updated>2009-06-15T13:20:33.557+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>Gestion des hiérarchies SSAS dans SSRS</title><content type='html'>&lt;p&gt;En reprenant le &lt;a href="http://blogs.msdn.com/robertbruckner/archive/2008/10/14/using-analysis-services-parent-child-hierarchies-in-reports.aspx" target="_blank"&gt;billet&lt;/a&gt; de Robert Bruckner sur la gestion des hiérarchies parent-enfant dans SSRS, on peut facilement étendre la technique à tous les types de hiérarchies SSAS.&lt;/p&gt;&lt;p&gt;Voici un aperçu du rapport (téléchargeable &lt;a href="http://cid-32b465dbb0ace4c8.skydrive.live.com/self.aspx/Public/Blogger/DrillDownReport.rdl" target="_blank"&gt;ici&lt;/a&gt;) se basant sur la base d’exemple AdventureWork :&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SjVtqS_L2kI/AAAAAAAAAIk/FTlH0-HpwBg/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="256" alt="image" src="http://lh4.ggpht.com/__t7RQcg6-2U/SjVtq01viHI/AAAAAAAAAIo/cSkRg9j0MJA/image_thumb%5B1%5D.png?imgmax=800" width="380" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Tout d’abord définissons une requête MDX permettant d’afficher la hiérarchie utilisateur [Product Model Lines] en ligne et la mesure [Measures].[Internet Sales Amount] en colonne :&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="446" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="444"&gt;&lt;p&gt;WITH &lt;/p&gt;&lt;p&gt;MEMBER [Measures].[UniqueName] as&lt;br /&gt;axis(1).item(0).item(0).hierarchy.currentmember.uniquename &lt;/p&gt;&lt;p&gt;MEMBER [Measures].[ParentUniqueName] as&lt;br /&gt;axis(1).item(0).item(0).hierarchy.currentmember.parent.uniquename &lt;/p&gt;&lt;p&gt;MEMBER [Measures].[Name] as&lt;br /&gt;axis(1).item(0).item(0).hierarchy.currentmember.name &lt;/p&gt;&lt;p&gt;SELECT &lt;/p&gt;&lt;p&gt;{[Measures].[UniqueName],[Measures].[ParentUniqueName], [Measures].[Name],&lt;br /&gt;[Measures].[Internet Sales Amount] } ON COLUMNS,&lt;br /&gt;{ ([Product].[Product Model Lines].ALLMEMBERS ) }   ON ROWS &lt;/p&gt;&lt;p&gt;FROM [Adventure Works]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Les points importants à noter sont :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;La récupération de tous les membres de la hiérarchie en ligne &lt;span style="color:#ff0000;"&gt;[Product].[Product Model Lines].ALLMEMBERS&lt;/span&gt; &lt;/li&gt;&lt;li&gt;La création de &lt;strong&gt;membres calculés&lt;/strong&gt; afin de récupérer dans des champs du dataset : &lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;le &lt;span style="color:#ff0000;"&gt;uniquemename&lt;/span&gt; du membre courant se trouvant en ligne &lt;/li&gt;&lt;li&gt;le &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt; du membre courant se trouvant en ligne &lt;/li&gt;&lt;li&gt;le &lt;span style="color:#ff0000;"&gt;uniquename du parent&lt;/span&gt; du membre courant se trouvant en ligne &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Petite subtilité au niveau de la définition des membres calculés, des fonctions MDX permettent de récupérer de manière dynamique le hiérarchie en ligne :&lt;/p&gt;&lt;p&gt;axis(1).item(0).item(0).hierarchy=[Product].[Product Model Lines]&lt;/p&gt;&lt;p&gt;Ainsi si l’on souhaite réaliser un autre rapport avec une hiérarchie différente, il n’y pas besoin de modifier les membres calculés.&lt;/p&gt;&lt;p&gt;Ensuite, définissons les propriétés du groupe dans un tablix de type table pour créer notre rapport de DrillDown. Pour cela, créons un groupe en ligne avec les propriétés suivantes :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;group on :&lt;/strong&gt; =Fields!UniqueName.Value &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Recursive Parent :&lt;/strong&gt; =Fields!ParentUniqueName.Value &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Toggle item :&lt;/strong&gt; utiliser la cellule contenant le libellé &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Hidden &lt;/strong&gt;: =iif(level()=0,false,true) afin de n’afficher au départ que les membres du niveau 0. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Enfin, il ne reste plus qu’a mettre de la mise en forme en fonction du niveau, par exemple :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Backgroundcolor&lt;/strong&gt; :=Choose(level() + 1,"#c3d9ff","GainsBoro") &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Padding Left&lt;/strong&gt; : =20 * Level() &amp;amp; "pt" &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Et notre magnifique rapport est fini !&lt;/p&gt;&lt;p&gt;NB : gros avantage avec ce design de rapport, c’est que les agrégations sont issues directement du cube. Pas besoin de fonction d’agrégations au niveau SSRS.&lt;/p&gt;&lt;p&gt;Bon Report !&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-8847919950797792117?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/8847919950797792117/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/06/gestion-des-hierarchies-ssas-dans-ssrs.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/8847919950797792117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/8847919950797792117'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/06/gestion-des-hierarchies-ssas-dans-ssrs.html' title='Gestion des hiérarchies SSAS dans SSRS'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/__t7RQcg6-2U/SjVtq01viHI/AAAAAAAAAIo/cSkRg9j0MJA/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-1224954594810564086</id><published>2009-05-31T21:49:00.001+02:00</published><updated>2009-06-17T20:57:57.770+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>Drillthrough SSAS dans SSRS</title><content type='html'>&lt;p&gt;Reporting Services n’est pas compatible avec les actions SSAS de DRILLTHROUGH définis au niveau d’un cube. Il est cependant possible de reproduire en partie cette fonctionnalité dans un rapport via les actions SSRS de type “Go to report”.&lt;/p&gt;&lt;p&gt;Voici un tutorial basique permettant de l’illustrer :&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Première étape : création du rapport de détail&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Tout d’abord, pour effectuer une requête de type DRILLTHROUGH avec SSRS, il faut utiliser le provider OLEDB for AS (le provider MS Analysis Services ne supporte pas ce type d’instruction). &lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color:#999999;"&gt;Update : Comme le souligne François dans &lt;a href="http://fjehl.blogspot.com/2009/06/drillthrough-ssas-dans-ssrs-ajout-au.html"&gt;son article&lt;/a&gt;, il existe une astuce pour effectuer des requêtes de drillthrough avec le provider MS AS en passant en mode DMX dans le query designer.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Création de la source de données : &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/__t7RQcg6-2U/SiLfOCpgeZI/AAAAAAAAAH0/zeqnfDIu7Lk/s1600-h/image%5B14%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__t7RQcg6-2U/SiLfOkNwb8I/AAAAAAAAAH4/3pUU9xTEu-4/image_thumb%5B6%5D.png?imgmax=800" width="283" height="354" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Création d’un rapport tabulaire avec l’instruction de DRILLTHROUGH; par exemple, un rapport affichant la liste des commandes Internet. &lt;/li&gt;&lt;/ul&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;p&gt;Drillthrough maxrows 200&lt;br /&gt;select [Measures].[Internet Sales Amount] on 0&lt;br /&gt;from [Adventure Works]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Aperçu du rapport :&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/SiLfPINSz6I/AAAAAAAAAH8/3Sf1fnltJ8E/s1600-h/image%5B9%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__t7RQcg6-2U/SiLfPa2yZCI/AAAAAAAAAIA/WF-g1sDUKM0/image_thumb%5B3%5D.png?imgmax=800" width="367" height="132" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Seconde étape : création du rapport d’analyse&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Le rapport permet ici d’analyser les ventes Internet des produits par sous-catégories. &lt;/p&gt;&lt;p&gt;Requête MDX utilisée :&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;p&gt;With member [Measures].SubCatUniqueName as [Product].[Product Categories].currentmember.uniquename&lt;br /&gt;SELECT&lt;br /&gt;{[Measures].[Internet Gross Profit Margin], [Measures].[Internet Order Count],&lt;br /&gt;[Measures].[Internet Sales Amount],[Measures].SubCatUniqueName } ON COLUMNS,&lt;br /&gt;{([Product].[Product Categories].[Subcategory].ALLMEMBERS ) }&lt;br /&gt;ON ROWS FROM [Adventure Works] &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Un membre calculé est ajouté dans le but de récupérer dans un champ du dataset le UniqueName des membres de la hiérarchie [Product Categories]. Ce champ sera utilisé ultérieurement pour transmettre la sous-catégorie sélectionnée au rapport de détail.&lt;/p&gt;&lt;p&gt;Exemple de rapport d’analyse construit à partir du dataset résultant :&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SiLfPrF5rKI/AAAAAAAAAIE/2qMRt7x_kS0/s1600-h/image%5B13%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__t7RQcg6-2U/SiLfQCmeSyI/AAAAAAAAAII/sWrcY4KbDlg/image_thumb%5B5%5D.png?imgmax=800" width="351" height="164" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Troisième étape : création du lien entre les 2 rapports&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;L’objectif est d’obtenir à partir du rapport d’analyse des ventes le détail des commandes en cliquant sur une cellule.&lt;/p&gt;&lt;p&gt;Il faut donc ajouter un paramètre “Sous catégorie” au niveau du rapport de détail. Ce dernier permettra de stocker le UniqueName de la sous-catégorie sélectionnée dans le rapport d’analyse.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Création du paramètre SubCategorie : &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SiLfQZpqDcI/AAAAAAAAAIM/-GgSgR-eCCk/s1600-h/image%5B18%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__t7RQcg6-2U/SiLfQ7rDuVI/AAAAAAAAAIQ/AojRmtZkX3I/image_thumb%5B8%5D.png?imgmax=800" width="392" height="326" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Ensuite ce paramètre est ajouté dans la requête de DRILLTRHOUGH en clause WHERE afin de filtrer sur la sous-catégorie sélectionnée. Le problème est que le provider OLEDB for AS ne supporte pas les paramètres. Il faut donc évaluer la requête en tant que chaine de caractères.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Remplacement de la requête de l’étape 1 par l’expression suivante au niveau de la Query du dataset : &lt;/li&gt;&lt;/ul&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="400"&gt;&lt;p&gt;="Drillthrough maxrows 200&lt;br /&gt;select [Measures].[Internet Sales Amount] on 0&lt;br /&gt;from [Adventure Works]&lt;br /&gt;where " + parameters!SubCategorie.value + " "&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Enfin il reste à définir l’action SSRS de type “Go to report” dans le rapport d’analyse au niveau de la cellule contenant le libellé des sous-catégories :&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SiLfRBuDqtI/AAAAAAAAAIU/5SA-cMbjfRU/s1600-h/image%5B22%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__t7RQcg6-2U/SiLfRlZm-oI/AAAAAAAAAIY/AFdnaZocmWc/image_thumb%5B10%5D.png?imgmax=800" width="364" height="303" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Il suffit alors de sélectionner le rapport de détail et d’effectuer le mapping paramètre [@Subcategorie] avec le valeur courante du champ [SubCatUniqueName] du rapport d’analyse.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Modification du design des cellules afin de mettre en évidence le lien. Et voici le résultat : &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/__t7RQcg6-2U/SiLfR2OwksI/AAAAAAAAAIc/yt_eW4N2Jf4/s1600-h/image%5B26%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__t7RQcg6-2U/SiLfSYVTSYI/AAAAAAAAAIg/K3z2eyM01SE/image_thumb%5B12%5D.png?imgmax=800" width="379" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Si besoin les sources de l’exemple sont téléchargeables &lt;a href="http://cid-32b465dbb0ace4c8.skydrive.live.com/self.aspx/Public/Blogger/SSAS%7C_Drillthrough%7C_Sample.zip" target="_blank"&gt;ici&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-1224954594810564086?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/1224954594810564086/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/05/drillthrough-ssas-dans-ssrs.html#comment-form' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/1224954594810564086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/1224954594810564086'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/05/drillthrough-ssas-dans-ssrs.html' title='Drillthrough SSAS dans SSRS'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/__t7RQcg6-2U/SiLfOkNwb8I/AAAAAAAAAH4/3pUU9xTEu-4/s72-c/image_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-563874675328056026</id><published>2009-05-24T23:01:00.001+02:00</published><updated>2009-05-24T23:01:24.560+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MDX'/><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>Dynamic Set vs Static Set</title><content type='html'>&lt;p&gt;Analysis Services dans sa version 2008 introduit la notion de set dynamic et static.&lt;/p&gt;  &lt;p&gt;Le &lt;strong&gt;static set&lt;/strong&gt; correspond au set classique des versions antérieures d’analysis services, c’est à dire que le set est évalué une seule fois en dehors du contexte de la requête MDX dans laquelle il est utilisée.&lt;/p&gt;  &lt;p&gt;Le &lt;strong&gt;dynamic set&lt;/strong&gt; fait partie des nouveautés apportées à Analysis Services 2008. Il est évalué dans le contexte de la requête. Le set est donc exécuté à chaque fois que l’on fait appel à lui dans une requête.&lt;/p&gt;  &lt;p&gt;La syntaxe pour écrire un set est la suivante :&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="400"&gt;CREATE [SESSION] [ STATIC | DYNAMIC ] [HIDDEN] SET          &lt;br /&gt;CURRENTCUBE | Cube_Name .Set_Name AS           &lt;br /&gt;'Set_Expression' [,Property_Name = Property_Value, ...n]&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Prenons un exemple, soit les requêtes suivantes exécutées dans Management Studio :&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="400"&gt;         &lt;p&gt;/*création du set static*/            &lt;br /&gt;create session static set [Adventure Works].[Top 5 Resellers Static] as             &lt;br /&gt;topcount([Reseller].[Reseller].[Reseller].members,5,[Measures].[Reseller Sales Amount])             &lt;br /&gt;GO             &lt;br /&gt;/*création du set dynamic*/             &lt;br /&gt;create session DYNAMIC set [Adventure Works].[Top 5 Resellers Dynamic] as             &lt;br /&gt;topcount([Reseller].[Reseller].[Reseller].members,5,[Measures].[Reseller Sales Amount])             &lt;br /&gt;GO             &lt;br /&gt;/* requête sans set*/             &lt;br /&gt;SELECT             &lt;br /&gt;[Measures].[Reseller Sales Amount] ON COLUMNS,             &lt;br /&gt;topcount([Reseller].[Reseller].[Reseller].members,5,[Measures].[Reseller Sales Amount]) ON ROWS             &lt;br /&gt;FROM [Adventure Works]             &lt;br /&gt;WHERE [Date].[Calendar].[Calendar Year].&amp;amp;[2002]             &lt;br /&gt;GO             &lt;br /&gt;/* requête avec set static*/             &lt;br /&gt;SELECT             &lt;br /&gt;[Measures].[Reseller Sales Amount] ON COLUMNS,             &lt;br /&gt;[Top 5 Resellers Static] ON ROWS             &lt;br /&gt;FROM [Adventure Works]             &lt;br /&gt;WHERE [Date].[Calendar].[Calendar Year].&amp;amp;[2002]             &lt;br /&gt;GO             &lt;br /&gt;/* requête avec set dynamic*/             &lt;br /&gt;SELECT             &lt;br /&gt;[Measures].[Reseller Sales Amount] ON COLUMNS,             &lt;br /&gt;[Top 5 Resellers Dynamic] ON ROWS             &lt;br /&gt;FROM [Adventure Works]             &lt;br /&gt;WHERE [Date].[Calendar].[Calendar Year].&amp;amp;[2002]&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;La requête 1 n’utilise aucun set. Il s’agit du résultat souhaité affichant le top 5 des revendeurs en 2002.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Résultat requête 1 :&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/__t7RQcg6-2U/Shm1nRtdNbI/AAAAAAAAAHE/YBGsAK5DgZY/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__t7RQcg6-2U/Shm1nkSAOJI/AAAAAAAAAHI/hlbd38uRCUQ/image_thumb.png?imgmax=800" width="244" height="107" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;La requête 2 utilise le static set. On constate que le résultat n’est pas le top 5 des revendeurs pour l’année 2002 mais le top 5 toutes années confondues. La raison est que le set a été évalué dans le contexte général du cube sans prendre en compte la clause WHERE.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Résultat requête 2 :&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/__t7RQcg6-2U/Shm1n8d_XYI/AAAAAAAAAHM/XBlewHZOE_M/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__t7RQcg6-2U/Shm1oV6k0gI/AAAAAAAAAHQ/F01M8nvMBeo/image_thumb%5B1%5D.png?imgmax=800" width="244" height="106" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Le requête 3 renvoie le même résultat que la requête 1. La clause WHERE a bien été prise en compte lors de l’évaluation du top 5.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Résultat requête 3 :&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/__t7RQcg6-2U/Shm1osH3bXI/AAAAAAAAAHU/nYS6_SqxNuo/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__t7RQcg6-2U/Shm1o6dUghI/AAAAAAAAAHY/h_IKT9g5l68/image_thumb%5B2%5D.png?imgmax=800" width="244" height="109" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En conclusion, on constate que Microsoft a su améliorer les fonctionnalités des sets en les rendant interactifs par rapport au contexte d’exécution. Cependant il faut être vigilant quant à leur utilisation car ils peuvent empêcher les optimisations des plans d’exécutions tel que le block computation par exemple.&lt;/p&gt;  &lt;p&gt;Pour aller plus loin vous pouvez vous rendre sur le blog de Mosha où ce dernier explique en détail la différence entre les 2 types de set :&lt;/p&gt;  &lt;p&gt;&lt;a title="http://sqlblog.com/blogs/mosha/archive/2007/08/25/mdx-in-katmai-dynamic-named-sets.aspx" href="http://sqlblog.com/blogs/mosha/archive/2007/08/25/mdx-in-katmai-dynamic-named-sets.aspx"&gt;http://sqlblog.com/blogs/mosha/archive/2007/08/25/mdx-in-katmai-dynamic-named-sets.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Chris Webb a écrit également un article intéressant sur une des limitations du set dynamic. Entre autre sur le fait que ce dernier ne puisse pas être évalué plusieurs fois au sein d’une même requête :&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!1555.entry" href="http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!1555.entry"&gt;http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!1555.entry&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-563874675328056026?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/563874675328056026/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/05/dynamic-set-vs-static-set.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/563874675328056026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/563874675328056026'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/05/dynamic-set-vs-static-set.html' title='Dynamic Set vs Static Set'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/__t7RQcg6-2U/Shm1nkSAOJI/AAAAAAAAAHI/hlbd38uRCUQ/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-2888301728560394385</id><published>2009-05-15T15:08:00.001+02:00</published><updated>2009-06-17T20:57:07.215+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>“Kilimandjaro” devient SQL Server 2008 R2</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/__t7RQcg6-2U/Sg1pOT1BzcI/AAAAAAAAAG8/EYR9BpMs56c/s1600-h/logosql0815.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="logo-sql08" border="0" alt="logo-sql08" src="http://lh4.ggpht.com/__t7RQcg6-2U/Sg1pOgl0XsI/AAAAAAAAAHA/Daqvt2MeTA0/logosql08_thumb13.gif?imgmax=800" width="351" height="76" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Lors de la conférence Teched qui s’est déroulée du 11 au 15 Mai 2009 à Los Angeles, Microsoft a annoncé de manière officielle la sortie d’une version “Release 2” pour SQL Server 2008. &lt;/p&gt;&lt;p&gt;Ce produit appelé auparavant SQL Server “Kilimandjaro” comprend un ensemble d’améliorations pour SQL Server 2008 focalisées essentiellement sur la partie décisionnelle. Voici un résumé des principales nouveautés :&lt;/p&gt;&lt;p&gt;&lt;strong&gt;L’analyse à la demande (codename “Gemini”) :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;“Gemini” est le nom de code d’un add-in pour Excel destiné aux utilisateurs finaux et permettant de traiter de manière performante des volumes importants de données (jusqu’à plusieurs dizaines de millions d’enregistrements) directement sur un poste client sans utiliser un serveur Analysis Services.&lt;/p&gt;&lt;p&gt;Techniquement parlant, l’add-in inclut une version cliente d’Analysis Services qui traite les données directement en mémoire. On parle de D-OLAP pour Desktop Online Analytical Processus.&lt;/p&gt;&lt;p&gt;Une version améliorée des tableaux croisés dynamiques est également prévue avec la possibilités de publier le résultat directement dans un portail SharePoint via les Excel Services. Le plus intéressant étant que le tableau publié continuera de se mettre à jour en fonction de la planification de chargement des données définie par l’utilisateur. &lt;/p&gt;&lt;p&gt;Enfin, il est prévu de mettre à disposition un tableau de bord SharePoint pour la supervision des serveurs Analysis Services.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Le Reporting à la demande :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Les composants graphiques Dundas de SQL Server 2008 vont être complétés par les cartes géographiques.&lt;/p&gt;&lt;p&gt;Un aspect collaboratif va être introduit avec l’ajout d’une librairie de composants partagés. Cette nouvelle fonctionnalité issue du rachat de 90Degree permettra aux utilisateurs de partager entre eux des parties de rapports (par exemple une entêtes de pages, un tableau d’analyse avec son formatage,…).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;La gestion de la qualité des données (codename “Bulldog”) :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Suite à l’acquisition des sociétés Stratature et Zoomix, Microsoft à développé un nouvel outil de gestion de qualité des données nommé Master Data Services (MDS).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;La gestion des entrepôts de données (codename “Madison”) :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Cet outil provenant du rachat de Datallegro permet de gérer des architectures complexes d’entrepôts de données. A titre d’exemple la gestion de bases de données allant jusqu’au PetaBytes (1000&lt;sup&gt;5&lt;/sup&gt;) de données sera supportée. &lt;/p&gt;&lt;p&gt;lien officiel de SQL Server 2008 R2 :&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.microsoft.com/sqlserver/2008/en/us/R2.aspx" href="http://www.microsoft.com/sqlserver/2008/en/us/R2.aspx"&gt;http://www.microsoft.com/sqlserver/2008/en/us/R2.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;La première CTP est annoncée pour cet été et la version finale pour le premier semestre 2010.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-2888301728560394385?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/2888301728560394385/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/05/kilimandjaro-devient-sql-server-2008-r2.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/2888301728560394385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/2888301728560394385'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/05/kilimandjaro-devient-sql-server-2008-r2.html' title='“Kilimandjaro” devient SQL Server 2008 R2'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/__t7RQcg6-2U/Sg1pOgl0XsI/AAAAAAAAAHA/Daqvt2MeTA0/s72-c/logosql08_thumb13.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-2672213872715086357</id><published>2009-04-12T11:29:00.001+02:00</published><updated>2009-04-12T11:41:20.077+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>Où sont stockées les permissions des Rôles de sécurité ?</title><content type='html'>&lt;p&gt;Voici un point qui m’a surpris lors de la mise à jour d’un cube dans une base Analysis Services de production à l’aide d’un script ASSL généré depuis un environnement de développement :&lt;/p&gt;  &lt;p&gt;Les permissions des rôles ne sont pas définies dans le rôle en tant que tel mais directement dans les objets de la base OLAP i.e. dimensions et cubes.&lt;/p&gt;  &lt;p&gt;Par exemple en créant une commande ALTER sur un cube pour lequel un rôle de sécurité est défini en Read, on constate que le script contient une section &lt;strong&gt;cubePermission&lt;/strong&gt; incluant les paramètres de définition du rôles sur le cube.&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="404"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="402"&gt;         &lt;p&gt;&amp;lt;CubePermissions&amp;gt;            &lt;br /&gt;&amp;lt;CubePermission&amp;gt;             &lt;br /&gt;&amp;lt;ID&amp;gt;CubePermission&amp;lt;/ID&amp;gt;             &lt;br /&gt;&amp;lt;Name&amp;gt;CubePermission&amp;lt;/Name&amp;gt;             &lt;br /&gt;&amp;lt;RoleID&amp;gt;Role&amp;lt;/RoleID&amp;gt;             &lt;br /&gt;&amp;lt;Read&amp;gt;Allowed&amp;lt;/Read&amp;gt;             &lt;br /&gt;&amp;lt;ReadSourceData&amp;gt;None&amp;lt;/ReadSourceData&amp;gt;             &lt;br /&gt;&amp;lt;/CubePermission&amp;gt;             &lt;br /&gt;&amp;lt;/CubePermissions&amp;gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;De plus en générant un script CREATE d’un rôle, on constate que ce dernier contient seulement un ID, un Name et la liste des comptes/groupes Windows associés.&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="400"&gt;         &lt;p&gt;&amp;lt;Create (…)&amp;gt;            &lt;br /&gt;&amp;lt;ParentObject&amp;gt;             &lt;br /&gt;&amp;lt;DatabaseID&amp;gt;Adv Wks DW&amp;lt;/DatabaseID&amp;gt;             &lt;br /&gt;&amp;lt;/ParentObject&amp;gt;             &lt;br /&gt;&amp;lt;ObjectDefinition&amp;gt;             &lt;br /&gt;&amp;lt;Role (…)&amp;gt;             &lt;br /&gt;&amp;lt;ID&amp;gt;Role&amp;lt;/ID&amp;gt;             &lt;br /&gt;&amp;lt;Name&amp;gt;Reader&amp;lt;/Name&amp;gt;             &lt;br /&gt;&amp;lt;Members&amp;gt;             &lt;br /&gt;&amp;lt;Member&amp;gt;             &lt;br /&gt;&amp;lt;Name&amp;gt;Everyone&amp;lt;/Name&amp;gt;             &lt;br /&gt;&amp;lt;Sid&amp;gt;S-1-1-0&amp;lt;/Sid&amp;gt;             &lt;br /&gt;&amp;lt;/Member&amp;gt;             &lt;br /&gt;&amp;lt;/Members&amp;gt;             &lt;br /&gt;&amp;lt;/Role&amp;gt;             &lt;br /&gt;&amp;lt;/ObjectDefinition&amp;gt;             &lt;br /&gt;&amp;lt;/Create&amp;gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Conclusion, dans le cas de mise à jour de base via des commandes ALTER il est donc important de répliquer à l’identique les rôles de production sur les environnements de développements.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-2672213872715086357?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/2672213872715086357/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/04/ou-sont-stockees-les-permissions-des.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/2672213872715086357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/2672213872715086357'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/04/ou-sont-stockees-les-permissions-des.html' title='Où sont stockées les permissions des Rôles de sécurité ?'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4443486754940179968.post-4313708302132853602</id><published>2009-04-05T19:52:00.001+02:00</published><updated>2009-04-05T23:17:13.609+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Analysis Services'/><title type='text'>Agrégats Analysis Services et Reporting Services</title><content type='html'>&lt;p align="justify"&gt;Avec le provider MS Analysis Services fourni depuis la version 2005 de Reporting Services, par défaut seules les données au niveau des feuilles des hiérarchies sont récupérées lors de la construction de datasets en mode design. Si des groupes sont définis au niveau d’une data region alors les agrégats sont recalculés au sein du rapport par Reporting Services.&lt;/p&gt;&lt;p&gt;Dans le cas d’agrégations simples (de type SUM ou COUNT) les résultats obtenus sont conformes aux valeurs du cube bien que en terme de performance il soit sûrement plus efficace d’agréger au niveau OLAP qu’au niveau Reporting Services. Par contre si la base OLAP comporte des fonctions d’agrégations semi-additives telles que LASTNONEMPTY ou FIRSTCHILD dans ce cas il est nécessaire de récupérer les agrégats natifs de la base OLAP.&lt;/p&gt;&lt;p&gt;Pour cela une fonctionnalité est prévue au niveau Reporting Services : il s’agit de la fonction d’agrégation AGGREGATE. Cette dernière permet de récupérer les agrégats directement depuis la base OLAP sans les recalculer au niveau du rapport.&lt;/p&gt;&lt;p align="justify"&gt;Voici un exemple sur la base OLAP AdventureWorks2008 :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;La fonction AGGREGATE est définie au niveau des groupes du tablix :&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/Sdjv30j5P4I/AAAAAAAAAEQ/otXOPNb7wvw/s1600-h/agr%C3%A9gats3%5B7%5D.jpg"&gt;&lt;img title="agrégats3" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="127" alt="agrégats3" src="http://lh6.ggpht.com/__t7RQcg6-2U/Sdjv4mvftAI/AAAAAAAAAEU/CjZ7HDr8reo/agr%C3%A9gats3_thumb%5B3%5D.jpg?imgmax=800" width="393" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Voici la requête MDX générée par le designer :&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table cellspacing="0" cellpadding="2" width="443" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="441"&gt;&lt;p&gt;SELECT&lt;br /&gt;NON EMPTY&lt;br /&gt;{&lt;br /&gt;[Measures].[Internet Sales Amount]&lt;br /&gt;,[Measures].[Internet Average Sales Amount]&lt;br /&gt;} ON COLUMNS&lt;br /&gt;,NON EMPTY&lt;br /&gt;{&lt;br /&gt;[Product].[Product Categories].[Category].ALLMEMBERS&lt;br /&gt;,[Product].[Product Categories].[Subcategory].ALLMEMBERS&lt;br /&gt;,[Product].[Product Categories].[Product].ALLMEMBERS&lt;br /&gt;}&lt;br /&gt;ON ROWS&lt;br /&gt;FROM [Adventure Works]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;Ce qui nous donne le résultat suivant : &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/__t7RQcg6-2U/Sdjv5RdjdTI/AAAAAAAAAEY/IHLAhEuEo28/s1600-h/agr%C3%A9gats2.jpg"&gt;&lt;img title="agrégats2" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="143" alt="agrégats2" src="http://lh6.ggpht.com/__t7RQcg6-2U/Sdjv59KeIQI/AAAAAAAAAEc/KdieUfzy67g/agr%C3%A9gats2_thumb.jpg?imgmax=800" width="379" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Nous sommes bien conformes aux résultats réels des agrégats du cube. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;NB : en retournant en mode design du dataset, on remarque des valeurs nulles lors de l’exécution de la requête : il s’agit en fait des lignes complémentaires comportant les valeurs des agrégats. Ces dernières peuvent être masquées via l’option “show Aggregations” de la barre d’outils.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4443486754940179968-4313708302132853602?l=gurvang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gurvang.blogspot.com/feeds/4313708302132853602/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://gurvang.blogspot.com/2009/04/agregats-analysis-services-et-reporting.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/4313708302132853602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4443486754940179968/posts/default/4313708302132853602'/><link rel='alternate' type='text/html' href='http://gurvang.blogspot.com/2009/04/agregats-analysis-services-et-reporting.html' title='Agrégats Analysis Services et Reporting Services'/><author><name>Gurvan Guyader</name><uri>https://profiles.google.com/107258704041378344914</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Uvbx9Y0USm0/AAAAAAAAAAI/AAAAAAAAAzo/XjaUOlMADEU/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/__t7RQcg6-2U/Sdjv4mvftAI/AAAAAAAAAEU/CjZ7HDr8reo/s72-c/agr%C3%A9gats3_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
