none
Создание партиций с помощью AMO RRS feed

  • Вопрос

  • Всем привет.
    Написал скрипт, который в начале каждого месяца сливает две партиции и создает еще одну.
    if (DateTime.Now.Day == 1)
                    {
                        Partition part = cubeAS.MeasureGroups["1"].Partitions.FindByName("part_" + DateTime.Now.Year.ToString());
                        if (part != null)
                        {
                            Partition partPrev = cubeAS.MeasureGroups["1"].Partitions.FindByName("prev");
                            List<Partition> lspPart = new List<Partition>();
                            Microsoft.AnalysisServices.QueryBinding query = new QueryBinding();
                            query.DataSourceID = "OLAP";
                            if ((DateTime.Now.Month == 1) || (DateTime.Now.Month == 2))
                            {
                            query.QueryDefinition = "SELECT  * FROM [dbo].[table] WHERE (Year(DateActual)="+DateTime.Now.Year.ToString()+" ) 
    and   (Month(DateActual)=1) ";
                            }
                            else
                            {
                                query.QueryDefinition = "SELECT  * FROM [dbo].[table] WHERE (Year(DateActual)=" +
    DateTime.Now.Year.ToString() + " ) and   ((Month(DateActual)>=1) and (Month(DateActual)<="+(DateTime.Now.Month-2).ToString()+")) ";
                            }
                            part.Source = query;
    
                            lspPart.Add(partPrev);
    
                            try
                            {
                                part.Merge(lspPart);
                                part.Update();
                            }
                            catch(Exception exp)
                            {
                                string message = exp.Message;
                                return (int)ScriptResults.Failure;
                            }
                            cubeAS.Update();
                            try
                            {
                                partPrev = null;
                                partPrev = cubeAS.MeasureGroups["1"].Partitions.Add("prev");                            
                            }
                            catch (Exception exp)
                            {
                                string message = exp.Message;
                                return (int)ScriptResults.Failure;
                            }
    
    Возможно, я не прав, но после того как партиции объединились part.Merge(lspPart), партиция с названием "prev", в коде объект partPrev, должна исчезнуть(удалиться, слиться, объединится и т.д.), то есть я не должен ее находить с помощью FindByName, но почему то нахожу, несмотря на то, что после сливки партиций делаю обновление куба cubeAS.Update().
    Вот сижу и думаю, это так и должно быть?
    Или мне надо найти эту партицию, удалить, а потом создать заново?
    • Перемещено I.Vorontsov 16 марта 2010 г. 10:44 (От:Сообщество SQLClub.ru)
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 0:29 MSDN Forums consolidation (От:SQL Server для разработчиков)
    15 марта 2010 г. 18:24

Ответы

  • Всем спасибо, разобрался. Для обновлении структуры необходимо использовать не Update для куба, а функцию Refresh().
    • Помечено в качестве ответа Evgen1982MVP 16 марта 2010 г. 14:10
    16 марта 2010 г. 14:10