/// <summary> /// Creates a list of dimension-table-columns /// </summary> /// <param name="withAggregation">Whether an aggregation on the event-table was selected</param> /// <returns>A list of strings that can be used for the select statement</returns> private IEnumerable<string> GetAllDimensionColumns(bool withAggregation) { if (withAggregation) { var result = new List<string>(); AbstractAggregationConfigurator aggConfigurator = new DefaultAggregationConfigurator(); foreach (var dimension in DBWorker.MetaData.ListOfFactDimensions) if (!dimension.IsEmptyDimension) result.Add(embedAttributeInFunction(aggConfigurator.GetDefaultAggregationFunction(), dimension.ToTable, dimension.DimensionColumnNames.Col_Content)); return result; } else { var result = new List<string>(); foreach (var dimension in DBWorker.MetaData.ListOfFactDimensions) if (!dimension.IsEmptyDimension) result.Add(TableColumnFormatter(dimension.ToTable, dimension.DimensionColumnNames.Col_Content) + " AS " + dimension.ToTable); return result; } }
/// <summary> /// Creates a fact-table-column for select clause, i.e. "FACT.fact_id". /// </summary> /// <param name="withAggregation">Wether an aggregation on the event-table was selected</param> /// <returns>String that can be used for the select statement</returns> /// <author>Jannik Arndt, Roman Bauer</author> private string CreateFactSelectStatement(bool withAggregation) { if (withAggregation) { AbstractAggregationConfigurator aggConfigurator = new DefaultAggregationConfigurator(); return embedAttributeInFunction(aggConfigurator.GetDefaultAggregationFunction(), FactTableName, FactColumnName); } else { return TableColumnFormatter(FactTableName, FactColumnName); } }
/// <summary> /// Embed the given attribute in the given function, for example "MIN(FACT.fact_id)fact_id" ... /// </summary> /// <param name="function">Function to use</param> /// <param name="tableName">Name of the table</param> /// <param name="columnName">Name of the column</param> /// <returns>String that can be used for select clause</returns> /// <author>Jannik Arndt, Roman Bauer</author> private string embedAttributeInFunction(string function, string tableName, string columnName) { AbstractAggregationConfigurator aggConfigurator = new DefaultAggregationConfigurator(); if (aggConfigurator.GetDefaultAggregationFunction().Equals(function)) { if(tableName.Equals(FactTableName)) { return function + "(" + TableColumnFormatter(tableName, columnName) + ")" + columnName; } else { return function + "(" + TableColumnFormatter(tableName, columnName) + ")" + tableName; } } else { //here you can implement another functions return null; } }
/// <summary> /// Creates a list of event-table-columns, i.e. "EVENT.event_id", "Event.case_id", ... /// </summary> /// <param name="withAggregation">Whether an aggregation on the event-table was selected</param> /// <returns>A list of strings that can be used for the select statement</returns> /// <author>Jannik Arndt, Roman Bauer</author> private IEnumerable<string> CreateEventSelectStatements(bool withAggregation) { List<string> result = new List<string>(); //aggregation selected --> build select clause with database functions because we will use group by clause if (withAggregation) { AbstractAggregationConfigurator aggConfigurator = new DefaultAggregationConfigurator(); foreach (string columnName in DBWorker.MetaData.ListOfEventsTableColumnNames) { string aggFunction = aggConfigurator.GetAggregationFunction(columnName); string projectionOnAttribute = aggFunction + "(" + TableColumnFormatter(EventTableName, columnName) + ")" + columnName; result.Add(projectionOnAttribute); } } //no aggregation selected --> build select clause in absence of group by clause else foreach (string columnName in DBWorker.MetaData.ListOfEventsTableColumnNames) result.Add(TableColumnFormatter(EventTableName, columnName)); return result; }