Le Post de MCNEXT

Les articles des consultants de MCNEXT

Bienvenue sur le Post de MCNEXT !

conferences_microsoft_usa_700 Les consultants de MCNEXT participent chaque année aux grandes conférences Microsoft aux USA. Retrouvez sur ce blog leurs notes : Frédéric et Sébastien au Pass Business analytics 2015, Guillaume et Benoit à la Build 2015 et Adrien et Stéphane au Microsoft Ignite 2015 (Lien à venir).
A propos de ce blog :
Retrouvez ici les posts des consultants du groupe MCNEXT (déjà plus de 500 !)
Vous voulez en savoir plus sur MCNEXT ou vous souhaitez nous rejoindre ?
Consultez notre site corporate.
Vous pouvez aussi nous suivre sur twitter: @LE_FIL_MCNEXT et regardez nos videos sur notre chaîne YouTube McnextTV !

SharePoint 2016 Technical Preview vu depuis PowerShell

Ca y est ! La nouvelle version de SharePoint est arrivée en version Technical Preview. Il est donc temps de voir les nouvelles fonctionnalités mises à disposition par Microsoft dans SharePoint 2016. C’est aussi l’occasion d’apprécier les changements techniques annoncés dans cette nouvelle mouture, et principalement sur la partie hybride. De mon point de vue, l’une des meilleures façon d’aborder cette évolution technique est de faire le tour d’horizon des nouvelles commandes PowerShell disponible, c’est une méthode assez pertinente pour anticiper les évolutions à venir. Afin de bien comprendre et analyser ces évolutions, nous allons regrouper les commandes par thématiques.

Une remarque qui a son importance: à l’heure où nous écrivons ces lignes aucune de ces commandes n’a été référencé par Microsoft sur Technet.

Gestion des plages d’adresses autorisées

Add-SPIPRangeAllowList
Disable-SPIPRangeAllowList
Get-SPIPRangeAllowList
Test-SPIPRangeAllowList
Set-SPIPRangeAllowListSetting
Set-SPIPAccessControlOperationMode
Set-SPIPAccessControlSubscriptionId

Elles permettent tout simplement de restreindre l’accès d’une Collection de site à une adresse IP donnée. Malheureusement cela ne fonctionne que sur la collection de site racine de la Web Application. Pour plus de détails sur l’implémentation de cette fonctionnalité, je vous invite à lire ce post.

Gestion des bases de données

Dismount-SPSiteMapDatabase
Get-SPSiteMapDatabase
Mount-SPSiteMapDatabase
Upgrade-SPSiteMapDatabase

Aucune information filtré sur ce nouveau composant pour l’instant, nous mettrons l’article à jour une fois que nous aurons éprouvé ces commandes.

Reset-SPSites

Runtime Telemetry

Set-SPRuntimeTelemetry
Get-SPRuntimeTelemetry

Aucune information filtré sur ce  nouveau composant pour l’instant. A première vue il s’agirait d’un composant mesurant la disponibilité de service ou d’application par un lien ODL, peut être un lien avec le nouveau mode hybride ? Nous mettrons l’article à jour une fois que nous aurons éprouvé ces commandes.

Get-SPRuntimeTelemetry

Gestion des serveurs

Set-SPServer
Upgrade-SPServer

Deux nouvelles commandes permettant de gérer les serveurs SharePoint. Un point intéressant est la commande Upgrade-SPServer qui vérifierait tout simplement les versions sur chacun des serveurs

get-spserver

Get-spserver

Gestion des serveurs et des rôles

Start-SPService
Stop-SPService
Get-SPService

Ces commandes vont tout simplement faciliter la gestion du provisioning ses services SharePoint, principalement sur une architecture à plusieurs tiers. On retrouve la notion de MinRole permettant de segmenter par rôle chacun de vos serveurs SharePoint 2016.

Get-spservice

Gestion des bases de données

Compare-SPDatabaseSchema
Copy-SPDatabase
Migrate-SPDatabase
Register-SPContentDatabase
Switch-SPSitesToNewDatabase
Upgrade-SPConfigurationDatabase

C’est probablement un des périmètres où il y a eu le plus d’évolutions, et pour cause, SharePoint vit au rythme de ses bases de données. La première commande Compare-SPDatabaseSchema nous permet de comparer les schémas de deux bases de données différentes. Cette commande a été testée avec deux bases de données de contenus.

compare-spdatabaseschema

La commande Copy-SPDatabase permet, comme son nom l’indique, de copier une base de donnée SharePoint. Aucune information n’existe pour l’instant sur ce nouveau composant, mais on se doute que cela sera utile dans un scénario hybride ! On remarquera que la propriété de cible pour la copie attend une Connection String. A force de travailler avec SharePoint, on en aurait presque oublié le principe :)

Register-SPContentDatabase s’inscrit très probablement dans cette continuité de plateforme hybride.

register-spcontentdatabase

Switch-SPSitesToNewDatabase est une commande plus ou moins identique à Move-SPSite. Elle permet le déplacement d’une Collection de site d’une base de données de contenu vers une autre. Le différence notable est la capacité de renseigner plusieurs collections de site en paramètre d’entrée.

switch-spsitestonewdatabase

Upgrade-SPConfigurationDatabase est l’équivalent de la commande Upgrade-SPServer pour notre base de donnée de configuration (SharePoint_Config)

upgrade-spconfigurationdatabase

Site Master

Enable-SPWebTemplateForSiteMaster
Disable-SPWebTemplateForSiteMaster
Get-SPWebTemplatesEnabledForSiteMaster
Get-SPSiteMaster
New-SPSiteMaster
Remove-SPSiteMaster

SharePoint 2016 ajoute une nouvelle fonctionnalité touchant la création des collections de site: le Fast Site Collection Creation. Cette fonctionnalité est en lien direct avec le principe de Site Provisioning, concept très populaire permettant la mise en place automatisé d’espaces collaboratifs aux utilisateurs. Le mécanisme permet d’accélérer la création d’une Collection de Site en se basant sur une copie de la collection de site au niveau de la base de donnée de contenu.

Son application est assez simple

  1. Définir le Web Template faisant l’objet du Site Master
  2. Créer le Site Master. Suite à cette commande, une nouvelle collection de site Master est créé
  3. Créer la Collection de Site depuis le Master

enable-spwebtemplateforsitemaster

new-spsitemaster new-spsitemaster3 new-spsitemaster

Pour en savoir plus sur ce mécanisme et son application direct, vous pouvez lire le récent post de Bill Baer à ce sujet.

Gestion des vidéos

Disable-SPVideoStreaming
Enable-SPVideoStreaming
Get-SPVideoStreamingConfig
Suspend-SPVideoStreamingAccess
Resume-SPVideoStreamingAccess

Un des axes de développements de SharePoint 2016 est la gestion des vidéos. Au travers de ces commandes, on découvre un service de streaming. Pour le rendre effectif, vous devrez créer une Service Application de type Subscription Settings Service Application comme décrit ici.

get-spsitesubscription

Il sera par la suite possible d’activer, suspendre ou désactiver le service de streaming et le service est activé par défaut lorsque l’on dispose d’une Subscription Service. . On regrette un peu l’absence de paramétrage avancé du service de streaming, mais on espère que d’ici la version RTM on ai une plus grande latitude de configuration. On imagine que comme beaucoup de services disponible dans cette Technical Preview, ce sont les mêmes composants actuellement exploités dans le cadre d’un service Office 365, et dans ce cas précis le service d’Office Video.

Get-SPVideoStreamingConfig

Azure

