Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Una prospettiva è un meccanismo per semplificare o concentrare il modello in una parte più piccola di essa per l'applicazione client.
Per una spiegazione dettagliata su come creare e modificare la rappresentazione prospettica, vedere Rappresentazione prospettica (tabulare ).
Avvertimento
Le prospettive non sono un meccanismo di sicurezza; gli oggetti esterni alla prospettiva possono comunque essere accessibili dall'utente tramite altre interfacce.
Rappresentazione prospettica
In termini di oggetti AMO, una rappresentazione prospettica ha una relazione di mapping con Perspective e non sono necessari altri oggetti AMO principali.
Prospettiva in AMO
Il frammento di codice seguente illustra come creare una prospettiva in un modello tabulare. L'elemento chiave in questo frammento di codice è perspectiveElements; questo oggetto è una rappresentazione grafica di tutti gli oggetti nel modello tabulare esposto all'utente. perspectiveElements contiene 4 colonne e per questo scenario sono rilevanti solo le colonne 1, 2 e 3. La colonna 1 contiene il tipo di elemento visualizzato -elementTypeValue-; la colonna 2 contiene il nome completo dell'elemento --, che probabilmente dovrà essere analizzato per immettere l'elemento nella prospettiva; la colonna 3 contiene un elemento della casella di controllo -checkedElement- che indica se l'elemento fa parte della prospettiva o meno.
private void updatePerspective_Click(
AMO.Cube modelCube
, DataGridView perspectiveElements
, string updatedPerspectiveID
)
{
//Update is done by delete first, create new and insert after
//if perspective doesn't exist then create first and insert after
updatedPerspectiveID = updatedPerspectiveID.Trim();
if (modelCube.Perspectives.Contains(updatedPerspectiveID))
{
modelCube.Perspectives.Remove(updatedPerspectiveID, true);
newDatabase.Update(AMO.UpdateOptions.ExpandFull, AMO.UpdateMode.UpdateOrCreate);
}
AMO.Perspective currentPerspective = modelCube.Perspectives.Add(updatedPerspectiveID, updatedPerspectiveID);
foreach (DataGridViewRow currentDGVRow in perspectiveElements.Rows)
{
bool checkedElement = (bool)currentDGVRow.Cells[3].Value;
if (checkedElement)
{
string elementTypeValue = currentDGVRow.Cells[1].Value.ToString();
string elementNameValue = currentDGVRow.Cells[2].Value.ToString();
switch (elementTypeValue)
{
case "Column: Attribute":
case "Column: Calculated Column":
{
string perspectiveDimensionName = Regex.Match(elementNameValue, @"(?<=')(.*?)(?=')").ToString();
string perspectiveDimensionAttributeName = Regex.Match(elementNameValue, @"(?<=\[)(.*?)(?=\])").ToString();
AMO.PerspectiveDimension currentPerspectiveDimension;
if (!currentPerspective.Dimensions.Contains(perspectiveDimensionName))
{
currentPerspectiveDimension = currentPerspective.Dimensions.Add(perspectiveDimensionName);
}
else
{
currentPerspectiveDimension = currentPerspective.Dimensions[perspectiveDimensionName];
}
if (!currentPerspectiveDimension.Attributes.Contains(perspectiveDimensionAttributeName))
{
currentPerspectiveDimension.Attributes.Add(perspectiveDimensionAttributeName);
}
}
break;
case "Hierarchy":
{
string perspectiveDimensionName = Regex.Match(elementNameValue, @"(?<=')(.*?)(?=')").ToString();
string perspectiveDimensionHierarchyName = Regex.Match(elementNameValue, @"(?<=\[)(.*?)(?=\])").ToString();
AMO.PerspectiveDimension currentPerspectiveDimension;
if (!currentPerspective.Dimensions.Contains(perspectiveDimensionName))
{
currentPerspectiveDimension = currentPerspective.Dimensions.Add(perspectiveDimensionName);
}
else
{
currentPerspectiveDimension = currentPerspective.Dimensions[perspectiveDimensionName];
}
if (!currentPerspectiveDimension.Hierarchies.Contains(perspectiveDimensionHierarchyName))
{
currentPerspectiveDimension.Hierarchies.Add(perspectiveDimensionHierarchyName);
}
}
break;
case "Measure":
{
string perspectiveMeasureGroupName = Regex.Match(elementNameValue, @"(?<=')(.*?)(?=')").ToString();
string measureName = Regex.Match(elementNameValue, @"(?<=\[)(.*?)(?=\])").ToString();
string perspectiveMeasureName = string.Format("[Measures].[{0}]", measureName);
AMO.PerspectiveCalculation currentPerspectiveCalculation = new AMO.PerspectiveCalculation(perspectiveMeasureName, AMO.PerspectiveCalculationType.Member);
if (!currentPerspective.Calculations.Contains(perspectiveMeasureName))
{
currentPerspective.Calculations.Add(currentPerspectiveCalculation);
}
if (modelCube.MdxScripts["MdxScript"].CalculationProperties.Contains(string.Format("KPIs.[{0}]", measureName)))
{//Current Measure is also a KPI ==> will be added to the KPIs collection of the perspective
AMO.PerspectiveKpi currentPerspectiveKpi = new AMO.PerspectiveKpi(perspectiveMeasureName);
if (!currentPerspective.Kpis.Contains(perspectiveMeasureName))
{
currentPerspective.Kpis.Add(currentPerspectiveKpi);
}
}
}
break;
default:
break;
}
}
}
newDatabase.Update(AMO.UpdateOptions.ExpandFull, AMO.UpdateMode.CreateOrReplace);
MessageBox.Show(String.Format("Perpective successfully updated."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Esempio AMO2Tabulare
Tuttavia, per comprendere come usare AMO per creare e modificare le rappresentazioni prospettiche, vedere il codice sorgente dell'esempio da AMO a tabulare. L'esempio è disponibile in Codeplex. Nota importante sul codice: il codice viene fornito solo come supporto per i concetti logici illustrati qui e non deve essere usato in un ambiente di produzione; né deve essere utilizzato per scopi diversi da quello educativo.