Représentation (tabulaire) d'une hiérarchie
Les hiérarchies permettent à l'utilisateur final d'explorer plus facilement les objets.
Représentation d'une hiérarchie
Dans les modèles objet tabulaires une hiérarchie est un chemin de navigation d'un attribut à l'autre en fonction des valeurs sélectionnées par l'utilisateur.
Hiérarchie dans AMO
Lorsque vous utilisez AMO pour gérer une table de modèle tabulaire, il existe une correspondance d'objet un-à-un pour une hiérarchie ; dans AMO, une hiérarchie est représentée par l'objet Hierarchy.
L'extrait de code suivant montre comment ajouter une hiérarchie à un modèle tabulaire existant. Le code suppose que vous avez un objet de base de données AMO (newDatabase) et un objet de cube AMO (modelCube).
private void addHierarchy(
AMO.Database newDatabase
, AMO.Cube modelCube
, string tableName
, string hierarchyName
, string levelsText
)
{
//Validate input
if (string.IsNullOrEmpty(hierarchyName) || string.IsNullOrEmpty(levelsText))
{
MessageBox.Show(String.Format("Hierarchy Name or Layout must be provided."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (!overwriteHierarchy.Checked && newDatabase.Dimensions[tableName].Hierarchies.Contains(hierarchyName))
{
MessageBox.Show(String.Format("Hierarchy already exists.\nGive a new name or enable overwriting"), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
try
{
if (newDatabase.Dimensions[tableName].Hierarchies.Contains(hierarchyName))
{
//Hierarchy exists... deleting it to write it later
newDatabase.Dimensions[tableName].Hierarchies.Remove(hierarchyName, true);
newDatabase.Dimensions[tableName].Update(AMO.UpdateOptions.AlterDependents);
}
AMO.Hierarchy currentHierarchy = newDatabase.Dimensions[tableName].Hierarchies.Add(hierarchyName, hierarchyName);
currentHierarchy.AllMemberName = string.Format("(All of {0})", hierarchyName);
//Parse hierarchyLayout
using (StringReader levels = new StringReader(levelsText))
{
//Each line:
// must come with: The columnId of the attribute in the dimension --> this represents the SourceAttributeID
// optional: A display name for the Level (if this argument doesn't come the default is the SourceAttributeID)
string line;
while ((line = levels.ReadLine()) != null)
{
if (string.IsNullOrEmpty(line) || string.IsNullOrWhiteSpace(line)) continue;
line = line.Trim();
string[] hierarchyData = line.Split(',');
if (string.IsNullOrEmpty(hierarchyData[0])) continue; //first argument cannot be empty or blank,
//assume is a blank line and ignore it
string levelSourceAttributeID = hierarchyData[0].Trim();
string levelID = (hierarchyData.Length > 1 && !string.IsNullOrEmpty(hierarchyData[1])) ? hierarchyData[1].Trim() : levelSourceAttributeID;
currentHierarchy.Levels.Add(levelID).SourceAttributeID = levelSourceAttributeID;
}
}
newDatabase.Dimensions[tableName].Update(AMO.UpdateOptions.AlterDependents);
}
catch (Exception ex)
{
MessageBox.Show(String.Format("Error creating hierarchy [{0}].\nError message: {1}", newHierarchyName.Text, ex.Message), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
if (newDatabase.Dimensions[tableName].Hierarchies.Contains(hierarchyName))
{
//Hierarchy was created but exception prevented complete hierarchy to be written... deleting incomplete hierarchy
newDatabase.Dimensions[tableName].Hierarchies.Remove(hierarchyName, true);
newDatabase.Dimensions[tableName].Update(AMO.UpdateOptions.AlterDependents);
}
}
newDatabase.Dimensions[tableName].Process(AMO.ProcessType.ProcessFull);
modelCube.MeasureGroups[tableName].Process(AMO.ProcessType.ProcessFull);
}
Exemple AMO2Tabular
Pour savoir comment utiliser AMO pour créer et manipuler des représentations de hiérarchie, consultez le code source de l'exemple AMO to Tabular ; plus précisément, archivez le fichier source suivant : AddHierarchies.cs. L'exemple est disponible sur Codeplex. Remarque importante à propos du code : le code est fourni uniquement comme un support aux concepts logiques expliqués ici et ne doit pas être utilisé dans un environnement de production, ni à des fins autres que pédagogiques.