BI experience

24 juin 2013
par maryam khiali
0 Commentaires

SSAS : The ‘KeyColumns’ #0 has NullProcessing set to ‘UnknownMember’

Je pense que si vous rencontrez cette erreur c’est surment parce qu’un utilisateur vous a demandé d’enlever de vos dimensions le membre « UnKnownMember ».

Vous avez surment appliqué ce genre de procédure : geekepisodes.com et voici l’erreur qui s’affiche pour chaque dimension modifiée: « The ‘KeyColumns’ #0 has NullProcessing set to ‘UnknownMember ».

Alors la solution est :

  • d’aller sur chaque « key » de chaque dimension d’aller dans les propriétés et de faire :Il faut donc mettre la propriété NullProcessing à « Automatic »
  • Ensuite des erreurs vont subsiter. Il faut enlever les dimensions et les remettre
  • re-vérifier son dimension usage
  • et reprocesser le tout

Commentez si vous avez d’autres techniques sur le unknowMember…

21 juin 2013
par maryam khiali
0 Commentaires

Adoption du big data et du cloud computing?

En faisant ma veille technologique, je suis tombée sur le site du gartner qui présente « une courbe d’adoption des technologies » très intéressante :

Pour interpréter cette courbe, vous pouvez vous aider du graphe, ci-dessous, trouvé sur ce site :

On peut donc constater que l’utilisation du big data et du cloud computing sera vraiment démocratisée d’ici 2 à 5 ans. Il nous reste encore un peu de temps pour nous préparer et acquérir les connaissances nécessaires…

2 mai 2013
par maryam khiali
0 Commentaires

Astuce F7 analysis services

Je ne sais pas comment vous faites actuellement pour scheduler le process de vos cubes, mais voici une solution parmi d’autres :

1- Créer un lot SSIS dédié
2- Utiliser le composant : Analysis Services Execute DDL Task

3- Déclarer une connexion SSAS dans mon lot
4- dans le composant, indiquer :

  • la connexion SSAS précédement créée
  • ensuite pour mettre le bon script XMLA, c’est à ce moment précis que l’astuce F7 intervient :

il faut aller
dans management studio >sur l’instance OLAP > sur le cube que vous voulez processer>se mettre sur le dossier Dimension et appuyer sur F7.

Vos dimensions s’affichent dans l’ « Objet Explorer Details ». Il ne vous reste plus qu’à toutes les séléctionner et à faire clique droit process. Dans la fenêtre qui s’affiche à vous cliquez sur « Script » et prendre « Script action to new query window ».

Vous pouvez maintenant récupérer le script XMLA qui s’affiche et le mettre directement dans le composant SSIS :

Faire la même chose avec la partie cube, et voilà! Votre lot de process est fait…

Pour scheduler le process du cube, il ne restera qu’à créer un job avec un step pointant sur ce lot après mise à jour de votre datawarehouse, de vos datamarts.

Et vous, comment faites vous actuellement?

25 avril 2013
par maryam khiali
2 Commentaires

Astuce curseur

Dans certains cas, nous avons besoin des curseurs pour boucler sur une information afin de faire un traitement en masse.

Voici 2 cas ou j’ai eu besoin d’utiliser des curseurs avec SQL server:

CAS 1: je devais, pour répondre aux besoins d’une présentation, simuler des données. A partir d’une table ou j’avais des utilisateurs, j’ai alimenté une table répertoriant des connexions. Le but étant de voir comment les utilisateurs se connectent à une plateforme.

DECLARE db_cursor CURSOR
FOR SELECT id, userid FROM moodle_mdl_log
WHERE userid = 0  and module = ‘login’

DECLARE @id int
DECLARE @userid int

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @id, @userid

WHILE @@FETCH_STATUS = 0
BEGIN
/*PRINT @id*/
UPDATE moodle_mdl_log
SET userid = (SELECT TOP 1 id FROM dbo.randuser order by NEWID())
WHERE CURRENT of db_cursor
FETCH NEXT FROM db_cursor INTO @id, @userid
END

CLOSE db_cursor
DEALLOCATE db_cursor

CAS 2 : A un instant t du projet, la base de production a été copiée en recette : des données de production se sont donc retrouvées en recette. Les utilisateurs m’ont alors demandés de tout vider et de tout recharger. Pour vider les tables en masse j’ai donc utilisé un cureur.

DECLARE db_cursor CURSOR
FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE Table_Type=’BASE TABLE’ and TABLE_NAME NOT IN (‘xxx’,'yyy’) and TABLE_NAME NOT LIKE (‘Tmp%’)
DECLARE @table varchar(50)
OPEN db_cursor

FETCH NEXT FROM db_cursor INTO @table
WHILE @@FETCH_STATUS = 0
BEGIN
/*PRINT @id*/
exec(‘TRUNCATE TABLE ‘ + @table)
FETCH NEXT FROM db_cursor INTO @table
END

CLOSE db_cursor
DEALLOCATE db_cursor

Rien d’extraordinaire pour ce post mais ça pourra peut être servir…

19 février 2013
par maryam khiali
0 Commentaires

Connexion MySQL avec SSIS

Je ne sais pas si vous avez déjà essayé mais créer une connexion SSIS ça peut être laborieux…Alors comme tout le monde, j’ai suivi des procédures comme celle décrite sur ce blog.

Donc voici la configuration que j’avais :

  • SQL server 2008R2 avec le suite BI
  • MySQL server 5.5
  • installation du connecteur-net 6.6.4.msi
  • installation mysql connector odbc 5.2.3-win32.msi ( car je sais que le 64bits ne fonctionnera pas)
  • projet SSIS a pour propriété runtime64bits à false.
  • création d’une connexion ODBC à traver odbcad32.exe présent dans C:\windows\sysWOW64. Cette connexion fonctionne dans connexion system.

Dans SSIS que je créé une connexion ADO.net
-avec le provider odbc data provider
-ou avec MySQL data provider
Quand je test ma connexion, lors de la création, il me dit « connexion sucessfull ».

Tous les blogs et sites montrent que cette procédure fonctionne. Seulement, bien-sûr, je n’ai pas été dans ce cas… En effet lorsque:

  • je faisais glisser une composant d’input j’avais des erreurs (cf ci-dessous)
  • je voulais restester ma connexion j’avais des erreurs (cf ci-dessous)

Alors la solution que j’ai trouvé est :

  • de ne pas m’occuper du message d’erreur au niveau de ma connexion
  • et lorsque je faisais glisser l’input, de ne pas passer par l’interface graphique du composant habituel.

Je suis donc passée au niveau du composant d’input (ADO NET SOURCE) par

  • « show advanced editor » pour indiquer la bonne connexion

 

 

  • et pour entrer la requête je suis passée par l’onglet  « properties » (en indiquant les champs car si je fais un SELECT * FROM matable il ne me trouvait rien)

 

et lors de l’exécution ça a fonctionné… Je ne sais pas si ça aidera quelqu’un un jour mais voilà comment je m’en suis sortie!