IVZDataSourceMapping.DataTransformer

Синтаксис Fore

DataTransformer: IVZDataAdapter;

Синтаксис Fore.NET

DataTransformer: Prognoz.Platform.Interop.Visualizators.IVZDataAdapter;

Описание

Свойство DataTransformer определяет преобразователь данных.

Пример Fore

Для выполнения примера предполагается наличие в репозитории экспресс-отчета с идентификатором «EXP». В отчете для пузырькового дерева должна быть выбрана метрика «Размер». Модуль, в котором размещается пример, должен иметь ссылки на системные сборки Express, Metabase и Visualizators. Указанная процедура должна вызываться из точки входа Main.

Преобразуем набор чисел с помощью собственного преобразователя, увеличивающего значение на входе в 20 раз:

// Определим собственный преобразователь
Class MyAdapter: object, IVZDataAdapter
    // Значение на входе будем увеличивать в 20 раз
    Function GetData(Value: Variant): Variant;
        Begin
        Return Value * 20
    End Function GetData;
End Class MyAdapter;
    
Sub UserProc;
Var
    Metabase: IMetabase; // Метабаза
    EaxAnalyzer: IEaxAnalyzer; // Экспресс-отчёт
    BubbleTree: IVZBubbleTree; // Пузырьковое дерево
    SizeVisual: IVZNumericVisual; // Визуализатор размера пузырьков дерева
    DataSourceMapping: IVZDataSourceMapping; // Настройки сопоставления данных цветам
    DataTransformer: IVZDataAdapter; // Преобразователь данных
Begin       
    // Получим объект метабазы
    Metabase := MetabaseClass.Active;
    // Откроем экспресс-отчёт
    EaxAnalyzer := Metabase.ItemById("EXP").Edit As IEaxAnalyzer;
    // Получим пузырьковое дерево
    BubbleTree := EaxAnalyzer.BubbleTree.BubbleTree;
    // Получим визуализатор для определения размеров пузырьков дерева
    SizeVisual := BubbleTree.SizeVisual;
    // Получим настройки сопоставления данных
    DataSourceMapping := SizeVisual.NumericMapping;
    // Установим тип сопоставления "Преобразователь данных"
    DataSourceMapping.MappingType := VisualizatorDataMappingType.DataMappingTransformer;
    // Создадим и установим собственный преобразователь данных
    DataTransformer := New MyAdapter.Create;
    DataSourceMapping.DataTransformer := DataTransformer;
    Debug.WriteLine("Преобразование данных:");
    Debug.IndentLevel := 1;
    Debug.WriteLine("Вход: -0.05, выход: " + 
        ((DataTransformer.GetData(-0.05)) As Double).ToString);
    Debug.WriteLine("Вход: 0, выход: " + 
        ((DataTransformer.GetData(0)) As Double).ToString);     
    Debug.WriteLine("Вход: 0.05, выход: " + 
            ((DataTransformer.GetData(0.05)) As Double).ToString);      
    Debug.WriteLine("Вход: 5, выход: " + 
            ((DataTransformer.GetData(5)) As Double).ToString);                         
    Debug.WriteLine("Вход: 1000, выход: " + 
            ((DataTransformer.GetData(1000)) As Double).ToString);
    // Установим визуализатор для определения размеров пузырьков дерева
    BubbleTree.SizeVisual := SizeVisual;            
End Sub UserProc;

В результате выполнения примера был создан собственный преобразователь, увеличивающий значение на входе в 20 раз, а в консоли среды разработки были выведены результаты преобразования чисел -0.05, 0, 0.05, 5 и 1000:

Преобразование данных:

    Вход: -0.05, выход: -1

    Вход: 0, выход: 0

    Вход: 0.05, выход: 1

    Вход: 5, выход: 100

    Вход: 1000, выход: 20000

Пример Fore.NET

