Récupérer le nom des jobs relatifs aux abonnements Reporting Services.

by Olivier Moreau 5. octobre 2011 23:17

Le code SQL ci-dessous permet de retrouver les noms des jobs des abonnements Reporting Services.
Code bien utile quand on doit retrouver un abonnement parmi des centaines pour le rejouer à la demande.

Script pour le rejouer :

EXEC msdb..sp_start_job 'GUID DU JOB'

 

Script pour retrouver le job :

SELECT 
	ReportSchedule.ScheduleID AS JOB
	,CATALOG.Name AS Nom_Rapport
	, Subscriptions.Description AS Description
	, Subscriptions.LastStatus as Statut_Abonnement
	, Subscriptions.LastRunTime as Derniere_Execution
FROM 
	CATALOG
		JOIN Subscriptions  ON CATALOG.ItemID = Subscriptions.Report_OID
		JOIN ReportSchedule ON CATALOG.ItemID = ReportSchedule.ReportID
							AND ReportSchedule.SubscriptionID = Subscriptions.SubscriptionID
ORDER BY 	
	CATALOG.Name,
	ReportSchedule.ScheduleID

Tags:

Business Intelligence

Script SQL : arrondi au quart d'heure

by Olivier Moreau 19. septembre 2011 19:04

Voici un script SQL qui permet d'arrondir une date au quart d'heure le plus proche

DECLARE @MADATE AS DATETIME
SET @MADATE = '01/01/2011 10:07:29'
SELECT cast(round((cast(@MADATE as float(53))*24*4),0)/(24*4) as smalldatetime)

Résultat : 2011-01-01 10:00:00

SET @MADATE = '01/01/2011 10:07:30'
SELECT cast(round((cast(@MADATE as float(53))*24*4),0)/(24*4) as smalldatetime)

Résultat : 2011-01-01 10:15:00

 

Pour arrondir systématiquement au quart d'heure inférieur on utilisera la fonction FLOOR à la place de ROUND

DECLARE @MADATE AS DATETIME SET @MADATE = '01/01/2011 10:07:29'
SELECT cast(floor(cast(@MADATE as float(53))*24*4)/(24*4) as smalldatetime)

Résultat : 2011-01-01 10:00:00

SET @MADATE = '01/01/2011 10:14:30'
SELECT cast(floor(cast(@MADATE as float(53))*24*4)/(24*4) as smalldatetime)

Résultat : 2011-01-01 10:00:00

Tags:

Business Intelligence

Problème de droit sur les disques après l'installation de SQL Server 2008 R2

by Guillaume Prot 18. juin 2011 00:57

Lors de l’installation de SQL Server 2008 R2 sur un cluster Hyper-V V2, avec un SAN, il faut éviter de faire pointer les répertoires SQL Server directement à la racine des disques. En effet, l’installation efface certains droits utilisateurs des répertoires partagés.

Si l’on paramètre les chemins de données, logs, tempdb, directement à la racine d’un volume, les droits utilisateurs de COMPUTER\Users et COMPUTER\Everyone sont supprimés. Le compte installant SQL Server n’a alors plus accès aux volumes en question, et peut avoir le message suivant lorsqu’il se logue : « The Recycle Bin on F:\ is corrupted. Do you want to empty the Recycle Bin for this drive? ».