Update-SPAzureBlobConfigLocator
Update-SPAzureBlobConfigLocatorEx
Update-SPAzureBlobConfigLocatorEx1
Update-SPAzureBlobLogStoreSignatures
Update-SPAzureBlobSignaturesEx
Update-SPAzureBlobSignaturesEx1
New-SPAzureVideoServiceAccount
Get-SPAzureVideoServiceAccount
Remove-SPAzureVideoServiceAccount

Cette nouvelle version est résolument tourné vers le cloud et le modèle hybride. Nous avons désormais à disponibilité des commandes permettant d’interagir avec une plateforme Azure. Pour bénéficier de ces fonctionnalités il faudra cependant disposer d’un compte Azure, et surtout d’un abonnement Media Services.

Au niveau des commandes PowerShell, on distingue deux catégories : la gestion des vidéos, et la configuration d’un service permettant le stockage de fichiers binaire encryptés sur une plateforme Azure. Pour le coup on est vraiment sur de l’hybride avec les données techniques se trouvant sur la base de donnée de contenu sur notre environnement On Premise, et les documents hébergés directement sur la plateforme Azure. On a hâte de tester tout ça !

Très peu d’informations sont disponible à ce sujet,  néanmoins cet article nous donne un bon aperçu des commandes à effectuer pour disposer de cette fonctionnalité de stockage de fichiers dans Azure.

Office 365

Set-SPO365LinkSettings
Test-SPO365LinkSettings
Get-SPO365LinkSettings

Là encore, ces commandes mettent en avant le modèle hybride avec la configuration de OneDrive et des Sites. On retrouve également ces fonctionnalités au niveau de notre Central Administration.

On retiendra de cette fonctionnalité la capacité de choisir le mode de redirection pour le mode hybride choisit: OneDrive et les Sites, ou OneDrive uniquement.

get-spo365LinkSettings get-spo365LinkSettings get-spo365LinkSettings

Mise à jour des fichiers par serveurs

Copy-SPSideBySideFiles

Toujours dans cette optique de mettre à disposition des administrateurs des fonctionnalités pour gérer la performance et le dimensionnement d’infrastructure SharePoint On Premise, nous avons le droit à une commande permettant la copie de répertoires et de fichiers dans la ruche. Cette commande PowerShell se base sur le très populaire et robuste Robocopy.exe et permet la copie de fichiers web (js,css et htm) d’un server à l’autre. Nous n’avons pas trouvé de Timer Job associé à ces opérations, il y a donc fort à parier que son application direct soit laissé aux administrateurs. Très peu de paramètres sont disponible pour cette dernière, si ce n’est le choix du chemin de log.

Copy-SPSideBySideFiles

Secure Store

Disable-SPSecureStoreMinDB
Enable-SPSecureStoreMinDB
Move-SPSecureStorePartitionData

Aucune information n’a filtré sur cette fonctionnalité lié au Secure Store pour l’instant, nous mettrons l’article à jour une fois que nous aurons éprouvé ces commandes.

Apps et Apps Store

Get-SPAppStoreWebServiceConfiguration
Set-SPAppStoreWebServiceConfiguration
Move-SPAppManagementData
Upgrade-SPAppManagementServiceApplication

Aucune information filtré sur cette fonctionnalité pour l’instant, nous mettrons l’article à jour une fois que nous aurons éprouvé ces commandes.

Gestion de Projets

Beaucoup de fonctionnalités autour de Project et PWA (Project Web Application) sont disponible dans cette nouvelle version. Elles feront probablement l’objet d’une étude dans un post séparé tellement elles sont nombreuses.

Service Application

Get-SPConnectedServiceApplicationInformation

Aucune information filtré sur cette fonctionnalité pour l’instant, la commande nous retourne les différents EndPoint de nos Service Application. On peut partir de l’hypothèse que cette commande s’inscrit dans l’utilisation d’une architecture n-tiers avec les MinRoles, cette information permettrait la vérification centralisée de chacune des Service Applications d’une ferme disposant de plusieurs rôles.

Get-SPConnectedServiceApplicationInformation

Gestion des Collection de Sites

Reset-SPSites

Aucune information filtré sur cette fonctionnalité pour l’instant. Contrairement à ce que pourrait laisser penser cette commande, le paramètre d’entrée ID est celui de la base de données de contenu et non celui d’une collection de site. Nous n’avons pas remarqué de comportement particulier lors de l’exécution de cette commande, ni aucune indisponibilité.

Reset-SPSites

Gestion des Web Applications

Upgrade-SPWebApplication

Aucune information n’a filtré sur cette fonctionnalité pour l’instant, nous mettrons l’article à jour une fois que nous aurons éprouvé ces commandes.

Upgrade-SPWebApplication

Insights

Get-SPInsightsAuthSettings
Set-SPInsightsAuthSettings

D’après ce post sur le Forum Technet , on apprend que le composant n’est pas encore disponible dans cette Technical Preview. La commande nous retourne des informations sur notre ferme SharePoint, ainsi que sur une assembly (introuvable localement). En en saura probablement plus dans les semaines à venir.

Get-SPInsightsAuthSettings

Profils utilisateurs

Get-SPMicrofeedOptions
Set-SPMicrofeedOptions
Set-SPDefaultProfileConfig
Upgrade-SPProfileServiceApplication
Export-SPTagsAndNotesData

De nouvelles commandes sont disponible pour gérer les profils utilisateurs dans SharePoint, on rappellera qu’un des changements majeur de cette nouvelle version est la suppression complète de FIM (Forefront Identity Manager) et donc la possibilité d’exporter des propriétés de profils utilisateurs dans un annuaire en natif. On notera dans ces commandes la possibilité de gérer des options pour le MicroFeed ainsi que la possibilité d’exporter les Tags & Notes. Cette commande est la bienvenue sachant que la fonctionnalité de Tags & Notes sera dépréciée sur SharePoint 2016.

Get-SPmicrofeedoptions Export-sptagsandnotesdata

Les références dans les projets UWP en JavaScript

Quand on développe des applications UWP en JavaScript avec la version 2015 RC de visual studio, nous avons la possiblité d’ajouter une référence que vers un projet de la solution courante et aucune vers « l’extérieur » comme par exemple le player framework ou le sdk de bing.

Mais cela est possible via une astuce assez simple: La modification à la main du fichier jsproj et l’ajout de la référence.

Ici par exemple, j’ajoute une référence vers le SDK de bing Maps

  <ItemGroup>
    <SDKReference Include="Bing.Maps.JavaScript, Version=1.313.0825.1" />
  </ItemGroup>

Le XML complet du jsproj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|AnyCPU">
      <Configuration>Debug</Configuration>
      <Platform>AnyCPU</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|ARM">
      <Configuration>Debug</Configuration>
      <Platform>ARM</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x86">
      <Configuration>Debug</Configuration>
      <Platform>x86</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|AnyCPU">
      <Configuration>Release</Configuration>
      <Platform>AnyCPU</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|ARM">
      <Configuration>Release</Configuration>
      <Platform>ARM</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x86">
      <Configuration>Release</Configuration>
      <Platform>x86</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>4126a496-99c2-4185-b2ac-ad2d4c8b47a0</ProjectGuid>
  </PropertyGroup>
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0'">
    <VisualStudioVersion>14.0</VisualStudioVersion>
  </PropertyGroup>
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).Default.props" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).props" />
  <PropertyGroup>
    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
    <TargetPlatformVersion>10.0.10069.0</TargetPlatformVersion>
    <TargetPlatformMinVersion>10.0.10069.0</TargetPlatformMinVersion>
    <MinimumVisualStudioVersion>$(VersionNumberMajor).$(VersionNumberMinor)</MinimumVisualStudioVersion>
    <DefaultLanguage>en-US</DefaultLanguage>
    
    <PackageCertificateKeyFile>App4_TemporaryKey.pfx</PackageCertificateKeyFile>
    
  </PropertyGroup>
  <ItemGroup>
    <AppxManifest Include="package.appxmanifest">
      <SubType>Designer</SubType>
    </AppxManifest>
    <Content Include="default.html" />
    <Content Include="images\logo.scale-100.png" />
    <Content Include="images\smalllogo.scale-100.png" />
    <Content Include="images\splashscreen.scale-100.png" />
    <Content Include="images\storelogo.scale-100.png" />
    <Content Include="js\default.js" />
    <Content Include="css\default.css" />
    <Content Include="WinJS\css\ui-dark.css" />
    <Content Include="WinJS\css\ui-light.css" />
    <Content Include="WinJS\fonts\Symbols.ttf" />
    <Content Include="WinJS\js\en-US\ui.strings.js" />
    <Content Include="WinJS\js\WinJS.js" />
    <Content Include="WinJS\js\WinJS.intellisense.js" />
    <Content Include="WinJS\js\WinJS.intellisense-setup.js" />   
    
    <None Include="App4_TemporaryKey.pfx" />
    
  </ItemGroup>
  <ItemGroup>
    <SDKReference Include="Bing.Maps.JavaScript, Version=1.313.0825.1" />
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\$(WMSJSProjectDirectory)\Microsoft.VisualStudio.$(WMSJSProject).targets" />
  <!-- To modify your build process, add your task inside one of the targets below then uncomment
       that target and the DisableFastUpToDateCheck PropertyGroup. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  <PropertyGroup>
    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
  </PropertyGroup>
  -->
</Project>

Comment la BI Microsoft est en train d’évoluer !

 

BI on-demand, Big Data, Cloud, Mobilité, Machine Learning, Social BI…. Décryptage !

 

Cet article a pour but d’expliquer l’évolution actuelle et à venir de la Business Intelligence Microsoft et de décrypter son écosystème pas si simple à appréhender. En effet l’émergence du cloud, de la mobilité, des «  big data » (réseau sociaux, e-commerce…) et de l’analyse qu’on peut en faire, le tout associé aux demandes avec des délais de plus en plus cours de la part des décideurs ont fait naître de nouvelles technologies de Business Intelligence plus modernes et qui pour certaines sont parfois en phase transitoire et en mode « preview ».

L’écosystème se découpe en 4 domaines et un ensemble d’outils associés comme le montre le schéma d’ensemble ci-dessous :

 

 

 

 

_MSBI

 

 

La BI On-Premise (traditionnel) :

Depuis plus de quinze ans Microsoft fait évoluer ses outils décisionnels « On-Premise » autour de SQL Server pour permettre aux sociétés de mettre en place eux même une solution décisionnelle d’entreprise centralisée, robuste et évolutive, en harmonie avec l’infrastructure locale existante et qui répond à des exigences à la fois de sécurité, de performance mais aussi de budget.

Traditionnellement, pour la conception d’un environnement décisionnel, une société peut faire appel à l’IT, on parle alors pour une solution « Corporate » d’entreprise. Mais un utilisateur final souvent appelé « Power User » peut également mettre en place une solution et devenir autonome dans la totalité ou une partie des phases d’un projet, de la conception jusqu’au déploiement.

Dans le dernier cas on parle souvent de solution BI « On-demand » ou « Self-service » et parfois personnelle si elle est conçu intégralement par l’utilisateur.

La suite d’outils BI traditionnels, et ceux-ci autour de la SQL Server, est composée :

  • Du moteur de base de données : SQL DB Engine
  • De l’ETL : SSIS
  • Du moteur d’analyse multidimensionnel : SSAS
  • Du serveur de rapports : SSRS

Pour la BI « On-Demand », Excel est l’outil de prédilection.

 

_BIOnprem

 

 

 

La BI « Corporate » :

Avec SQL Server et depuis la version 7.0, la plateforme BI Corporate de Microsoft est en perpétuelle évolution toujours dans un but d’être plus robuste, performante et avec de nouvelles fonctionnalités souvent inédites.

 

Aujourd’hui nous en sommes à la version SQL Server 2014 maintenant orientée « Hybrid Cloud » pour faciliter de manière transparente la gestion du stockage, des sauvegardes ou des transferts des données que cela soit sur site ou dans le cloud.

Microsoft a également conçu et développé depuis la version SQL Server 2012 un nouveau moteur d’analyse « In Memory » qui rend plus puissant le traitement des données, les calculs d’agrégats et des formules d’analyse en mémoire, ainsi que la restitution et l’analyse de données autant fines et « Tabulaire » qu’agrégées et en tableau croisé.

De plus, un nouveau type d’index « Column Store Index » permet d’améliorer considérablement les performances de chargement des entrepôts et son requêtage.

Enfin, SQL server permet de réindustrialiser dans SSAS les données provenant des cubes « On-demand », que nous verrons plus loin, conçus avec « Power Pivot », stockées en local dans Excel, de les exposer dans SharePoint pour donner la possibilité à l’utilisateur final de concevoir directement dans un site des analyses ad-hoc grâce au composant de « Data Vizualisation » « Power View » issu de SQL Server et intégré à un service SharePoint 2013.

 

En complément, pour permettre aux utilisateurs de mieux collaborer, la solution SharePoint 2013 permet, en plus de ce qu’on a vu au-dessus avec « Power Pivot » et « Power View »,  la mise en place de portail décisionnel, le partage des classeurs Excel d’analyse, l’intégration des rapports SSRS et l’utilisation des fonctionnalités intrinsèques à SharePoint comme par exemple la GED,  les intranets, les réseaux sociaux d’entreprise… Un petit plus dans SharePoint avec Power View : la possibilité d’exporter les « Dashboards » dans des slides Power Point en conservant l’interactivité et la possibilité de mettre à jour les données au sein d’une présentation.

Un service appelé « Performance Point » qui intègre entre autre l’outil d’analyse racheté à la société « Proclarity » n’est plus mis en avant.

 

_Collab

 

 

Dans la gamme des outils « On-Premise », un nouveau « petit » vient de naitre, il s’appelle « DataZen », il vient d’être racheté par Microsoft, il est fourni gratuitement à partir de la version SQL Server 2008 édition Entreprise avec la Software Assurance.

Comme « Reporting Services », « DataZen » est un outil de restitution, il comporte un « Publisher » pour permettre à l’IT de concevoir des rapports avant les déployer coté serveur.

Par contre, contrairement à « Reporting Services », « DataZen » est un outil orienté « Multi-device » et permet par exemple d’analyser des données sur tout type de tablettes ou smartphones (Windows, iOS et Android), puisque qu’il est compatible HTML5.

De plus, il a été conçu pour faire du « Dashboarding » plus que du « Reporting » opérationnel et fait partie de la gamme d’outil d’analyse visuelle de « Data Visualization ».

Enfin, il offre intrinsèquement la possibilité de faire de la BI collaborative en gérant des flux de commentaires entre les utilisateurs.

Petit bémol, il ne comporte pas comme « Reporting Services » les fonctionnalités de « push mail »  automatisé, l’intégration à SharePoint et le « Data Alert ». Par contre il permet contrairement à Power BI pour le moment de faire des analyses en mode déconnecté.

 

_Datazen

 

 

 

On voit bien que Microsoft a construit au fil du temps une véritable plateforme BI On-Premise solide et avec des évolutions permanentes. Aujourd’hui, IT ou l’utilisateur final bénéficie de toute l’expérience de l’éditeur, de la maturité et la robustesse de sa solution pour mettre en place ou utiliser un système d’information décisionnel d’entreprise accessible depuis partout (tablette, smartphone…) et en mode collaboratif.

 

 

La BI « On-Demand » :

Excel, l’outil idéal pour d’analyse des données « On-demand » a bien évolué. Si on regarde en arrière, avec la version Excel 2003, pour faire de l’analyse avec une connexion OLAP, on se restreignait qu’à un simple tableau croisé dynamique (« Pivotable »). Aujourd’hui avec Excel 2013, on a une véritable solution complète de Business intelligence personnelle avec ses outils permettant à l’utilisateur final de concevoir, comme avec l’IT et SQL Server, sa propre solution en libre-service composée :

  • D’un ETL : Power Query
  • D’un moteur d’analyse et son « Modeler » : Power Pivot
  • De deux outils de « Data Vizualisation » : Power View et Power Map pour l’aspect Géospatial

La philosophie de « Power View » et « Power Map » est de mettre en place comme Power Point un scénario, « Story Boarding » avec des slides, dans le but de faire une présentation issue de sa propre analyse et de faire en quelque sorte « parler les chiffres » ou faire du « Story Telling ».

Cette présentation peut être du « One-Shot » et être exposée qu’une seule fois par exemple à un Codir. D’où l’utilité en la mettant en œuvre rapidement avec Excel, outil très familier de l’utilisateur final, de ne pas passer par des cycles de conception et développement avec des délais qui peuvent parfois être annoncés comme importants par l’IT.

Par contre dans le cas où cette solution nécessite d’être stable, pérenne, sécurisée et partageable, il faut la réindustrialiser de Excel vers SQL Server grâce à des outils d’ « Import » qui existent.

 

_Collab2

 

 

 

La Business Intelligence dans le « Cloud » :

L’évolution des services dans le cloud, notamment autour de l’offre Azure de Microsoft, permet à l’IT maintenant d’une manière transparente de disposer de coûts d’administration mieux maîtrisés. L’infrastructure technique et applicative est plus robuste, performante et évolutive. Enfin les cycles de mise à jour sont plus courts et les opérations de maintenance et l’hébergement sont gérés directement par Microsoft.

 

Trois solutions vont être décrites dans la suite de cet article:

« IaaS »: Infrastructure as a Service

« PaaS »: Platform as a Service

« SaaS » : Software as a Service

 

La solution SaaS Power BI :

Elle permet de concevoir simplement une solution personnelle de Business Intelligence depuis Excel, avec les composants Power Query, Power Pivot, Power View, Power Map. Mais aussi depuis un concepteur dédié appelé « Power BI Designer » ou « On-Line » à partir du site powerbi.com avec un espace dédié et un compte associé.

Office 365 comporte également un site dédié Power BI où sont publiés et visualisés les rapports.

Les utilisateurs se connectent à des sources de données sur site ou dans le cloud pour mettre en œuvre plusieurs rapports et peuvent également les imbriquer simplement dans des « Dashboards ».

Plusieurs connecteurs sont nativement fournis comme par exemple Analysis Services, Salesforce, Univers Business Object, Dynamics CRM, Azure….

 

_CaptureDash

 

 

Une fois la solution publiée sur le site powerbi.com, les utilisateurs pourront depuis un mobile (iPhone et Windows Phone pour le moment) ou d’autres « Devices » se connecter à la solution pour visualiser leurs « Dashboards ».

Des fonctionnalités avancées existent également :

 

– « Q&A ». Une fonctionnalité de requêtage en langage naturelle (uniquement en anglais pour le moment) qui permet de poser des questions Ad-hoc sans connaissances techniques.

– «Data Refresh » permet de planifier la mise à jour des données au sein des rapports.

– « Data Management Gateway » permet de se connecter depuis le cloud à des sources « On-Premise » comme des cubes SSAS.

– « Data Catalog » permet d’exposer les données des rapports dans le cloud pour en faire des sources pour d’autres utilisateurs concevant des rapports.

 

 

powerbi4

 

 

Aujourd’hui Power BI existe en version Preview car il est en perpétuelle évolution, il peut être mis en œuvre et utilisé gratuitement, sauf si vous voulez utiliser les fonctionnalités avancées ci-dessus ou si vous dépassez la capacité limite de 1Go de stockage de données, d’un débit de 10k rows/ heures ou de cycle de rafraîchissement des données de plus de un jour. Dans ce cas le coût actuel est de 9,99 $ par utilisateur/mois.

L’intégration dans l’environnement Microsoft avec un « Designer » très convivial et ergonomique, la conception BI possible depuis Excel , des composants graphiques très riches, des « Dashboards » dynamiques et interactifs, des connecteurs très variés, la publication sur des mobile et tablettes, les cycles MS de mises à jour très réguliers font de Power BI LA solution personnelle et complète pour faire de la « Business Intelligence » « On-demand ».

Face aux solutions concurrentes Tableau Software et Qlik (ex QlikView), Power BI n’a rien à se reprocher.

 

 

La BI Mobile :

Avec les deux solutions « Power BI » et « Datazen » la mobilté cross-plateform est possible. Selon les usages, vous pouvez utiliser l’un des deux outils. « Power BI » est idéal pour le Cloud en mode connecté, gratuit selon certains critères ou avec un système d’abonnement et « Datazen » pour une infrastructure sur site et en mode connecté ou déconnecté, il est inclus dans les licences SQL Server avec la « Sofware assurance » Microsoft.

Une différence importante : pour concevoir un rapport avec Power BI, l’utilisateur n’a pas besoin d’être développeur, il peut le créer dans Excel ou le Power BI Designer. Pour « Datazen », il faut être développeur et être formé sur le « Datazen Publisher ».

 

 

mob

 

 

 

La Business Intelligence dans Azure (IaaS et PaaS) :

Autour des services de données PaaS et de la possibilité d’utiliser des VM dans des infrastructures  IasS ou des « Appliances » va simplifier le travail des administrateurs sur site et offrir des possibilité inédites pour faire par exemple des traitements de « Big Data » ou alors du Machine Learning sur des « Datacenters » mutualisés, ultra-puissants où la mise à jours des services pourra s’effectuer plus simplement.

L’offre IaaS :

Elle offre la possibilité de porter simplement son infrastructure local dans le cloud dans des VM et de pouvoir la superviser à distance et sans avoir à supporter les coûts de maintenance associés.

 

Les appliances APS :

APS ex PDW a été conçue conjointement par Microsoft et des architectes « Hardware » pour offrir la meilleur performance en MPP (Massive Parallel Processing) au sein d’une appliance. Elle offre également la possibilité d’intégrer sous le nom de HDInsigt le moteur NoSQL d’Hadoop pour des traitements « Big Data » et d’offrir au travers du moteur « Polybase » la possibilité de faire des requêtes en langage SQL pour ensuite exposer les données à des fins d’analyse.

 

L’offre PaaS :

Plusieurs  services de données ont été mis en œuvre dans Azure et sont accessibles via son portail. Ceux-ci sont mis à jour régulièrement et certains sont encore en mode « Preview ».

Pour le traitement des « Big Data », Microsoft a intégré dans sa plateforme Azure le moteur Hadoop de la société HortonWorks bien connu pour son architecture de données distribuées, HDFS, sous le nom de « HD Insight ».

Avec HD Insight », sont remodelés, la création de clusters pour la parallélisation des traitements de données, la mise en œuvre des process « Map/Reduce » pour tout type de transformation comme l’agrégation  ou le  nettoyage de données déstructurées comme par exemple le comptage de l’occurrence de mots parmi une multitude de messages comme des tweets, de sms ou flux RSS.

Pour ce faire le service ELT « Azure Data Factory » avec une interface très conviviale, permet d’ordonnancer tous ces traitements, il permet d’extraire des données sources, d’appeler des transformations en passant par des bibliothèques qui s’appuient sur les fonctions « Map/reduce » pour simplifier l’écriture du code. Par exemple « Hive » pour exécuter des traitements SQL DDL (CREATE…) ou DML (SELECT…) ou alors « Pig » pour appeler comme dans un ETL des fonctions de transformations (Agrégation, comptage, boucles,…) et enfin les charger dans des « Data Warehouses ».

Pour la gestion des entrepôts le service « Azure SQL Data Warehouse » peut être utilisé pour mieux exposer ses données à des outils d’analyse comme SSAS ou Power BI.

Dans le cas de besoins d’analyse ou monitoring temps réels et pour une prise de décision rapide, le service « Azure Stream Analytics » permet de traiter des flux de données très volumineux et avec un débit important comme des « Click Streams » provenant de site internet e-commerce par exemple, de les ingérer, les regrouper, agréger ou filtrer grâce à une bibliothèque de fonctions proche du SQL, pour ensuite les exposer à des fins d’analyse avec Power BI ou de Machine Learning. « Azure Stream Analytics » peut s’appuyer sur les services d’Azure de files d’attente « Event Hub » et « Services Bus ».

Enfin avec le service, « Azure Machine Learning », les « Data Scientists » peuvent faire de l’analyse prédictive dans le cloud et exposer leur résultats à des outils front ou des process via à un appel de « Web services ». Ce service permet de créer dans un concepteur dédié, appelé « ML Studio », des unités de traitement appelés expériences comportant une boite à outils pour créer des jeux de données sources, évaluer des modèles, les entrainer ou faire du « Scoring »,  effectuer tout type de transformations en mode graphique comme on le ferait avec SSIS mais d’utiliser aussi le langage R pour le faire et enfin produire les résultats statistiques et de probabilités.

 

 

_Azure3

 

 

 

Pour mettre en œuvre tous ces services il existe un système d’abonnements dont le coût varie selon un ensemble de paramètres comme la volumétrie, le temps, le débit….

 

Vous constatez  que maintenant, avec l’offre PaaS BI dans Azure, il existe un kit de services clef en main de plus en plus matures, robustes et performants pour traiter des données de  Business Intelligence en Back Office surtout pour des process associés au « Big Data » au temps réel et au « Machine Learning ».

 

 

 

A venir :

Comme vous avez pu le constater, le paysage autour de la Business Intelligence Microsoft c’est pas mal transformé depuis ces derniers temps et il continue encore. SQL Server 2016 est annoncé avec de nouvelles évolutions comme l’unification de « BIDS » et « SSDT », l’intégration de HDInsight et Polybase qui n’étaient actuellement que dans APS ou Azure, la possibilité d’intéragir avec Azure Data Factory depuis SSIS, des nouvelles fonctionnalités de « Data Vizualisation » dans SSRS et la possibilité de publier des .rdl dans le site Power BI. Du nouveau également dans SSAS Tabular puisque les relations « many to many » seront supportées et enfin des évolutions autour de SSAS multidimensionnel et MDS.

Concernant les outils « Front », une nouvelle version d’Excel dans Office 2016 est à venir où Power Query va maintenant être natif à Excel, la possibilité maintenant de créer un rapport Power View sur des cubes SSAS multidimensionnels et d’autres fonctionnalités qui seront probablement annoncées bientôt.

 

Ce qui reste à améliorer :

La BI MS a encore de beaux jours devant elle, par contre l’offre peut paraître encore « décousu » et pas forcément simple à comprendre tant au niveau des usages, que du mode de licensing.

Par exemple, si l’utilisateur demande une publication de son modèle « Power Pivot » dans SharePoint, on s’aperçoit que le mode de licencing est complexe et qu’il faut composer entre les licences d’Excel 2013, de SQL Server mais aussi de SharePoint.

De plus, il faut un travail important de pédagogie envers l’utilisateur qui ne comprend pas pourquoi il y a autant d’offres. Par exemple, il peut être perdu avec les outils de « Data Vizualisation »: SSRS, Datazen, Power View…. donc il faut lui expliquer les correspondances qu’il y a entre les usages qu’on peut en faire et les outils associés.

Enfin, dans un composant comme Power View qui est distribué à la fois dans Excel et SharePoint On-premise, il peut y avoir des petits plus qui sont dans l’un mais pas dans l’autre, par exemple l’export vers Power Point qui n’est que dans SharePoint. De plus les composants Power BI d’Excel 2013 et du Power BI Designer ont été découplés mais les fonctionnalités sont beaucoup plus avancées dans le dernier.

 

Pour conclure :

Comme on vient de le voir avec les outils de « Data Vizualisation », les enjeux à venir de Microsoft vont être de les faire converger pour en faire une offre homogène, multi-usage, en plus d’être muti-device et cross-platform.

De même, une convergence entre le cloud et le « On-Premise » doit continuer à s’installer autour de l’hybride : faire en sorte homogénéiser les outils, les échanges de données ou de process inter plateformes, où tout sera transparent pour les développeurs, administrateurs, DBA, Data Manager ou Stewardship, Business Analyst, Power User, et utilisateur final, et où ils ne s’apercevront plus de la différence entre concevoir ou consommer de la BI sur un PC ou un mobile, « On-Premise » ou dans le cloud.

 

 

Sébastien MADAR

MVP SQL Server

 

 

Bouton précédent (Back Button) avec le System Navigation Manager dans les applications (UWP) Windows 10

Dans les nouvelles applications Windows 10, nous avons la possibilité dans la version desktop d’une application d’utiliser le bouton de navigation (bouton précédent) du système qui est placé à coté du nom de l’application dans la barre de titre (comme celui qu’on trouve dans l’application de paramètres:

back

Ce bouton est nativement géré par WinJSContrib, il suffit pour cela d’activer l’option « enableSystemBackButton » :

 WinJSContrib.UI.enableSystemBackButton = true;

Un sample est disponible ici :)

Vous pouvez aussi l’implémenter manuellement. Il suffit d’utiliser la classe SystemNavigationManager et de modifier la propriété appViewBackButtonVisibility pour afficher ou cacher le bouton.

// il faut vérifier la disponibilité de l'api (disponible que sur desktop)
if (window.Windows && window.Windows.UI && Windows.UI.Core && Windows.UI.Core.SystemNavigationManager) {
    Windows.UI.Core.SystemNavigationManager.getForCurrentView().appViewBackButtonVisibility = Windows.UI.Core.AppViewBackButtonVisibility.visible;
    // ou pour cacher le bouton
    Windows.UI.Core.SystemNavigationManager.getForCurrentView().appViewBackButtonVisibility = Windows.UI.Core.AppViewBackButtonVisibility.collapsed;
}

Et pour gérer le clique il suffit de se brancher sur l’événement onbackrequested:

if (window.Windows && window.Windows.UI && Windows.UI.Core && Windows.UI.Core.SystemNavigationManager) {
    var systemNavigationManager = Windows.UI.Core.SystemNavigationManager.getForCurrentView();
    systemNavigationManager.onbackrequested = function (args) {
        if (WinJS.Navigation.canGoBack) {
            WinJS.Navigation.back();
            args.handled = true;
        } else {
            systemNavigationManager.appViewBackButtonVisibility = Windows.UI.Core.AppViewBackButtonVisibility.visible;
        }
    }
}

Pour la version en C# (et ma source) c’est par ici

Mise en oeuvre de l’API Exchange sur un compte Office 365

Introduction

Exchange Web Services (EWS) est une API multiplateforme qui permet aux applications d’accéder aux boites (emails, réunions, calendriers, contacts…) et de les gérer à partir d’Exchange Online dans le cadre Office 365 ou On Premise dans le cadre d’Exchange Server. De plus, cette API permet de stocker ou récupérer des données sur un compte Exchange, offrant une grande souplesse dans la gestion et la manipulation des éléments de messagerie Exchange pour un utilisateur, un groupe d’utilisateurs ou une organisation entière.

Architecture

Les applications EWS peuvent accéder aux éléments d’une boîte en envoyant au serveur Exchange (online ou on premise) une requête dans un message XML basé sur le protocole SOAP. Le message SOAP est incorporé dans un message HTTP lors d’un échange application/serveur Exchange. Capture

Prérequis

  • Un ordinateur exécutant Microsoft Exchange Server 2007 SP1 (ou version ultérieure) ou un accès à Exchange Hosted Services.
  • Framework .Net 3.5 (ou version ultérieure)
  • Assembly de l’API : Microsoft.Exchange.WebServices.dll
  • Visual studio 2008 (ou version ultérieure) avec les composants C#

Connexion au serveur Exchange

Pour établir une connexion à EWS, il faut créer un objet ExchangeService et se connecter au serveur d’accès client Exchange (CAS) en utilisant un compte avec un accès suffisant. Pour se connecter il est nécessaire de renseigner le nom du compte ainsi que son mot de passe. Une fois la connexion établie, toutes actions réalisées sur les éléments Exchange sont accessibles depuis l’objet ExchangeService.

ExchangeService _exchangeService = new ExchangeService(ExchangeVersion.Exchange2013)
{
    Credentials = new WebCredentials("userName", "password")
};

_exchangeService.AutodiscoverUrl("userName@domain.com", RedirectionUrlValidationCallback);

private bool RedirectionUrlValidationCallback(string redirectionUrl)
{
    Uri redirectionUri = new Uri(redirectionUrl);
    return redirectionUri.Scheme == "https";
}

Exchange Autodiscover

Le service Autodiscover d’Exchange fournit à l’application cliente un moyen facile pour configurer automatiquement une connexion avec une entrée utilisateur minimale : adresse de messagerie et mot de passe. Ce service est généralement utilisé pour trouver automatiquement l’URL d’un point de terminaison EWS.

Gérer des éléments Email

La gestion Email nécessite un objet ExchangeService connecté, et il y a six actions principales possibles avec un Email :

  • Création
  • Envoi
  • Transmission
  • Réponse
  • Suppression
  • Sauvegarde

Chacune de ces actions sont implémentées en utilisant un objet EmailMessage.

Création et envoi d’un email

Pour cette fonction, le principe est de créer un objet EmailMessage, remplir les champs, puis envoyer le courriel (avec sauvegarde du message dans le dossier « Eléments envoyés »). Le code C# ci-dessous montre comment créer l’objet EmailMessage et envoyer un email.

EmailMessage message = new EmailMessage(_service)
{
    Subject = "SubjectText",
    Body = "BodyText"
};

message.ToRecipients.Add("user@mcnext.com");
message.SendAndSaveCopy(WellKnownFolderName.SentItems);

Transmission d’un email

Cette fonction s’applique à un objet EmailMessage existant, soit un message reçu et acquis depuis le serveur Exchange, soit un objet préalablement créé. Pour cet exemple, nous utiliserons l’objet EmailMessage précédemment créé. Le code C # ci-dessous montre comment transmettre un message électronique.

string messageBodyPrefix = "This message was forwarded by using the EWS Managed API";
EmailAddress[] addresses = new EmailAddress[1];
addresses[0] = new EmailAddress("user1@netsoft-usa.com");
message.Forward(messageBodyPrefix, addresses);

Répondre à un email

Tout comme la transmission d’un message, la réponse à un message s’applique à un objet EmailMessage existant. Une fois de plus, pour l’exemple nous prendrons l’objet précédemment créé pour appeler la méthode de réponse.

string myReply = "This is the message body of the email reply.";
bool replyToAll = true;
message.Reply(myReply, replyToAll);

Suppression d’un email

Cette fonction s’applique à un objet EmailMessage existant. La méthode dispose de 3 modes de suppression :

  • SoftDelete : L’élément ou le dossier sera déplacé vers la corbeille. Articles et dossiers dans la corbeille peuvent être récupérés.
  • HardDelete : L’élément ou le dossier seront supprimés définitivement
  • MoveToDeletedItems : L’élément ou le dossier seront déplacés vers le dossier « Deleted Items » de la boîte aux lettres.

Dans l’exemple suivant, nous utiliserons le mode de suppression, MoveToDeletedItems.

message.Delete(DeleteMode.MoveToDeletedItems);

Récupération de messages depuis Exchange

Les actions présentées précédemment peuvent être appliquées à une collection d’objets EmailMessage obtenue depuis le serveur Exchange. Pour cela, il faut spécifier le dossier cible et le nombre d’éléments souhaité. L’exemple suivant illustre comment récupérer les mails depuis la boite de reception.

FindItemsResults results = _service.FindItems(WellKnownFolderName.Inbox,
                                                    new ItemView(int.MaxValue));
foreach (EmailMessage msg in results)
{
   // traitement sur chaque message
}

Gérer des éléments Contacts

Comme pour les emails, la gestion des contacts nécessite un objet ExchangeService connecté.

Récupération des contacts depuis Exchange

Pour récupérer les éléments de contact à partir d’Exchange, il faut spécifier le dossier Contacts en utilisant l’énumération WellKnownFolderName et le nombre de contacts à récupérer à partir d’Exchange. Le code C# ci-dessous montre comment récupérer les éléments de contact à partir d’Exchange. Dans ce cas on récupère tous les contacts d’Exchange (spécifier une valeur plus petite réduit le nombre d’articles retournés par le serveur).

FindItemsResults results = _service.FindItems(WellKnownFolderName.Contacts,
                                 new ItemView(int.MaxValue));
foreach (Contact ctc in results)
{
    // traitement sur chaque contact
}

Créer un contact

Le principe est le même que pour les emails, on crée un objet Contact, on remplit les champs puis on sauvegarde le contact.

Contact _contact = new Contact(_service);
_contact.DisplayName = "John Doe";
_contact.EmailAddresses[EmailAddressKey.EmailAddress1] = "johndoe@domain.com";
_contact.Save(WellKnownFolderName.Contacts);

Supprimer un contact

Cette fonction s’applique à un objet Contact existant. La méthode dispose de 3 modes de suppression :

  • SoftDelete : L’élément ou le dossier sera déplacé vers la corbeille. Articles et dossiers dans la corbeille peuvent être récupérés.
  • HardDelete : L’élément ou le dossier seront supprimés définitivement.
  • MoveToDeletedItems : L’élément ou le dossier seront déplacés vers le dossier « Deleted Items » de la boîte aux lettres.

Dans l’exemple suivant, nous utiliserons le mode de suppression, MoveToDeletedItems.

_contact.Delete(DeleteMode.MoveToDeletedItems);

Aller plus loin

Les actions présentées précédemment sont un échantillon des fonctionnalités disponibles dans un contexte Exchange. Il est possible par exemple de :

  • Naviguer entre les différents dossiers de la boite de messagerie et les manipuler
  • Manipuler le calendrier, créer et gérer des réunions ou RDV
  • Manipuler des pièces jointes
  • Gérer des conversations
  • Créer et gérer des alertes ou notifications

Un recueil d’exemples très complet est disponible via le lien suivant et présente une grande partie des fonctionnalités proposées par le service Exchange : https://code.msdn.microsoft.com/office/Exchange-2013-101-Code-3c38582c

Meilleur outils gratuit pour développeur MS BI

Il est possible de trouver de nombreux TOP 10 pour SQL Server sur le net mais la plus par d’entre eux s’adresse à des DBA. En tant que développeur/Consultant MS BI certains de ces outils seront également très utile car il faut toujours analyser et optimiser sa base pour un reporting optimal, par contre de nombreux autres outils plus spécifique à la BI sont également gratuit et très précieux. Voici donc mon TOP des meilleurs outils.

Cette liste me permettra également de retrouver facilement les outils lorsque j’arrive chez un nouveau client pour pouvoir préparer mon poste ;)

Note – Cette liste prend en compte d’avoir déjà une licence SQL Server ainsi qu’Excel, la base de la BI Microsoft.

BIDS Helper
Un add-in pour Visual Studio incluant de nombreuses fonctionnalités comme l’expression highlighter, le dimension usage, le déploiement simplifié…
http://bidshelper.codeplex.com/

MDX Studio
Permet d’écrire et formater des requêtes MDX et analyser les performances des requêtes.
http://www.sqlbi.com/tools/mdx-studio/

DAX Studio
Un add-in Excel et SSAS – Permet d’écrire et formater des requêtes DAX et analyser les performances des requêtes.
http://www.sqlbi.com/tools/dax-studio/

OLAP PivotTable Extensions
Un add-in Excel permettant d’ajouter des fonctionnalités à un TCD connecté à un cube SSAS
https://olappivottableextend.codeplex.com/

SSMS Add-In
Permet d’ajouter de nombreuses fonctionalitées à SSMS
SSMS Boost: http://www.ssmsboost.com/
SSMS Tool Pack: http://www.ssmstoolspack.com/
DbForge SQL: http://www.devart.com/dbforge/sql/sqlcomplete/

SSMS – SQL Execution Plan
Améliore grandement l’interface du plan d’exécution qui n’a pas beaucoup évolué dans le plan d’explorer SSMS
https://www.sqlsentry.com/products/plan-explorer/sql-server-query-view

SSMS – SQL Search
Permet entre autre de rechercher un objet ou du texte dans une base de donnée. Egalement de voir les dépendances d’un objet sous forme graphique et de renommer un objet ainsi que toutes ces dépendances.
ApecSQL Search: http://www.apexsql.com/sql_tools_search.aspx
Red Gate SQL Search: http://www.red-gate.com/products/sql-development/sql-search/

SSMS – SQL Server Management Data Warehouse
http://msdn.microsoft.com/en-us/library/dd939169(v=sql.100).aspx

Database Comparaison
Permet de comparer la structure de 2 bases de données très facilement
DBComparer: http://dbcomparer.com/Download/Default.aspx

Notepad++
Très pratique pour rechercher du texte comme un nom d’objet dans les packages SSIS, (la recherche dans SSDT n’étant pas intuitif)
Permet de bien formater en 1 clique une requêtes SQL ainsi que convertir la requête dans un autre langage comme VB.Net (pour l’inclure en expression dans SSRS par exemple)
http://notepad-plus-plus.org/fr

Maintenance Solutions
Maintenance des bases, Back up, intégrité, Statistique..
SQL Server Maintenance Solution: https://ola.hallengren.com/

Maintenance des Index et Defrag
http://www.brentozar.com/blitzindex/
http://sqlfool.com/2011/06/index-defrag-script-v4-1/

I/O capacity Benchmark
Microsoft SQLIO Disk Subsystem Benchmark Tool: http://www.microsoft.com/en-us/download/details.aspx?id=20163

Trace
Permet de gérer et visualiser plusieurs traces
http://www.scalesql.com/cleartrace/default.aspx

DMV – Data Management Views
Liste des DMV pour les Cubes SSAS: https://bennyaustin.wordpress.com/2011/03/01/ssas-dmv-queries-cube-metadata/

Documentation Cube Automatisée
Parce que la documentation c’est notre passion
http://www.purplefrogsystems.com/blog/2010/09/olap-cube-documentation-in-ssrs-part-1/
https://sqlbits.com/Sessions/Event8/Automating_SSAS_cube_documentation_using_SSRS_DMV_and_Spatial_Data
http://www.ssas-info.com/analysis-services-tools/1365-ssrs-reports-to-document-ssas-2008-db-structure-using-dmvs

Minimum install to execute SSIS Packages

A couple of days ago one of my client asked me what needs to be install on the ETL server in order to execute SSIS Packages. My first though was to install the SSIS instance but after some other thoughs i decided to look into it in more details.
Here is a summary of my research on the subject – the goal was to install the minimum of component as possible as we are in a PCI environnent which must be highly secure.

dtexec is the command prompt utility that needs to be install to run your SSIS packages.
dtexec is installed when you install SQL Server DB Engine. However this is *NOT* the full version of dtexec. It is only install in order to use:
– Import and export data wizard (within SQL Server)
– Support maintenance plans (Since SQL Server 2005 sp2 or SQL Server 2008 CU1/sp1, it is not necessary to install SSIS to create maintenance plans)
=> So You *cannot* run your own SSIS packages with this version of dtexec
In order to fully use dtexec you need to install « Integration services » feature. Installing this feature install the necessary binaries (and also the service) to run your own packages.

Note:
– dtexecui is not install when installing only Integration services (it’s a client component tool)
– You can stop the SSIS Service to run packages – the SSIS service only extends the functionality of SSMS
– You also might need to install the « client Tools connectivity » feature tools as well and any other components you might need to connect to your sources.
Client Tools includes components for communication between clients and servers, including network libraries for DB-Library, OLEDB for OLAP, ODBC, ADODB, and ADOMD+

64-Bit consideration
In a 64-Bit computer you need to install BIDS or SSMS in order to also get dtexec in 32-Bit
So when installing SSIS in a 64-bit computer to ensure a 32-bit installation is also required, you must install SSIS and BIDS. Installing SSIS and not BIDS will only install the 64-bit engine.
If you have a 64-Bit computer with both 32-Bit and 64-Bit dtexec installed:
– when using dtexecui it will use the 32-Bit version (it’s a 32-Bit tool)
– when using the dtexec it will use the 32-Bit by default (because the directory path for the 32-bit version appears in the PATH environment variable before the directory path for the 64-bit version)
– when using SQL Agent it will use the 64-Bit by default ( because SQL Server Agent uses the registry, not the PATH environment variable, to locate the correct executable for the utility)

Conclusion:
You do need to install the « Integration services » feature in order to run SSIS packages. This feature is enough to be installed on its own to run packages and you can even stop the related service. (you do not need the DB Engine services feature).
However, if you have a 64-Bit computer and you need to run packages in 32-Bit mode then you also need to install BIDS or SSMS (which install dtexec 32-Bit)
MS – SQL Server installation features: https://technet.microsoft.com/en-us/library/ms143786.aspx
MS – 64 bit Considerations for Integration Services: https://msdn.microsoft.com/en-us/library/ms141766.aspx

Writing Windows 10 App Services in JavaScript

What is an App Service ?

Windows 10 introduce a bunch of new ways for applications to communicate with each others. One way is to implement « App Services ». App Services are a request/response model where one app can call a service located within another app. App Services enable communication between apps, but also with the system. If you want to implement interactive scenarios with Cortana, you will have to implement an App Service to provide data to Cortana.

If you’re the kind of people who prefer code than blabla, you may head directly to the github repository with sample applications.

App Services use the same infrastructure as BackgroundTasks, and most of the logic and implementation details still applies. It means that when your service is called, you don’t have the whole application running, but only your service. It also means that your application don’t communicate directly with your App Service. For example, your application does not get notify when your service is called, or terminated.

In all resources I can found (Build session, Channel 9 videos, samples, …), App Services are implemented in C#. Those resources are really helpfull (especially this one on Channel 9), but if (like me) you are writing apps in HTML and JavaScript, it is likely that you prefer writing those services in JavaScript and share business code with the rest of your application. Porting C# resources to JavaScript is actually very easy. In this post, we will dive into implementing an App Service in Javascript, based on a C# sample from Microsoft Virtual Academy.

Show me some code !

In a Windows Web Application (Windows application written in HTML and JavaScript), a background task, therefore an App Service, should be thought of as a special Web Worker (no postMessage with it unfortunately). It’s a standalone JavaScript file that will get caught independently by the system.

The first step to implement your App Service is to create this file. As with web workers, you could use « importScripts » to reference any code you want to share between your app and the service. Be aware that, like with Web Workers, there is no « window » or « window.document » objects inside your background task or app service. The global context points to a completely different beast, and there is no DOM.

Inside your task or service, you will access to the current instance of the BackgroundTask object using WinRT APIs, and get a deferral on it to control the lifecycle of your service. As with background task, your service can also be canceled by the system if it needs to recover memory, or if battery is running low on the device. Your task instance provide a « cancel » event that will get caught is such cases.

A minimalistic background task/app service would look like this

var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;
var triggerDetails = backgroundTaskInstance.triggerDetails;
var bgtaskDeferral = backgroundTaskInstance.getDeferral();

function endBgTask() {
    backgroundTaskInstance.succeeded = true;
    bgtaskDeferral.complete();
    bgtask.close();
}

backgroundTaskInstance.addEventListener("canceled", function onCanceled(cancelEventArg) {
    return endBgTask();
});

Now we must declare this file as an App Service. For that, we must add an extension to our application in its manifest, pointing to our javascript.

<Applications>
    <Application Id="App" StartPage="default.html">
        ...
        <Extensions>
            <uap:Extension Category="windows.appService" StartPage="js/appservice.js">
                <uap:AppService Name="MyJavascriptAppService"/>
            </uap:Extension>
        </Extensions>
    </Application>
</Applications>

As you can see, we provide the path to our JavaScript file, and we are giving a name (MyJavascriptAppService) to the App Service.

Now we must implement the service logic. To do that, we will check the trigger details on our background task, and register for a request event. When the event gets activated, we received an App Service request. This request will contains a message (with request arguments), and a sendResponseAsync method to reply to the caller. On both sides, the values in the request and in the response are provided with a ValueSet object.

//check that the app service called is the one defined in the manifest. You can host
//multiple AppServices with the same JavaScript files by adding multiple entries in the application manifest
if (triggerDetails && triggerDetails.name == 'MyJavascriptAppService') {
    triggerDetails.appServiceConnection.onrequestreceived = function (args) {
        if (args.detail && args.detail.length) {
            var appservicecall = args.detail[0];
            //request arguments are available in appservicecall.request.message
            var returnMessage = new Windows.Foundation.Collections.ValueSet();
            returnMessage.insert("Result", 42);
            appservicecall.request.sendResponseAsync(returnMessage)
        }
    }        
}

Calling your App Service

The app calling your service can be any app. If you want to restrict access, you will have to implement your own security mecanism. As you may have understood, the caller and the callee doesn’t have to be written in the same language. You can call a service written in C++ from a JavaScript app. All data are passing throught Windows APIs.

Calling the app service require some arguments, the caller should provide the package family name (PFN) of the target application, and the name of the App Service (as declared in the target’s app manifest). If you don’t know your PFN, you can get it through WinRT APIs by calling « Windows.ApplicationModel.Package.current.id.familyName » in your service application.

Using the PFN and service name, you will first get a connection to your App Service, and register to the « serviceclosed » event to be notified if your service terminate.

function getServiceConnection(){
    var connection = new Windows.ApplicationModel.AppService.AppServiceConnection();
    connection.appServiceName = "MyJavascriptAppService";
    connection.packageFamilyName = "...your PFN here...";

    return connection.openAsync().then(function(connectionStatus){
        if (connectionStatus == Windows.ApplicationModel.AppService.AppServiceConnectionStatus.success) {
            connection.onserviceclosed = serviceClosed;
            return connection;
        }
        else {
            return WinJS.Promise.wrapError({ message: 'service not available' });
        }
    });
}

Once you get a valid connection, you will be able to send requests to the service

function callService(){
    return getServiceConnection().then(function (connection) {
        var message = new Windows.Foundation.Collections.ValueSet();
        message.insert("Command", "CalcSum");
        message.insert("Value1", 8);
        message.insert("Value2", 42);

        return connection.sendMessageAsync(message).then(function (response) {
            var e = response;
            if (response.status === Windows.ApplicationModel.AppService.AppServiceResponseStatus.success) {
                document.getElementById('result').innerHTML = 'calculated ' + response.message.Result;
	                
                return response.message;
            }
        });
    });
}

And voilà ! you’re ready to go. A picture is worth a thousand words, so I put a sample with service and caller apps on github for you.

Debugging your service

If you grab the sample, you can see how easy it is to debug your service. If you configure the solution to run both caller and callee on debug, you can set breakpoints in your app service. If you don’t want to run the full service app, you could also edit the properties of the project hosting the service. In the debugging section, you could set « Launch Application » to false. In that case, when you run debug for both apps, you will only see the caller application starting, but your breakpoints in the app service will get called appropriately.

Porting Windows API calls from C# to JavaScript

Windows 10 is still in preview, and as of this writing, a lot of the samples available are written in C#.
The fact that samples are not available in JavaScript does not means that the feature is not available in JavaScript. The only things that may not be available is all topics about XAML controls, like the new InkCanvas, the RelativePanel, and so on. All code related to Windows APIs may be used in JavaScript.

Porting C# code to JavaScript is actually straightforward, especially if you are familiar with WinRT development. Windows APIs (aka WinRT) are projected in all available languages (C++, C#, and JavaScript), using each language paradigms. So, moving C# code to JavaScript is just about changing variable names to lowercase (ex « connection.SendMessageAsync() » => « connection.sendMessageAsync() »), or use the « on… » syntax for event. For example « connection.RequestReceived += someEventHandlerCallback » will convert to « connection.onrequestreceived += someEventHandlerCallback ».

As you can see, this is really easy…

[NCrafts] Continuous delivery, the missing parts

Paul Stack commence cette présentation avec une définition du Continuous Delivery (déploiement continue), qui est composé de principes et de pratiques pour construire, tester , deployer plus rapidement et plus fréquemment.

Les principes:

  1. Le processus doit être répétable et fiable
  2. Tout tâche soit être automatisée
  3. Si quelque chose est difficile, le faire plus souvent
  4. Tout mettre dans un contrôleur de source
  5. Le done (terminé) s’applique à une fonctionnalité livrée
  6. La qualité doit aussi être présente dans le code
  7. Tout le monde est responsable du processus de déploiement
  8. Le processus doit être constamment éprouvé

Lire la suite

Suivre

Recevez les nouvelles publications par mail.

Rejoignez 39 autres abonnés