При работе с экспресс-отчетом, который построен на нескольких источниках, общие для всех источников измерения отображаются как отдельные измерения. Уникальные для источников измерения объединяются в отдельное измерение и отображаются на вкладке «Частные измерения». Иногда может возникнуть необходимость переместить в «Частные измерения» одно из общих измерений. Рассмотрим пример такого перемещения с использованием языка Fore.
Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с наименованием «Button1», компонентов TabSheetBox, ErAnalyzerDimPanel и компонента UiErAnalyzer с наименованием «UiErAnalyzer1», который является источником данных для указанных визуальных компонентов. К «UiErAnalyzer1» подключен экспресс-отчет, построенный на нескольких источниках данных. Среди общих измерений имеется измерение с идентификатором Country.
Помимо тех сборок, которые будут подключены автоматически, также необходимо подключить следующие системные сборки репозитория: Cubes, Dimensions, Express, Metabase, Pivot.
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Analyzer: IEaxAnalyzer;
Pivot: IPivot;
Selection, NewSel: IDimSelection;
DataSources: IEaxDataSources;
FixInfo: ICubeDimensionFixInfo;
VirtualCube: IVirtualCube;
CompoundSelection: ICompoundSelection;
SourcesSelection: IDimSelectionSet;
SourceSelection: ICompoundSelection;
DimFix: ICubeDimensionFix;
DimKey, CompoundDimKey, i: Integer;
Begin
Analyzer := UiErAnalyzer1.ErAnalyzer;
Pivot := Analyzer.Pivot;
//Отметка измерения, которое будет перемещено в частные
//Данное измерение имеется во всех источниках экспресс-отчета
//Отметка необходима для ее дальнейшего восстановления в составной отметке частного измерения
Selection := Pivot.Selection.FindById("COUNTRY");
//Ключ перемещаемого измерения
DimKey := Selection.Dimension.Key;
//Фиксация измерения в виртуальном кубе, который создан под экспресс-отчетом
DataSources := Analyzer.DataSources;
For i := 0 To DataSources.Count - 1 Do
FixInfo := DataSources.Item(i).VirtualCubeSource.FixInfo;
DimFix := FixInfo.FindByKey(DimKey);
DimFix.Fixed := True;
End For;
//Получение составной отметки, которая включает в себя все отметки частных измерений
VirtualCube := (Pivot.DataSource As ICubeInstanceDestination).Cube.Cube As IVirtualCube;
CompoundDimKey := (VirtualCube.FactDimension As IMetabaseObjectDescriptor).Key;
CompoundSelection := Pivot.Selection.FindByKey(CompoundDimKey) As ICompoundSelection;
//Коллекция отметок частных измерений
//Каждая отметка частного измерения в свою очередь также является составной отметкой измерений, которые являются уникальными для
//конкретного источника данных
SourcesSelection := CompoundSelection.Selection;
Pivot.BeginSelectionUpdate;
For Each SourceSelection In SourcesSelection Do
//Добавление в отметку частного измерения отметки перемещенного измерения
NewSel := SourceSelection.Selection.Add(Selection.Dimension);
//Восстановление его отметки, в соответствии с той, которая была до перемещения
Selection.CopyTo(NewSel, True);
End For;
Pivot.EndSelectionUpdate;
//Обновление источников данных
DataSources.Refresh;
End Sub Button1OnClick;
Список измерений выглядит следующим образом:
После нажатия на кнопку список измерений будет выглядеть следующим образом:
См. также: