FilterTransformations: IEaxDataAreaTransformations;
FilterTransformations: Prognoz.Platfrorm.Interop.Express.IEaxDataAreaTransformations;
Свойство FilterTransformations возвращает коллекцию формул преобразования данных, заданных при фильтрации.
Формула, которая будет указана в выражении формулы преобразования, должна возвращать логическое значение. Для включения фильтрации по формуле необходимо установить свойствам Pivot.Filter.Enable и Pivot.Filter.UseTransformationFilter значение True. Если для ячейки по заданной формуле возвращается значение True, то ячейка попадает в список фильтруемых и должна быть скрыта, при значении False - оставлена видимой. Какие именно ячейки будут скрыты зависит от настроек, заданных в других свойствах интерфейса IPivotFilter.
Для выполнения примера предполагается наличие регламентного отчёта с идентификатором «REPORT». В отчете создана аналитическая область данных.
Sub UserProc;
Var
MB: IMetabase;
Report: IPrxReport;
DataArea: IEaxDataArea;
DataAreaSlice: IEaxDataAreaSlice;
DimSS: IDimSelectionSet;
Transforms: IEaxDataAreaTransformations;
Transform: IEaxDataAreaTransformation;
Filter: IPivotFilter;
Begin
MB := MetabaseClass.Active;
Report := MB.ItemById("REPORT").Edit As IPrxReport;
DataArea := Report.DataArea As IEaxDataArea;
DataAreaSlice := DataArea.Slices.Item(0);
//Измерение источника
DimSS := DataAreaSlice.Selection;
//Получим формулу преобразования для фильтрации
Transforms := DataAreaSlice.FilterTransformations;
If Transforms.Count > 0 Then
Transform := Transforms.Item(0);
Else
Transform := Transforms.Add(DimSS, Null, -1);
End If;
//Зададим формулу: фильтровать элементы, по которым значение больше 1000
Transform.Enabled := True;
Transform.Expression.AsString := "{X[t]} > 1000";
//Включим использование фильтрации по формуле
Filter := (DataAreaSlice As IEaxDataAreaPivotSlice).Pivot.Filter;
Filter.Enabled := True;
Filter.Elements := PivotFilterElements.Rows;
Filter.UseTransformationFilter := True;
//Обновим, чтобы отображались только отфильтрованные данные
DataAreaSlice.Views.Item(0).Refresh;
//Сохранение
Report.MetabaseObject.Save;
End Sub UserProc;
При выполнении примера в аналитической области будет включена фильтрация данных по формуле: будут скрыты строки, в которых значение всех ячеек больше 1000.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Pivot;
Imports Prognoz.Platform.Interop.Report;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Report: IPrxReport;
DataArea: IEaxDataArea;
DataAreaSlice: IEaxDataAreaSlice;
DimSS: IDimSelectionSet;
Transforms: IEaxDataAreaTransformations;
Transform: IEaxDataAreaTransformation;
Filter: IPivotFilter;
Begin
MB := Params.Metabase;
Report := MB.ItemById["REPORT"].Edit() As IPrxReport;
DataArea := Report.DataArea As IEaxDataArea;
DataAreaSlice := DataArea.Slices.Item[0];
//Измерение источника
DimSS := DataAreaSlice.Selection;
//Получим формулу преобразования для фильтрации
Transforms := DataAreaSlice.FilterTransformations;
If Transforms.Count > 0 Then
Transform := Transforms.Item[0];
Else
Transform := Transforms.Add(DimSS, Null, uinteger.maxValue);
End If;
//Зададим формулу: фильтровать элементы, по которым значение больше 1000
Transform.Enabled := True;
Transform.Expression.AsString := "{X[t]} > 1000";
//Включим использование фильтрации по формуле
Filter := (DataAreaSlice As IEaxDataAreaPivotSlice).Pivot.Filter;
Filter.Enabled := True;
Filter.Elements := PivotFilterElements.pfeRows;
Filter.UseTransformationFilter := True;
//Обновим, чтобы отображались только отфильтрованные данные
DataAreaSlice.Views.Item[0].Refresh();
//Сохранение
Report.MetabaseObject.Save();
End Sub;
См. также: