Microsoft | BI experience

Archive pour la catégorie ‘Microsoft’

MSSQL 2008R2 Slowly Changing Dimension et la volumétrie

Mardi 15 mai 2012

En voulant mettre en place le chargement de dimension avec le principe du SCD. Je me suis tout de suite tourné vers les composants proposés dans SSIS

scd1

Pour petit rappel, vous trouverez sur ce lien : sqlservergeeks.com l’explication des différents types de SCD possible à faire. Dans cet article nous parlerons du type2.

Votre dimension cible devra contenir 3 champs :

  • [DMXXXX_SCD_DATE_DEBUT]
  • [DMXXXX_SCD_DATE_FIN]
  • [DMXXXX_SCD_FLAG_ACTIF]

Voici le résultat que cela donne en passant par l’assistant du composant :

scd2

Ci dessous voici ce que l’on a mis dans l’assistant pour le SCD de type 2: scd31

Le package global aura donc la forme ci dessous :

scd4

1 - il y a un update pour toutes les colonnes sauf sur la colonne qu’on étudie en SCD (afin de prendre en compte de changement de libellés par exemple) : DMXXXX_ID
2- Dans le Load il y a le SCD qui permettra d’ajouter les nouvelles lignes et d’inactiver les anciennes à une date donnée.

Cette méthodologie est possible quand la volumétrie n’est pas très importante. Si votre volumétrie est trop importante et que vous voulez garder la démarche du SCD, il faut passer en full SQL :

scd52
1- Garder la démarche du chargement d’un TMP_DMXXXX afin de préparer le chargement des différents ID, les jointures avec les dimensions…
2- Update de tous les champs sauf des champs suivants (pour prendre en compte les changement de libellés, etc) :

  • DMXXXX_ID
  • DMXXXX_SCD_DATE_DEBUT
  • [DMXXXX_SCD_DATE_FIN]
  • [DMXXXX_SCD_FLAG_ACTIF]
  • DMXXXX_DATE_CREATION

Avec une requête du type :

UPDATE MAJ
SET
MAJ.[DMXXXX_LIBELLE] = TMP.XXXX_LIBELLE
,MAJ.[DMXXXX_DATE_DERN_MAJ] = TMP.XXXX_DATE_DERN_MAJ
FROM
DMXXXX MAJ INNER JOIN
(
SELECT
[DMXXXX_ID]
,DMXXXX_XXXX_ID
,[DMXXXX__LIBELLE]
FROM DMXXXX
) as SRC ON SRC.[DMXXXX_ID] = MAJ.[DMXXXX_ID]
INNER JOIN
(
SELECT
[XXXX_ID]
,[XXXX_LIBELLE]
FROM [STAGING].[dbo].TMP_DMXXXX
) as TMP ON TMP.[XXXX_ID]= SRC.[DMXXXX_XXXX_ID]
WHERE TMP.XXXX_DATE_DERN_MAJ <> SRC.DMXXXX_XXXX_DATE_DERN_MAJ

3- Ensuite on insert les nouvelles lignes c’est-à-dire les lignes qui ont une ID nouveau. En initialisant les champs suivants :
nouvelle_ligne

Dans le derived column voici ce que l’on a ajouté : scd6

