Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Panel
borderStylesolid
titleOn this page you will learn about:

Table of Contents
maxLevel2
minLevel2



Panel
borderStylesolid
titleRead more:




Using If / Then construct

Use case:

You have a table with the stationary orders. You need to output a new column in the table with the order priority according to the total sum of money: less than $1000 is Low, from $1000 to $2000 is Medium, and more than $2000 is High.

Solution:

  1. Switch the page to the edit mode.
  2. Insert the Table Transformer macro and paste the table or the macros outputting tables within the macro body.
  3. Select the macro and click Edit.
  4. In the Presets tab select Custom transformation and click Next.
  5. Enter the following SQL query:

    Code Block
    languagesql
    SELECT
       *,
       CASE
          WHEN
             'Subtotal' < 1000 
          THEN
             "LOW" 
          WHEN
             'Subtotal' >= 1000 
             AND 'Subtotal' < 2000 
          THEN
             "MEDIUM" 
          ELSE
             "HIGH" 
       END
       AS 'Priority' 
    FROM
       T1

    CASE WHEN ... THEN ... ELSE ... END goes through conditions and return a value when the first condition is met.

    AS '...' outputs a new 'Priority' column.
  6. Click Next.
  7. Define the table settings and view options if needed. 
  8. Save the macro and the page.



Handy Carousel
delay10



Info

If you want to replace the words Low, Medium and High by prominent statuses using the default Status macro or the Handy Status macro, just place a one-column table containing each status and the same column label in the macro body. Don't change anything in the SQL query.



Handy Carousel
delay10




Using formulas

Use case:

You have a table with the number of added lines of code and the number of defects. You need to calculate the quality of the code. The number of defects less than one defect per 10 lines indicates the good quality of the code. Otherwise the quality of the code is bad.

Solution:

  1. Switch the page to the edit mode.
  2. Insert the Table Transformer macro and paste the tables or the macros outputting tables within the macro body.
  3. Select the macro and click Edit.
  4. In the Presets tab select Custom transformation and click Next.
  5. Enter the following SQL query:

    Code Block
    languagesql
    SELECT
       *,
       (
          'Number of defects' * 10 / 'Lines of code added'
       )
       AS 'Defects per 10 lines',
       CASE
          WHEN
             (
                'Number of defects' * 10 / 'Lines of code added'
             )
             < 1 
          THEN
             "Good" 
          ELSE
             "Bad" 
       END
       AS 'Code quality' 
    FROM
       T1

    ('...' * 10 / '...') AS '...' calculates the number of defects per 10 lines of code and outputs the 'Defects per 10 lines' column. 

    CASE WHEN ... THEN ... ELSE ... END AS '...' goes through conditions and return a value when the first condition is met and outputs the 'Code quality' column.
  6. Click Next.
  7. Define the table settings and view options if needed.
  8. Save the macro and the page.


Handy Carousel
delay10



Info

You can merge two columns containing text with the help of formulas:

Code Block
languagesql
SELECT
   *,
   (
      'First name' + " " + 'Last name'
   )
   AS 'Full name' 
FROM
   T1




Handy Carousel
delay10




Merging tables using filtration

Use case:

You have two tables where the columns differ.

You need to merge two tables where the entrys meet the conditions:

  • transaction date in Table 1: October 2018
  • customer type in Table 2: business

Solution:

  1. Switch the page to the edit mode.
  2. Insert the Table Transformer macro and paste the tables or the macros outputting tables within the macro body.
  3. Select the macro and click Edit.
  4. In the Presets tab select Custom transformation and click Next.
  5. Enter the following SQL query:

    Code Block
    languagesql
    SELECT
       * 
    FROM
       T1 
       JOIN
          T2 
          ON T1.'Transaction ID' = T2.'Transaction ID' 
    WHERE
       (
          'Transaction Date' >= "10 / 1 / 2018" 
          AND 'Transaction Date' < "11 / 1 / 2018"
       )
       AND 
       (
          'Customer Type' = "Business"
       )

    WHERE ('...' >= "10/1/2018" AND '...' < "11/1/2018") AND ('...' = "...") extracts only those records that fulfill a specified condition.

  6. Click Next.
  7. Define the table settings and view options if needed.
  8. Save the macro and the page.



Handy Carousel
delay10




Calculating the number of workdays in a period of time

Use case:

You have a table containing a period of time (start date and end date).

You need to count the number of workdays during this time period.

Advanced use case:

You have an additional table with national holidays which you also shouldn't consider as workdays.

Solution:

  1. Switch the page to the edit mode.
  2. Insert the Table Transformer macro and paste the table within the macro body.
  3. Select the macro and click Edit.
  4. Switch to the SQL query tab.
  5. Enter the following SQL query:

    Code Block
    languagesql
    SELECT *,
    'Days' -
    2 * (('Days' / 7)::integer) -
    CASE
    	WHEN 'Days' % 7 = 0 THEN 0
    	WHEN 'Date 1'::Date->getDay() = 0 THEN 1
    	WHEN 'Date 1'::Date->getDay() + 'Days' % 7 = 6 THEN 1
    	WHEN 'Date 1'::Date->getDay() + 'Days' % 7 > 6 THEN 2
    	ELSE 0
    END AS 'Work days'
    FROM
    (SELECT *,
    (T1.'Date 2' - T1.'Date 1') / "1d" + 1 AS 'Days'
    FROM T1)


  6. Click Next.
  7. Define the table settings and view options if needed.
  8. Save the macro and the page.



Handy Carousel
delay10


Solution for the advanced use case:

Enter the following SQL query:

Code Block
languagesql
SELECT *,
'Days' - 2 * (('Days' / 7)::integer) -
CASE
	WHEN 'Days' % 7 = 0 THEN 0
	WHEN 'Date 1'::Date->getDay() = 0 THEN 1
	WHEN 'Date 1'::Date->getDay() + 'Days' % 7 = 6 THEN 1
	WHEN 'Date 1'::Date->getDay() + 'Days' % 7 > 6 THEN 2
	ELSE 0
END
- 
(SELECT COUNT(*) FROM 
(SELECT *,'Holiday'::Date->getDay() AS 'Day' FROM T2) 
WHERE 'Holiday' >= TT.'Date 1' AND 'Holiday' <= TT.'Date 2'
AND 'Day' > 0 AND 'Day' < 6)
AS 'Work days'
FROM
(SELECT *, ('Date 2' - 'Date 1') / "1d" + 1 AS 'Days' FROM T1) AS TT



Handy Carousel
delay10