/* * Create mining structures and models for olap */ public string CreateCubeMiningStructure(string sStructName, string sAlgorithm, int sCubeName, string sDimensionName, string sKeyColumn, List <string> lsInputColumns, List <string> lsPredictColumns, List <string> lsMeasureInput, List <string> lsMeasurePredict, List <bool> lbPredictItems, int parOne, int parTwo) { try { // connect to cube Server objServer = new Server(); objServer.Connect("DataSource=" + sServer + ";Initial Catalog=" + sCatalog); Database objDb = objServer.Databases[sCatalog]; Cube objCube = objDb.Cubes[sCubeName]; DataSourceView myView = objDb.DataSourceViews[0]; // create mining structure CubeDimension objDimension = objCube.Dimensions.GetByName(sDimensionName); // drop the existing structures with the same name Microsoft.AnalysisServices.MiningStructure currentMiningStruct = objDb.MiningStructures.FindByName(sStructName); if (currentMiningStruct != null) { currentMiningStruct.Drop(); } Microsoft.AnalysisServices.MiningStructure myMiningStructure = objDb.MiningStructures.Add(sStructName, sStructName); myMiningStructure.Source = new CubeDimensionBinding(".", objCube.ID, objDimension.ID); /***************** Key column *****************/ // key column CubeAttribute objKey = objCube.Dimensions.GetByName(sDimensionName).Attributes[0]; ScalarMiningStructureColumn objKeyColumn = CreateMiningStructureColumn(objKey, true); objKeyColumn.Name = sKeyColumn; myMiningStructure.Columns.Add(objKeyColumn); /***************** Other columns *****************/ // create mining columns for (int i = 0; i < lsInputColumns.Count; i++) { // get attribute CubeAttribute objAttribute = new CubeAttribute(); objAttribute = objCube.Dimensions.GetByName(sDimensionName).Attributes[0]; // create mining column ScalarMiningStructureColumn objColumn = CreateMiningStructureColumn(objAttribute, false); objColumn.Name = lsInputColumns[i]; myMiningStructure.Columns.Add(objColumn); /***************** Measure column *****************/ // create mining columns for measures for (int j = 0; j < lsMeasureInput.Count; j++) { MeasureGroup objMeasureGroup = objCube.MeasureGroups[lsMeasureInput[j]]; TableMiningStructureColumn objMeasure = CreateMiningStructureColumn(objMeasureGroup); objMeasure.Name = lsMeasureInput[j]; objMeasure.Columns.Add(objColumn); myMiningStructure.Columns.Add(objMeasure); } } /***************** Columns for prediction - will be updated in model *****************/ // create mining columns for (int i = 0; i < lsPredictColumns.Count; i++) { // get attribute CubeAttribute objAttribute = new CubeAttribute(); objAttribute = objCube.Dimensions.GetByName(sDimensionName).Attributes[0]; // if value = false (input & predict) then skip if (lbPredictItems[i] == false) { continue; } else { // create mining column ScalarMiningStructureColumn objColumn = CreateMiningStructureColumn(objAttribute, false); objColumn.Name = lsPredictColumns[i]; myMiningStructure.Columns.Add(objColumn); } } // update myMiningStructure.Update(); /***************** Mining model *****************/ // create mining models CreateMiningModel(myMiningStructure, sStructName, sAlgorithm, lsPredictColumns, lsMeasurePredict, lbPredictItems, parOne, parTwo); // process myMiningStructure.Process(); return("Success"); } catch (Exception e) { return(e.Message); } }
/*--------------------------------- * Description: Create Mining Structure * ----------------------------------- */ public static Microsoft.AnalysisServices.MiningStructure CreateMS(Microsoft.AnalysisServices.Server svr, string strStockCode, bool bAll, DateTime dtFrom, DateTime dtTo, bool bMulti) { Database db = svr.Databases.GetByName("Stock"); CreateDataAccessObjects(db, strStockCode, bAll, dtFrom, dtTo, bMulti, true); Microsoft.AnalysisServices.MiningStructure ms = db.MiningStructures.FindByName(strStockCode); if (ms != null) { // string message = "Bạn muốn tạo mới mô hình dự báo cho cổ phiếu này?"; // string caption = "Recreate New Mining Model"; // MessageBoxButtons buttons = MessageBoxButtons.YesNo; // DialogResult result; // // Displays the MessageBox. // result = MessageBox.Show(message, caption, buttons); // if (result == DialogResult.Yes) // { // ms.Drop(); // } // else // { // //CreateMM(ms, strStockCode); // return ms; // } ms.Drop(); } // Add new Mining Structure ms = db.MiningStructures.Add(strStockCode, strStockCode); ms.Source = new DataSourceViewBinding(strStockCode); ms.CaseTableName = strStockCode; ScalarMiningStructureColumn intID = new ScalarMiningStructureColumn("ID", "ID"); intID.Type = MiningStructureColumnTypes.Long; intID.Content = MiningStructureColumnContents.KeyTime; intID.IsKey = true; // Add data binding to the column. intID.KeyColumns.Add(strStockCode, "ID", OleDbType.Integer); // Add the column to the MiningStructure ms.Columns.Add(intID); ScalarMiningStructureColumn dblClosePrice = new ScalarMiningStructureColumn("ClosePrice", "ClosePrice"); dblClosePrice.Type = MiningStructureColumnTypes.Double; dblClosePrice.Content = MiningStructureColumnContents.Continuous; dblClosePrice.KeyColumns.Add(strStockCode, "ClosePrice", OleDbType.Double); ms.Columns.Add(dblClosePrice); // Don't use Open,High,Low for VNIndex, Compressed Date, and Multi Step Forecast if (strStockCode.ToUpper() != "VNINDEX" && strStockCode.Length < 11 && !bMulti) { ScalarMiningStructureColumn dblOpenPrice = new ScalarMiningStructureColumn("OpenPrice", "OpenPrice"); dblOpenPrice.Type = MiningStructureColumnTypes.Double; dblOpenPrice.Content = MiningStructureColumnContents.Continuous; dblOpenPrice.KeyColumns.Add(strStockCode, "OpenPrice", OleDbType.Double); ms.Columns.Add(dblOpenPrice); ScalarMiningStructureColumn dblHighPrice = new ScalarMiningStructureColumn("HighPrice", "HighPrice"); dblHighPrice.Type = MiningStructureColumnTypes.Double; dblHighPrice.Content = MiningStructureColumnContents.Continuous; dblHighPrice.KeyColumns.Add(strStockCode, "HighPrice", OleDbType.Double); ms.Columns.Add(dblHighPrice); ScalarMiningStructureColumn dblLowPrice = new ScalarMiningStructureColumn("LowPrice", "LowPrice"); dblLowPrice.Type = MiningStructureColumnTypes.Double; dblLowPrice.Content = MiningStructureColumnContents.Continuous; dblLowPrice.KeyColumns.Add(strStockCode, "LowPrice", OleDbType.Double); ms.Columns.Add(dblLowPrice); //ScalarMiningStructureColumn lngVolume = new ScalarMiningStructureColumn("Volume", "Volume"); //lngVolume.Type = MiningStructureColumnTypes.Long; //lngVolume.Content = MiningStructureColumnContents.Continuous; //lngVolume.KeyColumns.Add(strStockCode, "Volume", OleDbType.Double); //ms.Columns.Add(lngVolume); } ms.Update(); CreateMM(ms, strStockCode, bMulti); return(ms); }