From 9d85964317ef890d2c55f3217d31240234f0516b Mon Sep 17 00:00:00 2001 From: Aitor Murguzur Date: Tue, 25 Jun 2024 11:24:12 +0200 Subject: [PATCH] Modify the data tranformation part in "How to create a schema" --- docs/How-to guides/How to create a schema.md | 44 ++++++++++++++---- docs/How-to guides/img/click-to-tranform1.png | Bin 0 -> 8199 bytes .../How-to guides/img/transformation-type.png | Bin 0 -> 10929 bytes 3 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 docs/How-to guides/img/click-to-tranform1.png create mode 100644 docs/How-to guides/img/transformation-type.png diff --git a/docs/How-to guides/How to create a schema.md b/docs/How-to guides/How to create a schema.md index cce3205..9d83a29 100644 --- a/docs/How-to guides/How to create a schema.md +++ b/docs/How-to guides/How to create a schema.md @@ -70,24 +70,50 @@ Timestamp ones, the same as the rest with an extra one: ![Payload Timestamp](img/payload-timestamp.png) -### Data tranformation +Once the schema is totally represented the ‘save’ button will register the schema. This will create the necessary machinery for the data validation and ingestion, it will also create the needed database structure for the data to be stored. + + +## Data tranformation + -This would be a data transformation functionality during ingestion, which now includes advanced options such as the application of scaling and offsetting. This feature allows users to adjust their data more precisely during the ingestion process, this will be applicable to integers and decimals. +The data transformation functionality allows users to apply scaling and offsetting during data ingestion. +Data tranfromation includes advanced options such as the application of scaling and offsetting. This feature allows users to adjust their data more precisely during the ingestion process, this will be applicable to the following item types. + +- Integer +- Integer, as text +- Integer, as hexadecimal text +- Decimal +- Decimal, as text -How to Use the Functionality +#### How to use the Functionality **Step 1: Access the Ingestion Configuration** -Navigate to the data ingestion module in the Biotz platform. -Select the "Data Transformation" option clicking where it says "fx": will only appear on click when having selected, integer, integer as text, integer as hexadecimal text, decimal and decimal as text. + +To access the data ingestion flows on the Biotz platform and select the "Data Transformation" option, first, navigate to the left-hand side of the main menu on the Biotz platform and select "Setup". From there, choose "Data Ingestion Flows", then, select the appropriate device type, followed by the corresponding message type, and then click on "New Schema" to start defining a new data schema. + + +Once on the schema definition screen, select the item type you want to transform, ensuring it is one of the following: integer, integer as text, integer as hexadecimal text, decimal, or decimal as text. After selecting the item type, the "fx" icon will appear next to the item name data type. Click on this icon to access the data transformation options. +
- ![Creating panels](img/click-to-tranform.png) + ![Creating panels](img/click-to-tranform1.png)
**Step 2: Define Transformation Rules with Scale and Offset** +This is what will appear when you click on the "fx" button: + +
+ ![Creating panels](img/transformation.png) +
+ Click on "Tranformation type". Select the type of transformation you want to apply, you can only choose scale and offset. + +
+ ![Creating panels](img/transformation-type.png) +
+ Configure the specific parameters of the transformation. For example: @@ -96,15 +122,17 @@ Scale: 1.5 Offset: -2 This means that each data value will be multiplied by 1.5 and then 2 will be subtracted. +To add more transformations click on the "add tranformation" button, once the transformations are done, click on "save". Once the transformations are saved the "fx" button will show a yellow circle to show that the transformations have been applied. +
- ![Creating panels](img/transformation.png) + ![Creating panels](img/click-to-tranform.png)
**Step 3: Apply Transformations** Associate the defined transformation rules with the data ingestion flow. -Once the schema is totally represented the ‘save’ button will register the schema. This will create the necessary machinery for the data validation and ingestion, it will also create the needed database structure for the data to be stored. +With this process you will be able to add data transformations for your new schema, remember that it can only be applied to the previously mentioned item types, ## Create a schema using the text editor diff --git a/docs/How-to guides/img/click-to-tranform1.png b/docs/How-to guides/img/click-to-tranform1.png new file mode 100644 index 0000000000000000000000000000000000000000..b2697778f684f278a3c9c43b114a2fb136cff8e4 GIT binary patch literal 8199 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