示例#1
0
        /*        static private Partition PartitionCreate(int aYear, int aMonth, bool aForever, string aTableName,
         *  MeasureGroup aMeasugeGroup, Partition aTemplatePartition, string DateFieldName, bool isOracle)
         * {
         *  try
         *  {
         *      Partition p = aMeasugeGroup.Partitions.Add(aMeasugeGroup.Name + " " + ToYYYYMM(aYear, aMonth));
         *      p.AggregationDesignID = aTemplatePartition.AggregationDesignID;
         *      DateTime dStart = new DateTime(aYear, aMonth, 1);
         *      DateTime dEnd = new DateTime(aMonth == 12 ? aYear + 1 : aYear, aMonth == 12 ? 1 : aMonth + 1, 1);
         *
         *      string sql = "select * from " + aTableName + " where " + DateFieldName + " >= " + (isOracle ? "to_date('" + ToYYYYMMDD(dStart) + "','YYYYMMDD')" : ToYYYYMMDD(dStart));
         *      if (!aForever)
         *          sql += " AND " + DateFieldName + " < " + (isOracle ? "to_date('" + ToYYYYMMDD(dEnd) + "','YYYYMMDD')" : ToYYYYMMDD(dEnd));
         *      p.Source = new QueryBinding(aTemplatePartition.DataSource.ID, sql);
         *      p.Slice = "[Дата].[Місяць]" + ".&[" + ToYYYYMM(aYear, aMonth) + "]";
         *      return p;
         *  }
         *  catch (Exception e)
         *  {
         *      Console.WriteLine("{0} Exception caught.", e);
         *  }
         *  return null;
         * }*/


        /// <summary>
        /// Створюємо партіцию на основі шаблона.
        /// </summary>
        /// <param name="parTemplatePartition">Шаблон</param>
        /// <param name="parDStart">Початкова дата партіциї </param>
        /// <param name="parDEnd">Цінцева дата Партіциї</param>
        /// <param name="parType">Періодичність партіциї</param>
        /// <returns></returns>
        static private Partition PartitionCreate(Partition parTemplatePartition, DateTime parDStart, DateTime parDEnd, TypePeriod parType)
        {
            var MeasugeGroup = parTemplatePartition.Parent;

            try
            {
                string varSQL       = (parTemplatePartition.Source as QueryBinding).QueryDefinition;
                bool   varIsOracle  = IsOracle(varSQL);
                string varStartDate = XMLABuilder.GetStartDate(varSQL); //Початкова дата для створення партіций


                string varNewSQL;
                if (varSQL.IndexOf("1=0") > 0)
                {
                    string varDateField = DateFieldNameFromQueryGet(varSQL); //tmp
                    string table        = TableNameFromQueryGet(varSQL);     //tmp
                    varNewSQL = "select * from " + table + " where " + varDateField + " >= " + (varIsOracle ? "to_date('" + ToYYYYMMDD(parDStart) + "','YYYYMMDD')" : ToYYYYMMDD(parDStart)) + " AND " + varDateField + " < " + (varIsOracle ? "to_date('" + ToYYYYMMDD(parDEnd) + "','YYYYMMDD')" : ToYYYYMMDD(parDEnd));
                }
                else
                {
                    varNewSQL = varSQL.Replace(">= ", ">=").Replace(">= ", ">=").Replace(">= ", ">=").Replace("< ", "<").Replace("< ", "<").Replace("< ", "<").
                                Replace(">=to_date('" + varStartDate, ">= to_date('" + ToYYYYMMDD(parDStart)).Replace("<to_date('00010101", "< to_date('" + ToYYYYMMDD(parDEnd));
                }

                Partition p = MeasugeGroup.Partitions.Add(MeasugeGroup.Name + " " + (parType == TypePeriod.Week || parType == TypePeriod.Week4 ? ToYYYYMMDD(parDStart) : ToYYYYMM(parDStart)));
                p.AggregationDesignID = parTemplatePartition.AggregationDesignID;
                p.Source = new QueryBinding(parTemplatePartition.DataSource.ID, varNewSQL);
                if (parType == TypePeriod.Month)
                {
                    p.Slice = /*"[Час].[Календар].[Місяць]*/ "[Дата].[Місяць]" + ".&[" + ToYYYYMM(parDStart) + "]";
                }
                return(p);
            }
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
            }
            return(null);
        }
示例#2
0
        public static void Main(string[] args)
        {
            string varFileXML = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\process.xml";
            string varKey     = @"
Доступнi ключi: /XML:process.xml /Server:localhost /DB:dw_olap /Cube: /Step:0 /PARALLEL:8 /Metod:0
/XMLA: 1 - процесити через XMLA, 0 - не використовувати XMLA для не INDEX процесінга
/Metod:0 - ігнорувати помилки ключі з конвертацією, 1 - пробувувати без ігнорування
/DAY: - за скільки днів перепроцешувати куби  за замовчуванням 20
/STATE (:2) - Показує стани кубів. :2-Розширена інформація
/DATESTART:DD.MM.YYYY - З Якої дати процесити партіциї.
/PROCESSDIMENSION: - (NONE,UPDATE,FULL)  По замовчуванню UPDATE
/PROCESSCUBE: - (NONE,DATA,FULL) По замовчуванню FULL
/ARX:01.01.2012 - Процесити в режимі архів. (З якої дати розширювати партиції) дата не обов'язковий параметр.
/DAYPROCESS:20 - за скільки днів перепроцешувати партіциї (Переважає значення з налаштувань Виміру)

";

            //Перевіряємо чи є в параметрах XML файл
            for (int i = 0; i < args.Length; i++)
            {
                if (args[i].ToUpper().StartsWith("/XML:"))
                {
                    varFileXML = args[i].Substring(5);
                }
                else if (args[i].ToUpper().StartsWith("/STEP:"))
                {
                    GlobalVar.varStep = Convert.ToInt32(args[i].Substring(6));
                }
            }

            //Перевіряємо наявність XML файла
            if (File.Exists(varFileXML))
            {
                MyXML myXML = new MyXML(varFileXML);
                GlobalVar.varServer = (myXML.GetVar("Server") == null? GlobalVar.varServer : myXML.GetVar("Server"));
                GlobalVar.varDB     = (myXML.GetVar("Database") == null? GlobalVar.varDB : myXML.GetVar("Database"));
                //GlobalVar.varStep = ( myXML.GetVar("DefaultStep") == null? GlobalVar.varStep : Convert.ToInt32( myXML.GetVar("DefaultStep")) );
                GlobalVar.varMaxParallel     = (myXML.GetAttribute("maxParallel", "XMLA") == null ?  GlobalVar.varMaxParallel : Convert.ToInt32(myXML.GetAttribute("maxParallel", "XMLA")));
                GlobalVar.varConectSQL       = myXML.GetVar("ConectSQL");
                GlobalVar.varKeyErrorLogFile = (myXML.GetVar("KeyErrorLogPath") == null ? GlobalVar.varKeyErrorLogFile :myXML.GetVar("KeyErrorLogPath") + "\\Error_" + DateTime.Now.ToString("yyyyMMdd") + ".log");
                if (myXML.GetVar("Step" + GlobalVar.varStep.ToString().Trim(), "ProcessDimension") != null)
                {
                    MyXMLA.SetProcessTypeDimension(myXML.GetVar("Step" + GlobalVar.varStep.ToString().Trim(), "ProcessDimension"));
                }
                GlobalVar.varPrepareSQL          = myXML.GetVar("Step" + GlobalVar.varStep.ToString().Trim(), "PrepareSQL");
                GlobalVar.varWaitSQL             = myXML.GetVar("Step" + GlobalVar.varStep.ToString().Trim(), "WaitSQL");
                GlobalVar.varTimeStart           = (myXML.GetAttribute("Start", "Step" + GlobalVar.varStep.ToString().Trim(), "Time") == null ? GlobalVar.varTimeStart : Convert.ToInt32(myXML.GetAttribute("Start", "Step" + GlobalVar.varStep.ToString().Trim(), "Time")));
                GlobalVar.varTimeEnd             = (myXML.GetAttribute("End", "Step" + GlobalVar.varStep.ToString().Trim(), "Time") == null ? GlobalVar.varTimeEnd : Convert.ToInt32(myXML.GetAttribute("End", "Step" + GlobalVar.varStep.ToString().Trim(), "Time")));
                GlobalVar.varRestartServicesOlap = (myXML.GetVar("Step" + GlobalVar.varStep.ToString().Trim(), "RestartServicesOlap") == null ? GlobalVar.varRestartServicesOlap : Convert.ToInt32(myXML.GetVar("Step" + GlobalVar.varStep.ToString().Trim(), "RestartServicesOlap")));
                GlobalVar.varServicesOlap        = (myXML.GetVar("ServicesOlap") == null ? GlobalVar.varDB : myXML.GetVar("ServicesOlap"));
            }
//          string var= GlobalVar.varProcessDimension;

            //Параметри з командного рядка мають перевагу.
            for (int i = 0; i < args.Length; i++)
            {
                if (args[i].ToUpper().StartsWith("/SERVER:"))
                {
                    GlobalVar.varServer = args[i].Substring(8);
                }
                else if (args[i].ToUpper().StartsWith("/DB:"))
                {
                    GlobalVar.varDB = args[i].Substring(4);
                }
                else if (args[i].ToUpper().StartsWith("/CUBE:"))
                {
                    GlobalVar.varCube = args[i].Substring(6);
                }
                else if (args[i].ToUpper().StartsWith("/STEP:"))
                {
                    GlobalVar.varStep = Convert.ToInt32(args[i].Substring(6));
                }
                else if (args[i].ToUpper().StartsWith("/PARALLEL:"))
                {
                    GlobalVar.varMaxParallel = Convert.ToInt32(args[i].Substring(10));
                }
                else if (args[i].ToUpper().StartsWith("/XML:"))
                {
                    GlobalVar.varFileXML = args[i].Substring(5);
                }
                else if (args[i].ToUpper().StartsWith("/DAY:"))
                {
                    GlobalVar.varDayProcess = Convert.ToInt32(args[i].Substring(5));
                }
                else if (args[i].ToUpper().StartsWith("/STATE:2"))
                {
                    GlobalVar.varStep = -9998;
                }
                else if (args[i].ToUpper().StartsWith("/STATE"))
                {
                    GlobalVar.varStep = -9999;
                }
                else if (args[i].ToUpper().StartsWith("/DATESTART:"))
                {
                    GlobalVar.varDateStartProcess = DateTime.Parse(args[i].Substring(11));
                }
                else if (args[i].ToUpper().StartsWith("/DAYPROCESS:"))
                {
                    GlobalVar.varDayProcess = Convert.ToInt32(args[i].Substring(12));
                }
                else if (args[i].ToUpper().StartsWith("/PROCESSDIMENSION:"))
                {
                    MyXMLA.SetProcessTypeDimension(args[i].Substring(17));
                }
                else if (args[i].ToUpper().StartsWith("/PROCESSCUBE:"))
                {
                    MyXMLA.SetProcessTypeCube(args[i].Substring(13));
                }
                else if (args[i].ToUpper().StartsWith("/ARX"))
                {
                    GlobalVar.varIsArx = true;
                    if (args[i].ToUpper().Length == 14)
                    {
                        GlobalVar.varArxDate = DateTime.ParseExact(args[i].ToUpper().Substring(5), "dd.MM.yyyy", CultureInfo.InvariantCulture);
                    }
                }
                else if (args[i].ToUpper().StartsWith("/?"))
                {
                    Console.Write(varKey);
                    Console.ReadKey(true);
                    return;
                }
                else
                {
                    Console.Write("Колюч=>" + args[i].ToUpper() + " невірний. " + varKey);
                    Console.ReadKey(true);
                    return;
                }
            }


            GlobalVar.varFileLog = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) +
                                   "\\log\\process_" + GlobalVar.varDB.Trim() + "_" +
                                   DateTime.Now.ToString("yyyyMMdd") + "_" + GlobalVar.varStep.ToString().Trim() + ".txt";

            Log.log("START=> /Server:" + GlobalVar.varServer + " /DB:" + GlobalVar.varDB + " /CUBE:" + GlobalVar.varCube + " /Step: " + GlobalVar.varStep.ToString());

            if (1 == 0 && GlobalVar.varServicesOlap.Trim().Length > 0)
            {
                var varService = new Services(GlobalVar.varServicesOlap, GlobalVar.varServer);
                if (!varService.IsStart() || GlobalVar.varRestartServicesOlap == 1 || GlobalVar.varRestartServicesOlap == 3)
                {
                    if (varService.IsStart())
                    {
                        Log.log("Try ReStart =>" + GlobalVar.varServicesOlap + " in " + GlobalVar.varServer);
                        if (!varService.ReStart())
                        {
                            Log.log("No ReStart =>" + GlobalVar.varServicesOlap + " in " + GlobalVar.varServer + "\n" + varService.log);
                            return;
                        }
                        else
                        {
                            Log.log("ReStart OK");
                        }
                    }
                    else
                    {
                        if (!varService.Start())
                        {
                            Log.log("Try start =>" + GlobalVar.varServicesOlap + " in " + GlobalVar.varServer);
                            if (!varService.Start())
                            {
                                Log.log("No start =>" + GlobalVar.varServicesOlap + " in " + GlobalVar.varServer + "\n" + varService.log);
                                return;
                            }
                            else
                            {
                                Log.log("Start OK");
                            }
                        }
                    }
                }
            }

            XMLABuilder.Process(@"Data Source=" + GlobalVar.varServer + ";Provider=msolap;", GlobalVar.varDB, GlobalVar.varCube, GlobalVar.varStep, GlobalVar.varMetod);
            Log.log("END=> /Server:" + GlobalVar.varServer + " /DB:" + GlobalVar.varDB + " /CUBE:" + GlobalVar.varCube + " /Step:" + GlobalVar.varStep.ToString());
            if (GlobalVar.varStep < -9990)
            {
                Console.ReadKey(true);
            }
        }