/* 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); }
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); } }