Archives pour novembre 2008

Ranking de la fonction FREETEXT

24 novembre 2008

Souvent on me pose des questions sur la pertinence de la recherche FullText de SQL Server.

Pourquoi l’article que je recherchais n’est pas remonté, …ce mot là est plus important que celui-ci, …normalement ce truc là aurait du remonter…, etc.

Il faut bien comprendre que la pertinence est très complexe à calculer. Malgré cela, Microsoft nous en livre la formule dans la MSDN (la formule est la même pour les 2 version) : 

Je vous invite à vous rendre directement à la section Ranking of FreeText qui nous donne la formule OKAPI BM25 servant au calcul du Rank. 

Simplement, retenez que la densité est un critère très important. En effet, si on recherche par exemple  »fût de sherry » et que « fût » est seul mais dans un texte court, il peut passer devant  »fût » et « sherry » noyés dans un long texte. Plus vos textes seront touffus, plus la pertinence sera avérée; par exemple, indexer des titres courts (quelques mots) produira des effets de bord certains.

Voici la formule à titre d’information. Si vous jugez qu’un résultat n’est pas à sa place, vous pouvez le vérifier et porter réclamation auprès de l’éditeur sur Connect. Personnellement, à chaque fois que j’ai constaté de mauvais résultats, c’est qu’il y avait une mauvaise recherche ou bien des données mal renseignées.

Rank = Σ[Terms in Query] w ( ( ( k1 + 1 ) tf ) / ( K + tf ) ) * ( ( k3 + 1 ) qtf / ( k3 + qtf ) ) )
Where:
w is the Robertson-Sparck Jones weight.
In simplified form, w is defined as:
w = log10 ( ( ( r + 0.5 ) * ( N – R + r + 0.5 ) ) / ( ( R – r + 0.5 ) * ( n – r + 0.5 ) )
N is the number of indexed rows for the property being queried.
n is the number of rows containing the word.
K is ( k1 * ( ( 1 – b ) + ( b * dl / avdl ) ) ).
dl is the property length, in word occurrences.
avdl is the average length of the property being queried, in word occurrences.
k1, b, and k3 are the constants 1.2, 0.75, and 8.0, respectively.
tf is the frequency of the word in the queried property in a specific row.
qtf is the frequency of the term in the query.

MacLaren tourne sous SQL Server 2008

22 novembre 2008

MacLaren Electronics Systems, division qui équipe les Formule 1 de l’écurie du même nom, utilisent les technologies Microsoft pour leur backoffice :

  • SQL Server 2008 pour les données
  • Reporting Services et Excel 2007 pour la restitution de données
  • Analysis Services de Data Mining
  • Silverlight pour les interfaces
  • et Visual Studio 2008 pour développer tout cela

La fonctionnalité FILESTREAM a été déterminante pour le choix de SQL Server 2008 car MacLaren doit stocker et gérer les données binaires provenant des équipements embarqués dans la voiture (ECU – Engine Control Unit). Pour rappel, cette fonctionnalité permet de stocker des données binaires (documents, vidéos, etc.) sur le système de fichier classique et d’y accéder de façon streamée (par flux), le tout géré par SQL Server (sécurité, requêtage, etc.). Cela permet d’optimiser les ressources du serveur.

Evidemment, les capacités d’analyses de SQL Server sont aussi utilisés pour explorer et faire parler les données. Les données étant extraites du binaire via des fonctions CLR. Pour l’anecdote, un Grand Prix génère entre 1 et 2Go de données.

 

Démonstration en vidéo : http://www.microsoft.com/casestudies/resources/Files/4000001476/McLaren_Technical_3min_500k.wvx
Le « case study » en détail : http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=4000001476

 

Sinon, sur un plan plus personnel, étant tifosi de la scuderia (aka supporter de Ferrari) depuis près de 15 ans, cela me rend jaloux. M’est avis que mon regard va changer la saison prochaine ;-)  

 

PS : vous aurez noté que les bruits des F1 dans la vidéo ont été américanisés. Sans les images, on jurerait que c’est du Nascar.

IIS Media Pack 1.0

22 novembre 2008

Il y a 2 semaines est sorti un pack d’extension au serveur Web IIS 7.0. Comme son nom l’indique, ce pack ajoute 2 fonctionnalités médias :

  • Bit Throttling (contrôle de flux) : cela permet de contrôler le débit de différents types de médias (WMV, MP3, etc.) en fonction du client, du paramétrage, etc. Ayant eu, dans une vie antérieure, à développer des sites web manipulant de nombreux médias (vidéos, mp3), je peux vous dire que cette fonctionnalité est très intéressante. Elle permet de gérer son contenu plus sereinement, je parle surtout en terme de bande passante, sans avoir à recourir à un serveur spécialisé (streaming, Windows Media Services, etc.) ou à un CDN (Content Delivery Network comme akamai).
  • Web playlists : création de playlists éventuellement dynamiques avec pour principal but de ne pas exposer en direct vos médias

De nouvelles extensions sont prévues pour 2009, notamment concernant la gestion des vidéos HD avec Smooth Streaming (je vous renvoie d’ailleurs sur le blog d’un collègue qui en parle : SmoothHD chez Patrice Lamarche)

Plus d’infos sur le site de IIS : http://www.iis.net/media

Erreur Migration Reporting Services 2005 vers 2008

17 novembre 2008

Une petite mésaventure qui est arrivé à un de mes collègues lors de la migration de SQL Server 2005 à SQL Server 2008. Tout a bien fonctionné, la migration se passe sans encombre, tous les services repartent, les applications fonctionnent très bien sauf 1 rapport qui affiche cette erreur :

Index was out of range. Must be non negative and less than the size of the collection. Parameter name index

Nous avons donc réouvert le rapport sous Visual Studio pour voir ce qui pouvait clochait et pas de problème apparent, le rapport n’affichant même pas d’erreur dans la prévisualisation (qui n’est tout à fait pas le même moteur de rendu).

Après quelques périgrinations sur le web, je trouve un problème similaire avec des largeurs de colonnes dans la CTP2 (https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=338777&wa=wsignin1.0). Le problème était (celui-ci étant corrigé dans la RTM) que dans certains cas, l’éditeur mettait des -1 comme valeur d’attribut, ce qui n’est pas interprété par le renderer qui lève une exception.

Nous avons donc cherché s’il n’y avait pas de -1 dans le fichier RDL résultant de la migration et nous en avons trouvé. La migration ajoute des valeurs par défaut mais le moteur de rendu HTML de Reporting Services 2008 ne sait pas les traiter. Il faut donc aller supprimer ces -1 à la main (clic droit->View Code dans l’explorateur de solution).

<ChartArea Name="Default">
 <ChartCategoryAxes>
  <ChartAxis Name="Primary">
   <ChartMinorGridLines>
    <Enabled>False</Enabled>
    <Interval>NaN</Interval>
    <IntervalOffset>-1</IntervalOffset>
   </ChartMinorGridLines>
  </ChartAxis>
 </ChartCategoryAxes>
</ChartArea Name="Default">

Ici, le problème se situait dans les lignes intermédiaires d’un graphique, pourtant désactivées.

 

PS : si vous aussi avez rencontré ce problème, merci de le signaler sur Connect pour une correction plus rapide de la part de Microsoft. Ca se passe ici : https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=382355

 

SQL Services ou SQL Data Services ?

10 novembre 2008

Une question légitime sur SQL Services est de savoir quel est son vrai nom ? En effet, on peut trouver les termes SQL Services et SQL Data Services. Lequel est correct ?

En fait, les deux sont corrects mais ne correspondent pas à la même technologie. Je m’explique. SQL Services est la technologie « chapeau » qui correspond à l’équivalent de SQL Server in-the-cloud. Ce sont les services SQL de Windows Azure. SQL Data Services est un sous-ensemble de SQL Services et correspond uniquement au service de données relationnelles. C’est l’équivalent de la brique base de données de SQL Server.

Même si on comprend avec l’un ou l’autre des termes, la précision est faite ;-)

Report Builder in-the-Cloud

10 novembre 2008

Lors d’une démo à la PDC, j’ai vu la possibilité de faire des rapports Reporting Services avec des données récupérées depuis SQL Data Services (ie. « dans le cloud »).

Cette fonctionnalité est possible grâce aux fonctionnalités d’extensibilité qui existent dans Reporting Services depuis la version 2005. En effet, il est possible grâce aux Custom Data Extensions (CDE) d’ajouter sa propre méthode de récupération de données (un System.Data.DataSet, un composant métier, un webservice, etc.).

Une partie des équipes de SQL Services, affectée sur des labs autour de la nouvelle technologie, nous propose donc une implémentation permettant de requêter des données dans le Cloud. En ajoutant simplement quelques Assemblies dans les répertoires de Report Builder, Visual Studio et Report Server, on dispose donc d’un nouveau type de connexion pour les Data Sources : SQL Server Data Services.

Pour obtenir les DLLs et le quide d’installation : http://sqlserviceslabs.net/Reporting.html

Une fois installé, il suffit de se connecter sur son Authority, de choisir son Container et d’écrire sa requête à la Linq Style :

from e in entities where e.Kind == "Contacts" select e

Note : attention, une erreur de jeunesse certainement, il ne faut pas de retour à la ligne dans la requête

 

Merci à Stella Chan, Lead Program Manager sur Reporting Services chez Microsoft, pour ses réponses. D’ailleurs, je reviendrai bientôt avec un post sur sa session à la PDC (http://channel9.msdn.com/pdc2008/BB26/)

Reporting Services – Rich TextBox

3 novembre 2008

Une petite fonctionnalité attendue depuis la version 2005 fait son apparition dans la version 2008 de Reporting Services ; c’est la gestion fine du contenu des textboxes.

En 2005, une textbox contient un texte statique OU une expression. Il fallait donc mettre des textboxes côte à côte pour faire un bloc de texte un peu plus évolué.

Maintenant, il est possible de créer des PlaceHolder dans une textbox et donc mélanger des expressions avec du texte statique.

De plus, les textboxes supportent maintenant du contenu enrichi. On peut donc formater le texte très finement voire utiliser des balises HTML pour un formatage plus dynamique. Chaque bloc de texte ou placeholder peut être formaté indépendemment.

Biensur, tout ceci disponible sous Visual Studio 2008 ou Report Builder 2.0