DataTransformer: IVZDataAdapter;
DataTransformer: Prognoz.Platform.Interop.Visualizators.IVZDataAdapter;
The DataTransformer property determines data transformer.
Executing the example requires that the repository contains an express report with the EXP identifier. The Size metric should be selected in the bubble tree report. The module containing the example should have links to the Express, Metabase and Visualizators system assemblies. The selected procedure should be called from the Main entry point.
Transform a set of numbers by the custom transformer used to increase the input value as much as 20 times:
// Determine custom data transformer
Class MyAdapter: object, IVZDataAdapter
// Input value is to be increased 20-fold
Function GetData(Value: Variant): Variant;
Begin
Return Value * 20
End Function GetData;
End Class MyAdapter;
Sub UserProc;
Var
Metabase: IMetabase; // Metabase
EaxAnalyzer: IEaxAnalyzer; // Express report
BubbleTree: IVZBubbleTree; // Bubble tree
SizeVisual: IVZNumericVisual; // Visualizator of tree bubbles size
DataSourceMapping: IVZDataSourceMapping; // Settings for data mapping with colors
DataTransformer: IVZDataAdapter; // Data transformer
Begin
// Get metabase object
Metabase := MetabaseClass.Active;
// Open express report
EaxAnalyzer := Metabase.ItemById("EXP").Edit As IEaxAnalyzer;
// Get bubble tree
BubbleTree := EaxAnalyzer.BubbleTree.BubbleTree;
// Get visualizer used to determine tree bubbles size
SizeVisual := BubbleTree.SizeVisual;
// Get settings of data mapping
DataSourceMapping := SizeVisual.NumericMapping;
// Set mapping type "Data transformer"
DataSourceMapping.MappingType := VisualizatorDataMappingType.DataMappingTransformer;
// Create and set custom data transformer
DataTransformer := New MyAdapter.Create;
DataSourceMapping.DataTransformer := DataTransformer;
Debug.WriteLine("Data transformation:");
Debug.IndentLevel := 1;
Debug.WriteLine("Input: -0.05, output: " +
((DataTransformer.GetData(-0.05)) As Double).ToString);
Debug.WriteLine("Input: 0, output: " +
((DataTransformer.GetData(0)) As Double).ToString);
Debug.WriteLine("Input: 0.05, output: " +
((DataTransformer.GetData(0.05)) As Double).ToString);
Debug.WriteLine("Input: 5, output: " +
((DataTransformer.GetData(5)) As Double).ToString);
Debug.WriteLine("Input: 1000, output: " +
((DataTransformer.GetData(1000)) As Double).ToString);
// Set visualizer used to determine tree bubbles size
BubbleTree.SizeVisual := SizeVisual;
End Sub UserProc;
After executing the example, the custom transformer is created used to increase output value as much as 20 times, the development environment console window shows results of number transformation: -0.05, 0, 0.05, 5 and 1000:
Data transformation:
Input: -0.05, ouput: -1
Input: 0, output: 0
Input: 0.05, output: 1
Input: 5, output: 100
Input: 1000, output: 20000
Executing the example requires that the repository contains an express report with the EXP identifier. The Size metric should be selected in the bubble tree report. The examples below are inserted into the Program.NET assembly module. The Express, Metabase and Visualizators assemblies should be imported to this module from the Prognoz.Platform.Interop system assembly.
First implement the IVZDataAdapter interface by determining the MyAdapter class with open property:
// Determine custom data transformer
Public Class MyAdapter: object, IVZDataAdapter
Value: String;
// Input value is to be increased 20-fold
Public Function GetData(Value: object): object;
Var
Result: double;
Begin
Result := double.Parse(Value.ToString()) * 20;
Return Result As Object
End Function GetData;
//Redetermine the Id open property of the IVZDataAdapter interface
Public Property Id: String
Get
Begin
Return Value;
End Get
Set
Begin
Value := "";
End Set
End Property Id;
End Class MyAdapter;
After executing the example, the custom data transformer is created used to increase input value 20-fold:
Now transform a set of source numbers by this transformer, and change the Main procedure in the Program module with the following code:
Public Shared Sub Main(Params: StartParams);
Var
Metabase: IMetabase; // Metabase
EaxAnalyzer: IEaxAnalyzer; // Express report
BubbleTree: IVZBubbleTree; // Bubble tree
SizeVisual: IVZNumericVisual; // Visualizator of tree bubbles size
DataSourceMapping: IVZDataSourceMapping; // Settings for data mapping with colors
DataTransformer: IVZDataAdapter; // Data transformer
Begin
// Get metabase object
Metabase := Params.Metabase;
// Open express report
EaxAnalyzer := Metabase.ItemById["EXP"].Edit() As IEaxAnalyzer;
// Get bubble tree
BubbleTree := EaxAnalyzer.BubbleTree.BubbleTree;
// Get visualizer used to determine tree bubbles size
SizeVisual := BubbleTree.SizeVisual;
// Get settings of data mapping
DataSourceMapping := SizeVisual.NumericMapping;
// Set mapping type "Data transformer"
DataSourceMapping.MappingType := VisualizatorDataMappingType.vdmtDataMappingTransformer;
// Create and set custom data transformer
DataTransformer := New MyAdapter();
DataSourceMapping.DataTransformer := DataTransformer;
System.Diagnostics.Debug.WriteLine("Data transformation:");
System.Diagnostics.Debug.IndentLevel := 1;
System.Diagnostics.Debug.WriteLine("Input: -0.05, output: " +
((DataTransformer.GetData(-0.05)) As Double).ToString());
System.Diagnostics.Debug.WriteLine("Input: 0, output: " +
((DataTransformer.GetData(0)) As Double).ToString());
System.Diagnostics.Debug.WriteLine("Input: 0.05, output: " +
((DataTransformer.GetData(0.05)) As Double).ToString());
System.Diagnostics.Debug.WriteLine("Input: 5, output: " +
((DataTransformer.GetData(5)) As Double).ToString());
System.Diagnostics.Debug.WriteLine("Input: 1000, output: " +
((DataTransformer.GetData(1000)) As Double).ToString());
// Set visualizer used to determine tree bubbles size
BubbleTree.SizeVisual := SizeVisual As VZNumericVisual;
End Sub;
The result of the executed example is the same as that, executed for Fore language.
See also: