Работа с экспресс-отчетом

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

В данном примере описываются некоторые приемы работы с экспресс-отчетом. После запуска примера выполняются следующие операции:

Исходный код

Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:

-(void)executeExample {
    // Получаем экспресс-отчет
    SPPLOlapReport report = m_olapReport;
    // Получаем заголовок экспресс-отчета
    SNString title = report->title();
    printf("Заголовок экспресс-отчета: %s\n",title->UTF8String());
    // Получаем копию экспресс-отчета
    SPPLOlapReport copy =report->copy()->qClass<PPLOlapReport>();
    // Получаем копию экспресс-отчета без содержимого хранилища пользовательских данных
    SPPLOlapReport copyWithoutStorage =report->copyWithoutStorage()->qClass<PPLOlapReport>();
    // Получаем массив измерений
    SNArray allDimensions = [self allDimensions];
    if (allDimensions->count() < 1) {
        printf("Не найдено ни одного измерения");
        return;
    }
    // Получаем первое измерение в массиве
    SPPLDimension dimension = allDimensions->objectAtIndex<PPLDimension>(0);
    printf("Количество фиксированных измерений экспресс-отчета: %d\n", report->fixedDimensions()->count());
    // Указываем фиксированное измерение
    report->putDimensionToFixed(dimension);
    printf("Количество фиксированных измерений экспресс-отчета: %d\n", report->fixedDimensions()->count());
    printf("Количество измерений, размещенных по столбцам, для первой копии отчета: %d\n",copy->leftDimensions()->count());
    // Указываем для первой копии отчета измерение, расположенное по столбцам
    copy->putDimensionToLeft(dimension);
    printf("Размещение измерения по столбцам для первой копии отчета\n");
    printf("Количество измерений, размещенных по столбцам, для первой копии отчета: %d\n", copy->leftDimensions()->count());
    // Получаем второе измерение куба в массиве
    SPPLDimension dimension1 = allDimensions->objectAtIndex<PPLDimension>(1);
    printf("Количество измерений, размещенных по строкам, для второй копии отчета: %d\n", copyWithoutStorage->topDimensions()->count());
    // Указываем для второй копии отчета измерение, размещенное по строкам
    copyWithoutStorage->putDimensionToTop(dimension1);
    printf("Размещение измерения по строкам для второй копии отчета\n");
    printf("Количество измерений, размещенных по строкам, для второй копии отчета: %d\n", copyWithoutStorage->topDimensions()->count());
    // Получаем источник данных экспресс-отчета
    SPPLDataSource dataSource = report->dataSource();
    printf("Наименование объекта, на основе которого создан источник данных экспресс-отчета: %s\n",dataSource->descriptor()->name()->UTF8String());
    // Получаем контейнер отметок элементов измерения в экспресс-отчете
    SPPLDimensionSelectionSet selectionSet = report->selectionSet();
    printf("Количество отметок элементов измерения в контейнере отметок экспресс-отчета: %d\n",selectionSet->selectionsCount());
    // Задаем для первой копии отчёта новый идентификатор для измерения метрик
    copy->setMetrics(NStr("Новое измерение метрик"));
    printf("Идентификатор для измерения метрик у первой копии отчета: %s\n",copy->metrics()->UTF8String());
    // Задаем для первой копии отчёта новый идентификатор для измерения объектов наблюдения
    copy->setObjectives(NStr("Новое измерение объектов наблюдения"));
    printf("Идентификатор для измерения объектов наблюдения у первой копии отчета: %s\n",copy->objectives()->UTF8String());
    // Задаем для первой копии отчета новый идентификатор календарного измерения, используемого для построения временной шкалы
    copy->setTimeline(NStr("Новое измерение временной шкалы"));
    printf("Идентификатор календарного измерения, используемого для построения временной шкалы, в первой копии отчета: %s\n",copy->timeline()->UTF8String());
    // Создаем копию объекта репозитория для первого измерения
    SPPLMetabaseRepositoryObjectDescriptor descriptor = dimension->relatedObjectDescriptor()->copy()->qClass<PPLMetabaseRepositoryObjectDescriptor>();
    // Создаем новый источник данных на основе копии объекта репозитория
    SPPLDataSource createdDataSource = PPLDataSource::dataSource(descriptor);
    if (createdDataSource != NULL) {
        // Задаем новое наименование объекта репозитория, на основе которого создан источник данных
        createdDataSource->descriptor()->setName(NStr("Новый объект репозитория"));
        // Устанавливаем новый источник данных для первой копии отчета
        copy->setDataSource(createdDataSource);
        printf("Наименование объекта, на основе которого создан источник данных первой копии отчета: %s\n",copy->dataSource()->descriptor()->name()->UTF8String());
    } else {
        printf("Не удалось создать новый источник данных на основе копии объекта репозитория");
    }
    printf("Наименование объекта, на основе которого создан источник данных первой копии отчета: %s\n",copy->dataSource()->descriptor()->name()->UTF8String());
    // Получаем копию контейнера отметок элементов измерения экспресс-отчета
    SPPLDimensionSelectionSet createdSelectionSet = report->selectionSet()->copy()->qClass<PPLDimensionSelectionSet>();
    // Получаем последнюю отметку в копии контейнера
    SPPLDimensionSelection selection = createdSelectionSet->getSelectionByIndex(createdSelectionSet->selectionsCount() - 1);
    // Удаляем последнюю отметку из копии контейнера
    createdSelectionSet->removeSelection(selection->dimension()->id());
    // Задаем новый контейнер отметок для первой копии отчета
    copy->setSelectionSet(createdSelectionSet);
    printf("Количество отметок элементов измерения в контейнере отметок первой копии отчета: %d\n",copy->selectionSet()->selectionsCount());
    // Выводим информацию об источнике данных карты
    [self printMapDSInfo];
}
-(void) printMapDSInfo {
    // Получаем контроллер для работы с экспресс-отчётом
    MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
    // Получаем делегат для работы с экспресс-отчётом
    EAReportDelegateImpl *delegate = [contr delegate];
    // Сохраняем текущее состояние отчёта
    [delegate saveReport];
    // Получаем настройки источника данных карты
    SNDictionary mapDSSettings = [delegate olapReport]->mapDSSettings();
    if (mapDSSettings != nullptr) {
        printf("Доступные ключи справочника настроек карты:\n");
        N_FOREACH(SNString, key, mapDSSettings->allKeys()) {
            printf("%s\n", key->UTF8String());
        }
        } else  {
        printf("Настройки источника данных карты не определены\n");
    }
}

