Utilisation de l'écriture différée de cubes (MDX)
Pour mettre à jour un cube, vous pouvez utiliser l'instruction UPDATE CUBE. Celle-ci permet de mettre à jour un tuple avec une valeur spécifique. Pour utiliser efficacement l'instruction UPDATE CUBE afin de mettre à jour un cube, vous devez comprendre la syntaxe de l'instruction, les conditions d'erreur susceptibles de se produire, ainsi que les effets potentiels des mises à jour sur un cube.
Syntaxe de l'instruction UPDATE CUBE
La syntaxe suivante décrit l'instruction UPDATE CUBE :
UPDATE [CUBE] <Cube_Name> SET <tuple>.VALUE = <value> [,<tuple>.VALUE = <value>...]
[ USE_EQUAL_ALLOCATION | USE_EQUAL_INCREMENT |
USE_WEIGHTED_ALLOCATION [BY <weight value_expression>] |
USE_WEIGHTED_INCREMENT [BY <weight value_expression>] ]
Si un jeu complet de coordonnées n'est pas spécifié pour le tuple, les coordonnées non spécifiées utilisent le membre par défaut de la hiérarchie. Le tuple identifié doit faire référence à une cellule agrégée avec la fonction Sum, et ne doit pas utiliser de membre calculé comme l'une des coordonnées de la cellule.
Vous pouvez considérer l'instruction UPDATE CUBE comme une sous-routine générant une série d'opérations d'écriture différée isolées sur des cellules atomiques. Toutes ces opérations d'écriture différée sont ensuite regroupées dans la somme spécifiée.
[!REMARQUE]
Lorsque les cellules mises à jour ne se chevauchent pas, la propriété de chaîne de connexion Update Isolation Level peut être utilisée pour améliorer les performances pour UPDATE CUBE. Pour plus d'informations, consultez ConnectionString.
Exemple
Vous pouvez tester UPDATE CUBE à l'aide du groupe de mesures Cibles de ventes dans le cube Adventure Works. Ce groupe de mesures est composé de mesures agrégées par SUM, ce qui correspond à une condition obligatoire pour UPDATE CUBE.
Activez l'écriture différée pour le groupe de mesures Cibles de ventes dans la base de données Adventure Works. Dans Management Studio, cliquez avec le bouton droit sur un groupe de mesures, pointez sur Options d'écriture différée et choisissez Activer l'écriture différée.
Vous devez voir une nouvelle table d'écriture différée dans le dossier Writeback. Le nom de la table est le suivant : WriteTable_Fact Sales Quota.
Ouvrez une fenêtre de requête MDX. Exécutez l'instruction Select suivante afin d'afficher la valeur d'origine :
SELECT [Measures].[Sales Amount Quota] on 0 , [Employee].[Employee Department].[Title].&[Sales Representative].children on 1 FROM [Adventure Works]
Vous devez voir les quotas sur le montant des ventes de chaque commercial.
Exécutez l'instruction de mise à jour du cube pour écrire une nouvelle valeur en différé. Dans cet exemple, nous avons défini à 0 le quota sur le montant des ventes. La nouvelle valeur étant égale à 0, ne spécifiez pas de méthode d'allocation.
UPDATE CUBE [Adventure Works] SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 0
Réexécutez l'instruction SELECT. Vous devez maintenant voir la valeur zéro pour les quotas.
La valeur d'écriture différée est limitée à la session active. Pour rendre cette valeur persistante pour tous les utilisateurs et toutes les sessions, traitez la table d'écriture différée. Dans Management Studio, cliquez avec le bouton droit sur WriteTable_Fact Sales Quota et choisissez Traiter.
Pour spécifier une méthode d'allocation, la nouvelle valeur doit être supérieure à zéro. Dans cet exemple, la nouvelle valeur de quota sur le montant des ventes s'élève à deux millions et la méthode d'allocation répartit ce montant entre tous les commerciaux.
UPDATE CUBE [Adventure Works]
SET ([Measures].[Sales Amount Quota], [Employee].[Employee Department].[Department].&[Sales]) = 2000000
USE_EQUAL_ALLOCATION
Conditions d'erreur
Le tableau suivant décrit à la fois les éléments pouvant entraîner l'échec d'écritures différées et le résultat de ces erreurs.
Condition d'erreur |
Résultat |
---|---|
La mise à jour comprend les membres de la même dimension qui n'existent pas l'un avec l'autre. |
La mise à jour échoue. L'espace du cube ne contient pas la cellule référencée. |
La mise à jour comprend une mesure provenant d'une mesure de type non signé. |
La mise à jour échoue. Les incréments exigent que la mesure puisse accepter une valeur négative. |
La mise à jour comprend une mesure d'agrégation de type autre que somme. |
Une erreur est générée. |
Vous avez tenté d'exécuter la mesure sur un sous-cube. |
Une erreur est générée. |
Effets des modifications apportées au cube
Les modifications suivantes n'ont aucun effet sur une écriture différée :
traitement d'un cube, de ses groupes de mesures du cube ou de ses dimensions ;
ajout d'attributs à une dimension quelconque ;
ajoute d'une nouvelle dimension ;
suppression d'une dimension qui ne comprend pas l'écriture différée ;
ajout, modification ou suppression d'une hiérarchie ;
ajout d'une nouvelle mesure.
Les modifications suivantes ne peuvent pas être effectuées sans supprimer les données en écriture différée :
suppression d'un attribut, de sa hiérarchie d'attribut, s'il est compris dans l'écriture différée. Cela inclut la suppression explicite de l'attribut, ou de sa hiérarchie d'attribut, ou encore la suppression de la dimension parente de l'attribut ;
suppression d'une mesure comprise dans l'écriture différée ;
ajout d'un attribut dépourvu de niveau (All) à une dimension comprise dans l'écriture différée ;
modification de la granularité d'une dimension comprise dans l'écriture différée.