Для выполнения примера предполагается наличие в репозитории экспресс-отчета с идентификатором «EXP». В отчете для пузырькового дерева должна быть выбрана метрика «Размер». Приведённые ниже примеры вставляются в модуль Program .NET-сборки. В данный модуль должны быть импортированы сборки Express, Metabase и Visualizators из системной сборки Prognoz.Platform.Interop.

Сначала реализуем интерфейс IVZDataAdapter, определив класс MyAdapter с открытым свойством:

// Определим собственный преобразователь
Public Class MyAdapter: object, IVZDataAdapter
    Value: String;
    // Значение на входе будем увеличивать в 20 раз
    Public Function GetData(Value: object): object;
    Var
        Result: double;
    Begin
        Result := double.Parse(Value.ToString()) * 20;
        Return Result As Object
    End Function GetData;
    
 //Переопределяем открытое свойство Id интерфейса IVZDataAdapter
    Public Property Id: String 
         Get
         Begin
             Return Value;
         End Get
         Set
         Begin
             Value := "";
         End Set 
     End Property Id;
End Class MyAdapter;

В результате выполнения примеров был создан собственный преобразователь, увеличивающий значение на входе в 20 раз.

Теперь преобразуем набор исходных чисел  с помощью данного преобразователя, заменив процедуру Main в модуле Program следующим кодом:

Public Shared Sub Main(Params: StartParams);
Var
    Metabase: IMetabase; // Метабаза     
    EaxAnalyzer: IEaxAnalyzer; // Экспресс-отчёт
    BubbleTree: IVZBubbleTree; // Пузырьковое дерево
    SizeVisual: IVZNumericVisual; // Визуализатор размера пузырьков дерева
    DataSourceMapping: IVZDataSourceMapping; // Настройки сопоставления данных цветам
    DataTransformer: IVZDataAdapter; // Преобразователь данных
Begin
    // Получим объект метабазы
    Metabase := Params.Metabase;
    // Откроем экспресс-отчёт
    EaxAnalyzer := Metabase.ItemById["EXP"].Edit() As IEaxAnalyzer;
    // Получим пузырьковое дерево
    BubbleTree := EaxAnalyzer.BubbleTree.BubbleTree;
    // Получим визуализатор для определения размеров пузырьков дерева
    SizeVisual := BubbleTree.SizeVisual;
    // Получим настройки сопоставления данных
    DataSourceMapping := SizeVisual.NumericMapping; 
    // Установим тип сопоставления "Преобразователь данных"
    DataSourceMapping.MappingType := VisualizatorDataMappingType.vdmtDataMappingTransformer;
    // Создадим и установим собственный преобразователь данных
    DataTransformer := New MyAdapter();
    DataSourceMapping.DataTransformer := DataTransformer;
    System.Diagnostics.Debug.WriteLine("Преобразование данных:");
    System.Diagnostics.Debug.IndentLevel := 1;
    System.Diagnostics.Debug.WriteLine("Вход: -0.05, выход: " +
        ((DataTransformer.GetData(-0.05)) As Double).ToString());
    System.Diagnostics.Debug.WriteLine("Вход: 0, выход: " +
        ((DataTransformer.GetData(0)) As Double).ToString());
    System.Diagnostics.Debug.WriteLine("Вход: 0.05, выход: " +
            ((DataTransformer.GetData(0.05)) As Double).ToString());
    System.Diagnostics.Debug.WriteLine("Вход: 5, выход: " +
            ((DataTransformer.GetData(5)) As Double).ToString());
    System.Diagnostics.Debug.WriteLine("Вход: 1000, выход: " +
            ((DataTransformer.GetData(1000)) As Double).ToString());
    // Установим визуализатор для определения размеров пузырьков дерева
    BubbleTree.SizeVisual := SizeVisual As VZNumericVisual;                 
End Sub;

Результат выполнения примера аналогичен результату, полученному после выполнения примера для языка Fore.

См. также:

IVZDataSourceMapping