4- on insert ensuite les lignes qui ont un même Id (XXXX_ID) et un XXXX_monchamp (le champ sur lequel je souhaite faire mon historisation) différent. (le data flux reste le même que dans le 3- avec une jointure en plus au niveau du lookup pour récupérer juste les lignes qui ont le même ID métier et un ID du champ à historiser différents. Dans le derived column voici les infos qu’on y a mises :
scd71

5 -Et ensuite il faut desactiver les enregistrements les plus anciens avec une requête du type :

UPDATE MAJ
SET
MAJ.DMXXXX_SCD_FLAG_ACTIF = 0,
MAJ.DMXXXX_SCD_DATE_FIN = GETDATE()
FROM
DMXXXX MAJ INNER JOIN
(
SELECT
k.DMXXXX_XXXX_ID,
MIN(k.DMXXXX_SCD_DATE_DEBUT) as DMXXXX_SCD_DATE_DEBUT
FROM DMXXXX k
WHERE EXISTS (
SELECT
t.DMXXXX_XXXX_ID
FROM
(
SELECT
DMXXXX_XXXX_ID,
DMXXXX_SCD_FLAG_ACTIF ,
COUNT(*) as nb
FROM DMXXXX
WHERE  DMXXXX_SCD_FLAG_ACTIF = 1
GROUP BY
DMXXXX_XXXX_ID,
DMXXXX_SCD_FLAG_ACTIF
having count(*)>1
) as t
WHERE t.DMXXXX_XXXX_ID = k.DMXXXX_XXXX_ID
)
GROUP BY
k.DMXXXX_XXXX_ID
)  as tb_finale ON tb_finale.DMXXXX_XXXX_ID = MAJ.DMXXXX_XXXX_ID
and tb_finale.DMXXXX_SCD_DATE_DEBUT = MAJ.DMXXXX_SCD_DATE_DEBUT

Et vous, comment faites vous vos chargements de dimensions?

ODBC, OLE DB, ADO et ADO.NET ça vous parle?

Jeudi 12 avril 2012

Nous avons plusieurs types de connexion à la base de données. Mais quelle est la différence entre ces différents types? Et comment choisir le type de connexion dont nous avons besoin?

Tout d’abord voici un bref récapitulatif de leur apparition :

  • 1992 : création de l’ODBC
  • 1996 : création de l’OLE DB et de l’ADO
  • 2002 : création d’ADO.NET

Définitions :

ODBC : (Open Database Connectivity) est une interface de programmation d’application (API) universelle qui permet de se connecter à des bases de données  ayant obligatoirement l’apparence d’une base de données relationnelle. Les données non structurées ne pourront donc pas être traitées avec de l’ODBC.

Caractéristiques générales :

  • performant
  • codage avec l’API ODBC difficile
  • moins robuste que l’ADO par exemple

Son mode de fonctionnement est assez simple : l’API ODBC employé par une application va faire appel à un gestionnaire de drivers qui va lui même appeler le bon driver afin de récupérer le résultat de la demande envoyée par l’application.

OLE DB et ADO:

  • l’OLE DB qui est un fournisseur de données aussi bien sur les bases de données relationnels que non relationnelles
  • et l’ADO une surcouche entre l’OLE DB et l’application. L’ADO (ActiveX Data Object) encapsule et rend virtuellement accessibles toutes les fonctionnalités de OLE DB.

l’OLE DB et l’ADO sont basés sur COM (Component Object Model : application binary interface ). Ces interfaces, permettent le dialogue entre différents programmes.

Grâce au framework COM, les développeurs bénéficient d’un support riche et homogène de fonctionnalités de conception d’accès aux données dans  tous les langages Microsoft de développement :  (VB, C++, VBScript, J++…)

Le tandem OLEDB et ADO  propose donc une combinaison :

  • performante
  • codage facile pour les développeurs
  • robuste

ADO.NET (ActiveX Data Objects for .NET):

Comme vous le savez surment le framework COM est voué à disparaitre au profit de FRAMEWORK.NET.

A partir de là Microsoft a développé l’ADO.NET. Il regroupe à la fois le fournisseur de données et la surcouche permettant l’accès aux résultats du fournisseur de données. Ce nouveau framework corrige plusieurs problématiques que les développeurs rencontraient lors de développements avec ADO. Je vous laisse voir ces évolutions sur developpez.com

Pour conclure plusieurs sources laissent à croire que l’OLE DB et l’ADO sont voués à disparaitre au profit de l’ADO.NET.

Du coup pensez y pour vos prochains développements!!

BI personnelle ou BI d’entreprise?

Jeudi 9 février 2012

Une des sessions des techdays m’a permis de mieux comprendre l’utilisation  des cubes (AS), du modèle tabulaire et de powerpivot.

Petit historique :


Année Outil Technologie
1998 OLAP services SQL Server 7.0
2000 Analyse services (avec ajout d’une brique datamining) SQL Server 2000
2005 Analyse services UDM (KPI, XMLA moteur plus robuste) SQL Server 2005
2008 pas d’évolution particulier de ces outils SQL Server 2008
2008 apparition de l’outil powerpivot SQL Server 2008R2
2012 apparition du modèle BISM SQL Server 2012

Microsoft propose donc l’exploitation de 3 outils : Powerpivot, cube OLAP, modèle tabulaire. Mais dans quel cas utiliser l’un ou l’autre?

La BI Personnelle :

Si les utilisateurs finaux ont besoin de croiser des données (pour un volume allant jusqu’à 4Go) mais qu’ils n’ont pas de budget ni le temps de lancer un projet informatique, l’outil PowerPivot est la solution. L’utilisateur pourra télécharger gratuitement un addin pour Excel ou s’il a Sharepoint, utiliser Excel Services pour le faire (en installant powerpivot for sharepoint). Grâce au moteur Vertipaq, des données chargées dans un fichier Excel seront montées en mémoire. L’utilisateur fonctionnel aura ensuite accès aux fonctionnalités d’Excel et plus avec le langage DAX.

La version 2012 de powerPivot a certaines fonctionnalités en plus, notamment le fait de pouvoir faire:

  • des mesures calculés
  • des hiérarchies (juste au niveau de la représentation des données donc moins puissant que dans AS)
  • des KPI

La BI d’Entreprise :

Pour une exploitation des données plus sécurisé, plus contrôlé, plus robuste un projet  de type BI d’entreprise pourra être mis en place.

2 possibilités s’offrent à nous :

  • mettre en place des cubes multidimensionnels avec l’exploitation du langage MDX
  • mettre en place des modèles tabulaires avec l’exploitation du langage DAX.

Le cube multidimensionnel :

Tout d’abord il faut savoir que les cubes AS ont un stockage physique et une mise en cache. Ce système peut accueillir des Téras de données. Cette technologie permet de gérer des navigations dans les données complexes et répond à des demandes intenses d’ aggrégations de  chiffres.

Exemple : j’ai un plan comptable. Certains indicateurs s’additionnent, d’autres se soustraits et d’autres ne sont pas pris en compte (Le parent n’est pas forcement la somme des enfants. Le petit nom anglais : CustomRollup, UnaryOperations). L’agrégation des données pourra donc être très précise et paramétrée. De plus on pourra donner aux utilisateurs la possibilité d’ écrire directement dans le cube (writeBack) pour faire des simulations. D’autres fonctionnalités singulières au cube AS : Default Members, NameSets, Scope Assignments, relations plusieurs à plusieurs vous feront pencher vers l’utilisation d’un cube multidimentionnel.

Le modèle tabulaire :

Concernant la couche sémantique BISM ou autrement dit le modèle tabulaire, si vous avez des contraintes de temps pour le développement un peu court, que le volume de données ne dépassent pas une centaine de giga, que les utilisateurs ne connaissent pas bien leur chemin d’analyse, cette technologie vous conviendra.

Cette technologie sera beaucoup plus performante pour les demandes de chiffres sur une granularité fine par les utilisateurs. En effet le cube AS sera plus performant sur des demandes d’aggrégations et beaucoup moins performant quand l’utilisateur voudra aller dans le détail de l’information. C’est dans ces cas d’utilisation que le modèle tabulaire prendra tout son sens.

Monter un modèle tabulaire ressemble au montage d’un powerpivot.

Ce modèle propose un partitionnement (même si le stockage des données se fait en mémoire vive) car un modèle tabulaire se process comme un cube multidimensionnel. On pourra mettre en place une sécurité comme sur AS mais en un peu moins poussée. Les démarches de développement sont sensiblements pareil au développement d’un cube AS.

Et il ne faut pas oublié que le modèle tabulaire peut être la source de l’outil powerView dans Sharepoint  qui permet de faire des jolis dashboards  et sur un powerPoint de continuer à naviguer dans les données même après export de sharepoint.

J’espère avoir bien retransmis ce que j’ai pu apprendre lors de cette session des techdays. J’attends vos retours!

Configurer une connexion Oracle pour Microsoft SQL Server

Dimanche 8 janvier 2012

Je ne sais pas si vous avez déjà essayé de connecter sql server à une base de données Oracle mais ce n’est pas si simple que ça…

contexte :

  • Il y a une machine1 avec sql server d’installé sur du windows 2008 64 bits
  • Il y a une machine2 avec la base de données oracle d’installé sur du windows 2008 64 bits

première étape télécharger les drivers oracle : les clients oracle.

Astuce 1 : le site d’Oracle est horrible dès que l’on veut trouver quelque chose c’est comme si on cherchait une aiguille dans une botte de foin. Donc voici les liens de télechargement du client 32bits et du clients 64 bits

Astuce 2 : il faudra installer les deux et respecter bien l’ordre d’installation : client 32 bits puis client 64 bits.

Astuce 3 :malgré le fait que nous soyons sur du 64 bits SSIS pour se connecter ira regarder le client 32 bits. Donc il faudra configurer les listener.ora et tnsname.ora pour les deux clients 64 bits et 32 bits.

Après avoir configurer vos fichiers dans répertoire Oracle>product>NETWORK>ADMIN>clien_X

vous pourrez vérifier votre accès à la base de données en ouvrant une fenêtre cmd et en tapant tnsping servicename.

exemple : tnsping orcl

si cela fonctionne vous pourrez dans SSIS utiliser les providers suivants sans problème:

  • Microsoft DB provider for oracle
  • Oracle provider for OLEDB

En espérant que ce post évite à quelqu’un de perdre trop de temps sur ce genre de problématique, j’attends votre opinion sur la chose…N’hésitez pas commentez!

Microsoft Office Visio et la modélisation

Mercredi 12 novembre 2008

Pour mon projet, j’ai voulu utiliser Visio afin de modéliser les bases de données source ainsi que mes datamarts. Et lorsque j’ai voulu exporter mes dimensions et mes tables de fait soit en script SQL ou par un export directement en base…castastrophe!

Je me suis rendue compte que la version “Professional edition” que je possédais ne permettait pas de faire cette manipulation…

D’après le site office.microsoft.com il n’ y a que la version : Enterprise Architect edition qui permette une connexion à la base de donnée et un export direct des tables…

J’ai donc été vraiment déçue de ce produit pour une utilisation au sein d’un projet décisionnel.