Si on souhaite paramétrer les répertoires à la racine, et que l’on a ce problème, le mode opératoire suivant fonctionne :

  • Sur le volume défectueux, aller dans les Propriétés / Sécurité
  • Ouvrir les autorisations spéciales et paramètres avancés
  • Ajouter une autorisation pour le groupe COMPUTER\Users, pour le périmètre « This Folder, subfolders and files » avec les autorisations suivantes :
    • « Traverse Folder / Execute File »,
    •  « List Folder / Read Data »,
    •  « Read Attributes »,
    •  « Read Extended Attributes »,
    •  « Read Permissions »
  •  Ajouter une autorisation pour le groupe COMPUTER\Users, pour le périmètre « This Folder and subfolders » avec les autorisations suivantes :
    • « Create Folder / Append Data»
  • Ajouter une autorisation pour le groupe COMPUTER\Users, pour le périmètre « Subfolders only » avec les autorisations suivantes :
    • « Create Files / Write Data »
  • Ajouter une autorisation pour le groupe COMPUTER\Everyone, pour le périmètre « This folder only » avec les autorisations suivantes :
    • « Traverse Folder / Execute File »,
    •  « List Folder / Read Data », 
    • « Read Attributes », 
    • « Read Extended Attributes », 
    • « Read Permissions »

Si le message « The Recycle Bin on F:\ is corrupted. Do you want to empty the Recycle Bin for this drive? » réapparait lorsque le compte ayant installé SQL Server se logue à nouveau, cliquer sur « Yes », et le problème est définitivement résolu.

 

Tags: ,

Business Intelligence

Rafraichir l'Intellisense dans SQL Server Management Studio 2008

by Olivier Moreau 14. avril 2011 00:04

Il arrive souvent, lorsque l'on ajoute ou modifie un objet dans SSMS (PS, Colonnes, Tables, ...) que ce dernier ne soit pas pris en compte immédiatement par l'IntelliSense, voir pas du tout.

Pour résoudre ce problème, il faut rafraichir le cache de l’IntelliSense

-En relançant SSMS

-Ou plus simplement, avec le raccourci clavier : Ctrl+Maj+R
(A la souris : Edition > IntelliSense > Actualiser le cache local)

Tags: ,

Business Intelligence

SSRS 2008 - Windows 7 - page blanche sur le gestionnaire de rapports

by Grégory Leandro 20. janvier 2011 07:10

Après avoir installé Reporting Services 2008 sur votre Windows 7 en local, il se peut que vous soyez confrontés à une page blanche lors de l’accès au gestionnaire de rapport:

Affichage typique pour un utilisateur qui ne dispose d’aucun droits… un accès à l’URL du ReportServer achèvera de vous le confirmer. Et pourtant, vous êtes administrateur de votre machine!

Un petit tour de passe-passe s’impose donc pour rétablir correctement les droits:

  • Faites un “Exécuter en tant qu’administrateur” sur Internet Explorer.
  • Accédez de nouveau au gestionnaire de rapports, l’affichage devrait cette fois-ci être normal
  • Affectez les droits nécessaires à votre utilisateur par le biais de l’onglet “Propriétés -> Sécurité” et via les “Paramètres du site”, section “Sécurité”.

Tags:

Business Intelligence

SSAS 2008 - WriteBack – Impacts de la mise à jour d’une mesure sur un cube

by Thomas Chilaud 19. janvier 2011 23:18

Nous avons précédemment vu l’activation du WriteBack sur un groupe de mesures ainsi qu’une utilisation simple de la commande MDX UPDATE .

Intéressons nous maintenant à la façon dont tout cela est géré au niveau moteur du cube.

 

Stockage des données de WriteBack

Le fait de valider notre modification (COMMIT) va la propager dans la partition de WriteBack et va également créer une nouvelle ligne dans la table de WriteBack :

 

 

 

 

On remarque déjà que la structure de cette table de WriteBack est très proche de la structure de la table source de notre groupe de mesure :

 

 

 

Cette table va assurer la pérennité des données qu’elle contient, en effet elle ne sera jamais supprimée automatiquement, même si nous désactivions le WriteBack.

Elle est en quelque sorte la source de notre partition de WriteBack et permettra de la réalimenter par exemple si le cube était dé-processé (UNPROCESS).

 

Elle peut aussi permettre d’annuler une publication de valeur.

(Si l’on maitrise le périmètre des modifications et qu’il n’y a pas de risque de chevauchement entre plusieurs modifications consécutives de différents utilisateurs sur une même cellule)

