Dans le sens inverse maintenant, lors de la spécification du projet, vous allez demander aux analystes quels sont leurs besoins, vous allez révéler le fait par exemple que les utilisateurs croisent “Années, mois en ligne et Promotion en colonne”. Cela donnera lieu à la requête suivante :
select
[Promotion].[Promotions].[Category].Members on Columns,
Crossjoin ([Order Date].[Calendar Year].[All].Children , [Order Date].[Month of Year].[All].Children )
on rows
from
[InternetSales]
Cette requête ira chercher l'agrégat 8 qui met seulement en oeuvre “Month Name” et “Promotion Category”, avant de rajouter “à la volée” “l'Année”.
Comment impacter le cube pour positionner un agrégat plus optimal.On repasse par AMO :
La première étape consiste à ajouter dynamiquement au bon “AggregationDesign” (dont le nom est attribué par le serveur sous SSAS 2005, mais que vous pouvez affecter en “AggregationDesing Linked” sous SS2K8)Nous ajoutons l'agrégat “ECM A1”:
private void btnSetAggr_Click(object sender, EventArgs e)
{
Cube cube = server.Databases["Adventure Works DW Standard Edition"].Cubes["InternetSales"];
AggregationDesign ad =
cube.MeasureGroups["Fact Internet Sales"].AggregationDesigns["AggregationDesign linked"];
Aggregation aggr = ad.Aggregations.Add("ECM A1","ECM A1");
Nous devons ajouter à l'agrégation toutes les dimensions susceptibles d'être utilisées, et ce en explorant la collection des dimensions utilisées dans le cube :
foreach (CubeDimension dim in cube.Dimensions)
{
aggr.Dimensions.Add(dim.ID);
}
Comme nous allons positionner des axes d'agrégation sur la date de commande et sur les promotions, nous devons deux objets à cet effet :
AggregationDimension orderDateAggregationDimension = aggr.Dimensions["Order Date"];
AggregationDimension promotionAggregationDimension = aggr.Dimensions["Promotion"];
Nous créons ensuite les attributs sur lesquels nous souhaitons organiser les Agrégations :
AggregationAttribute year =
new AggregationAttribute
( cube.Dimensions["Order Date"].Attributes["CalendarYear"].AttributeID );
AggregationAttribute month =
new AggregationAttribute
(cube.Dimensions["Order Date"].Attributes["EnglishMonthName"].AttributeID);
AggregationAttribute promotion = new AggregationAttribute
(cube.Dimensions["Promotion"].Attributes["Promotion Category"].AttributeID);
Pour enfin les rattacher à leur dimension d'Agrégation :
orderDateAggregationDimension.Attributes.Add(year);
orderDateAggregationDimension.Attributes.Add(month);
promotionAggregationDimension.Attributes.Add(promotion);
Nous mettons à jour la structure du cube :