В результате выполнения примера в консоли среды разработки была выведена информация об экспресс-отчете и его копиях, изменения в массиве измерений метрик, массиве измерений объектов наблюдения и массиве календарных измерений, по которым строится временная шкала объектов отчетов, а также информация о новом источнике данных и контейнере отметок первой копии отчета :

Заголовок экспресс-отчета: &[Dimensions.FACTS_WDI_COPY_1557]

Количество фиксированных измерений экспресс-отчета: 1

Количество фиксированных измерений экспресс-отчета: 2

Количество измерений, размещенных по столбцам, для первой копии отчета: 1

Размещение измерения по столбцам для первой копии отчета

Количество измерений, размещенных по столбцам, для первой копии отчета: 2

Количество измерений, размещенных по строкам, для второй копии отчета: 1

Размещение измерения по строкам для второй копии отчета

Количество измерений, размещенных по строкам, для второй копии отчета: 2

Наименование объекта, на основе которого создан источник данных экспресс-отчета: World Development Indicators

Количество отметок элементов измерения в контейнере отметок экспресс-отчета: 3

Идентификатор для измерения метрик у первой копии отчета: Новое измерение метрик

Идентификатор для измерения объектов наблюдения у первой копии отчета: Новое измерение объектов наблюдения

Идентификатор календарного измерения, используемого для построения временной шкалы, в первой копии отчета: Новое измерение временной шкалы

Наименование объекта, на основе которого создан источник данных первой копии отчета: Новый объект репозитория

Доступные ключи справочника настроек карты:

COLOR_KEY

DIM_KEY

SETTINGSFORMETRICS

SIZE_KEY

HEIGHT_KEY

См. также:

Примеры использования библиотеки pplib++