public static string BuildColumnCommandText(TabularItems.Table table, DaxFilter daxFilter) { //TODO: problem is that column name = "Tran_YearMonthDay" // this needs to be Tran_Year and TranMonth TabularItems.Column column = null; string commandText = ""; if (daxFilter.IsHierarchy) { for (int i = 0; i < daxFilter.ValueHierarchy.Length; i++) { DaxColumn dc = daxFilter.ColumnNameHierarchy[i]; column = table.Columns.Find(dc.ColumnName); if (!string.IsNullOrEmpty(commandText)) { commandText += " && "; } commandText += BuildColumnCommandText(column, dc.TableName, dc.ColumnName, daxFilter.ValueHierarchy[i]); } } else { column = table.Columns.Find(daxFilter.ColumnName); commandText = BuildColumnCommandText(column, daxFilter.TableName, daxFilter.ColumnName, daxFilter.Value); } return(commandText); }
public static string BuildColumnCommandText(TabularItems.Column column, string tableName, string columnName, string value) { if (column == null) { throw new InvalidOperationException( string.Format("Column '{0} was not found in Tabular database", columnName)); } string commandText; switch (column.DataType) { case SSAS.DataType.String: commandText = string.Format("{0}[{1}] = \"{2}\"", tableName, columnName, value); break; case SSAS.DataType.DateTime: var date = Convert.ToDateTime(value); var dateExpr = string.Format("DATE({0},{1},{2})", date.Year, date.Month, date.Day); commandText = string.Format("{0}[{1}] = {2}", tableName, columnName, dateExpr); break; case SSAS.DataType.Int64: case SSAS.DataType.Decimal: case SSAS.DataType.Double: if (value == null) { commandText = string.Format("{0}[{1}] = BLANK()", tableName, columnName); } else { commandText = string.Format("{0}[{1}] = {2}", tableName, columnName, value); } break; case SSAS.DataType.Boolean: if (value.ToLower() == "true") { commandText = string.Format("{0}[{1}] = {2}", tableName, columnName, "TRUE"); } else { commandText = string.Format("{0}[{1}] = {2}", tableName, columnName, "FALSE"); } break; default: commandText = string.Format("{0}[{1}] = \"{2}\"", tableName, columnName, value); break; } return(commandText); }