Table calculations enable you to create calculations that operate on the table data returned by a SQL query. This is great for calculating metrics like percent of totals. This post shows how to create a percent of total across rows, and it assumes you are starting with a pivoted table.
You can also create a percent of total down a column.
There are a few ways to do this:
##1. Using pivot_row
to calculate percent of total
As of Looker 3.36, we have introduced the pivot_row
function, which allows you to aggregate over an entire pivoted row. Read more about using pivot_row
here.
Let’s say I have the following data:
In order to create a percent of row total using pivot_row
, I can create a table calculation like this:
${order_items.count} / sum(pivot_row(${order_items.count}))
Which will give me these results:
Using Value Format: 0.0%
will format these values nicely for you. Read more about value format here.
##2. Using Look row totals to calculate percent of total
It is possible to reference Look row totals in table calculations. This is the simplest way to create a percent of row total. Row totals can be turned on in a Look by checking the Row Totals box:
Note that these totals are calculated in the SQL, so they may provide different results than adding up rows in table calculations
Let’s say you have a table like this:
In order to calculate a percent of total across rows using these row totals, you can create a calculation like so:
${orders.count} / ${orders.count:row_total}
Note that you must have the Row Totals enabled to reference the
row_total
variable.
Giving us these results:
Using Value Format: 0.0%
will format these values nicely for you. Read more about value format here.
pivot_index
to calculate percent of totalYou can also use the pivot_index
function in table cals to calculate the row totals manually, and then use that in your calculation of percent of total. This would be particularly relevant if you want the total to be a true addition of the values in the table, rather than being calculated in the SQL.
Let’s say you have this table:
You can create a percent of row total table calc like this:
${orders.count}/
(
coalesce(pivot_index(${orders.count}, 1), 0) +
coalesce(pivot_index(${orders.count}, 2), 0) +
coalesce(pivot_index(${orders.count}, 3), 0)
)
This will use pivot_index
to calculate the row total, and then divide each value in the table by that row total. Note that you will need to add to this for more than 3 columns. It will result in:
Using Value Format: 0.0%
will format these values nicely for you. Read more about value format here.