En effet si on repère la publication incriminée à l’aide des deux champs d’audit (DateTime et User) on peut supprimer les lignes correspondante de la table et lancer un process la partition de WriteBack pour revenir en arrière !

 

La dernière remarque concernera la façon dont les données sont stockées à savoir de manière différentielle.

 

Dans notre exemple : 

Ancienne valeur (9858,2 dans la partition principale)

+      Incrément (141,8 dans la partition et la table de WriteBack)

=      Nouvelle valeur (10000 récupéré par un Select qui agrège les deux partitions)

 

On se rend tout de suite compte qu’un tel comportement peut entraîner une dégradation des performances de part la multiplicité des sources et surtout par le fait que la partition de WriteBack est en lecture / écriture et n’a pas de design d’agrégation.

 

Non régression des performances

Pour remédier à ce problème et récupérer les performances de requêtage, on peut convertir (manuellement dans SSMS ou via un job planifié) la partition de WriteBack vers une partition définitive « classique » en lecture seule, ayant le même design d’agrégation que la partition d’origine.

 

 

 

A suivre : Les différents modes d’allocation d’un UPDATE

 

Tags: ,

Business Intelligence

SSAS 2008 - WriteBack – Insertion ou modification d’une valeur en MDX

by Thomas Chilaud 19. janvier 2011 23:07
Après avoir vu dans le dernier article comment activer un groupe de mesures en écriture sur un cube SSAS 2008 R2, nous sommes maintenant prêts à poster des données dans ce cube !
 
Allocation de la valeur d’une mesure avec une requête MDX : UPDATE CUBE
Pour cet article nous allons simplement modifier la valeur présente au niveau d’une cellule feuille du cube et observer le résultat via des requêtes MDX dans SSMS.
(N.B. : Que cette cellule possède déjà une valeur pour le croisement considéré ou qu’elle soit vide ne change rien à la méthode)
 
Sélectionnons la  mesure « Strategy Plan Amount » au plus bas d’un croisement  pour être ne récupérer qu’une cellule:
 
SELECT 
FROM [Strategy Plan]
WHERE ([Account].[Account Level].&[22],
       [Currency].[Currency Description].&[US Dollar],
       [Date].[Calendar YQMD].[Date].&[20090101],
       [Product].[Product].[Product Name].&[161],
       [Entity].[Entity Description].&[Contoso Paris Store],
       [Scenario].[Scenario Name].&[3],
       [Measures].[Strategy Plan Amount])
CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE,
 BACK_COLOR, FORE_COLOR, FONT_FLAGS
 
 
 
 
 
Mettons maintenant à jour cette valeur en attribuant 10000 à la même cellule avec la commande suivante :
 
UPDATE CUBE [Strategy Plan]
SET    ([Account].[Account Level].&[22],
       [Currency].[Currency Description].&[US Dollar],
       [Date].[Calendar YQMD].[Date].&[20090101],
       [Entity].[Entity Description].&[Contoso Paris Store],
       [Product].[Product].[Product Name].&[161],
       [Scenario].[Scenario Name].&[3],
       [Measures].[Strategy Plan Amount]) 
= 10000
 
 
 
Si on ré-exécute notre premier Select  en restant dans la même fenêtre on obtient bien le nouveau résultat (10000) .
Par contre si on effectuait ce Select à partir d’une nouvelle fenêtre et donc d’une connexion différente on aurait toujours la valeur initiale (9858) !
 
En effet pour le moment la nouvelle valeur n’a pas encore été propagée à l'ensemble du cube, elle n’existe que dans l’espace restreint de notre première transaction et n’est visible que dans celle-ci.
 
Dans le périmètre de notre transaction on peut souhaiter annuler notre modification ou au contraire la valider (la publier définitivement dans le cube à l’usage de tous), respectivement :
 
ROLLBACK
COMMIT
 
Un descriptif complet de la commande UPDATE :
 
N.B.1. : Dans cet exemple, nous avons posté notre valeur sur une cellule unique du cube,  nous n’avons donc pas eu à définir une méthode d’allocation particulière, il en aurait été autrement si nous avions posté cette valeur à un niveau plus haut d’une de nos hiérarchies car il aurait fallu spécifier comment distribuer cette valeur entre les cellules sous-jacentes. Nous détaillerons les différents modes d’allocation et leur intérêt dans un prochain article.
N.B.2. : Le descriptif de la commande UPDATE précise une option NO_ALLOCATION, cependant celle-ci ne semble pas implémenter au niveau moteur et génère une erreur, à éviter donc.
 A suivre : Impacts d’un UPDATE sur un cube

Tags: ,

Business Intelligence

SSAS 2008 - WriteBack - Activation de l'écriture sur un groupe de mesures

by Thomas Chilaud 19. janvier 2011 02:16
Ce post est le premier d'une série qui montrera les possibilités apportées par le WriteBack sur un cube SSAS 2008 R2.
 
L’ensemble de cette série s’appuiera sur les dernières bases (SQL & SSAS) d’exemple utilisées par Microsoft : Contoso.
(Sources : http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=868662dc-187a-4a85-b611-b7df7dc909fc)
 
Nous allons ici simplement voir les différentes façons d’activer le WriteBack. 
 
Activation du WriteBack d'un groupe de mesure sur un cube
A partir de SSMS, on se connecte à la base, puis on déplie l’arborescence de notre cube jusqu’au groupe de mesure.
Un clic-droit sur le dossier de WriteBack permet d’activer celui-ci via un mini-wizard.
 
Dans cette fenêtre il suffit de renseigner :
·         Le nom d’une table qui servira à sauvegarder les données de WriteBack en dehors du cube
·         Une source de données pour cette table (généralement celle du DWH source)
·         Le mode de stockage (MOLAP par défaut, disponible depuis la version 2008 du moteur, et offrant de meilleures performances des requêtes)
 
 
 
 
 
On découvre alors bien la nouvelle partition dédiée au WriteBack.
Elle est pour l’instant vide et non-processée.
La table de WriteBack n’a pas encore été créée, pour éviter un problème lors de notre premier post de valeur, nous allons la processer « à vide ».
On retrouve maintenant la table dans le Data Warehouse.
 
 
 
 
A partir d’une fenêtre de commande XMLA on aurait pu obtenir le même résultat avec le code suivant, cela laissera donc la possibilité de scripting et d’automatisation.
 
 
<Create xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
    <ParentObject>
        <DatabaseID>AS_Contoso</DatabaseID>
        <CubeID>StrategyPlan</CubeID>
        <MeasureGroupID>Fact Strategy Plan</MeasureGroupID>
    </ParentObject>
    <ObjectDefinition>
        <Partition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200">
            <ID>WriteTable_Fact Strategy Plan</ID>
            <Name>WriteTable_Fact Strategy Plan</Name>
            <Source xsi:type="TableBinding">
                <DataSourceID>OPBI</DataSourceID>
                <DbTableName>WriteTable_Fact Strategy Plan</DbTableName>
            </Source>
            <StorageMode>Molap</StorageMode>
            <ProcessingMode>Regular</ProcessingMode>
            <Type>Writeback</Type>
        </Partition>
    </ObjectDefinition>
</Create>
 
 
Encore une autre façon de procéder : à partir de BIDS, en ouvrant la solution du cube ou en s’y connectant directement en online.
 
Dans l’onglet « Partitions » :
 
 
 
On aura alors une fenêtre comparable à celle trouvée dans SSMS.
BIDS offre l’avantage d’accéder aux propriétés de la partition nouvellement créée et donc notamment la configuration d’erreurs. 
 

A suivre : Insertion (ou modification) d'une valeur en MDX

Tags: ,

Business Intelligence

Neos-SDI  Neos-SDI