예제 #1
0
        /*
         * 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);
            }
        }
예제 #2
0
        /*---------------------------------
         * 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);
        }