The following Strategy SDK sample code demonstrates how to retrieve metric definition using Strategy Intelligence Server SDK 9.x with C#.
IDSSMetric metric = (IDSSMetric)oInfo;
// 1. Expression
Console.WriteLine("Formula: " + metric.Expression.Text);
// 2. Filter
IDSSFilter filter = (IDSSFilter)metric.Conditionality.Filter;
if (filter != null)
{
Console.WriteLine("Condition: " + metric.Conditionality.Filter.Expression.Text);
}
// 3. Level
string key;
for (int i = 0; i < metric.Dimensionality.Count(); i++){
key = "K" + i.ToString();
// Base report level
if (metric.Dimensionality.Item(key).UnitType.Equals(EnumDSSDimtyUnitType.DssDimtyUnitTypeReportBaseLevel))
{
Console.WriteLine("Report Level / "
+ metric.Dimensionality.Item(key).Filtering.ToString()
+ " / "
+ metric.Dimensionality.Item(key).GroupBy.ToString());
}
// attribute
else if (metric.Dimensionality.Item(key).UnitType.Equals(EnumDSSDimtyUnitType.DssDimtyUnitTypeAttribute))
{
Console.WriteLine(((IDSSAttribute)metric.Dimensionality.Item(key).Target).Info.Name
+ " / "
+ metric.Dimensionality.Item(key).Filtering.ToString()
+ " / "
+ metric.Dimensionality.Item(key).GroupBy.ToString());
}
// hierarchy
else if (metric.Dimensionality.Item(key).UnitType.Equals(EnumDSSDimtyUnitType.DssDimtyUnitTypeDimension))
{
Console.WriteLine(((IDSSDimension)metric.Dimensionality.Item(key).Target).Info.Name
+ " / "
+ metric.Dimensionality.Item(key).Filtering.ToString()
+ " / "
+ metric.Dimensionality.Item(key).GroupBy.ToString());
}
else
{
// DssDimtyUnitTypeRole
}
}
// 4. Aggregation
foreach(IDSSMetricSubtotal sub in metric.Subtotals)
{
// Console.WriteLine(sub.Name);
switch(sub.Name)
{
case "Total":
Console.WriteLine("Total: " + metric.Subtotals.Item("Total").Implementation.Info.Name);
break;
case "Aggregation":
Console.WriteLine("Aggregation:" + metric.Subtotals.Item("Aggregation").Implementation.Info.Name);
break;
}
}
// 5. Transfomation
oSearch.Types.Clear();
oSearch.Types.Add(EnumDSSObjectType.DssTypeRole);
oSearch.UsedBy.Add(oInfo);
oSearch.Domain = EnumDSSSearchDomain.DssSearchProject;
foreach (IDSSRole oRole in oSource.ExecuteSearch(oSearch, 0, null, null, 0, 0))
{
Console.WriteLine("Transformation:" + oRole.Info.Name);
}