public static void TableProcess(AMO.Database tabularDatabase, string tableName, AMO.ProcessType process) { // Major steps in processing a table in the database // // - Validate required input arguments // - Process Dimension (no need to process cube or MeasureGroup) // // Note: There are no validations for duplicated names, invalid names or // similar scenarios. It is expected the server will take care of them and // throw exceptions on any invalid situation. // // // Note: There are no validations on the Process requested and whatever value is passed it's used // // Note: For tables, in tabular models, the following ProcessType values are 'valid' or have sense: // - ProcessDefault ==> verifies if a data (at partition level) or recalc is required and issues coresponding internal process tasks // - ProcessFull ==> forces data upload (on all partitions) and recalc, regardless of table status // - ProcessData ==> forces data upload only (on all partitions); does not issue an internal recalc process task // - ProcessClear ==> clears all table data (on all partitions) // // Validate required input arguments if (tabularDatabase == null) { throw new ArgumentNullException(TabularDatabaseStringName); } if (tableName.IsNullOrEmptyOrWhitespace()) { throw new ArgumentNullException(TableStringName); } // Process Dimension object only tabularDatabase.Dimensions[tabularDatabase.Dimensions.GetByName(tableName).ID].Process(process); }
public static void PartitionProcess(AMO.Database tabularDatabase, string tableName, string partitionName, AMO.ProcessType processValue) { // Major steps in Processing a Partition in a table in the database // // - Validate required input arguments // - Other Initial preparations // - Process partition // // Note: There are no validations on the ProcessType requested and whatever value is passed it's used // // Note: For partitions, in tabular models, the following ProcessType values are 'valid' or have sense: // - ProcessDefault ==> verifies if data (at partition level) or recalc is required and issues coresponding internal process tasks // - ProcessFull ==> forces data upload (on given partition) and recalc, regardless of table status // - ProcessData ==> forces data upload only (on given partition); does not issue an internal recalc process task // - ProcessClear ==> clears all table data (on given partition) // // // Note: There are no validations for duplicated names, invalid names or // similar scenarios. It is expected the server will take care of them and // throw exceptions on any invalid situation. // // Note: In AMO, strings as indexers refer to the ID of the object, not the Name of the object // // Note: Only one DataSourceView is used in Tabular Models // ==> tabularDatabase.DataSourceViews[0] represents the DSV of the model // // Note: Only one Cube is used in Tabular Models // ==> tabularDatabase.Cubes[0] represents the cube in the model // // Note: Microsoft design tools use the following pattern to keep track of the // datasource matching elements: // DataSourceView->TableName <---> Dimension.ID, MeasureGroup.ID // DataSourceView->ColumnName <---> Dimension->ColumnID, MeasureGroup.DegeneratedDimension->CoumnID // So far, this sample follows the same pattern. // // WARNING: Breaking the above pattern when creating your // own AMO to Tabular functions might lead to // unpredictable behavior when using Microsoft // Design tools in your models. // Validate required input arguments if (tabularDatabase == null) { throw new ArgumentNullException(TabularDatabaseStringName); } if (tableName.IsNullOrEmptyOrWhitespace()) { throw new ArgumentNullException(TableStringName); } if (partitionName.IsNullOrEmptyOrWhitespace()) { throw new ArgumentNullException("partitionName"); } if (!IsDatabaseCompatibilityLevelCorrect(tabularDatabase)) { throw new InvalidOperationException(Resources.InvalidCompatibilityLevelOperationException); } // Other initial preparations // - Cleaning and preparing name variables tableName = tableName.Trim(); partitionName = partitionName.Trim(); // - Obtain table name in DSV string datasourceTableName = tabularDatabase.Dimensions.GetByName(tableName).ID; // Process using (AMO.MeasureGroup tableMeasureGroup = tabularDatabase.Cubes[0].MeasureGroups[datasourceTableName]) using (AMO.Partition partition = tableMeasureGroup.Partitions.GetByName(partitionName)) { partition.Process(processValue); } }