Looker expressions are formulas you use to perform custom calculations and apply advanced logic within Looker. Use Looker expressions to create dynamic table calculations, custom fields, custom filters, and data tests. This capability helps you extract specific insights and customize your data analysis. This guide describes how to construct and use Looker expressions effectively.
Shortcuts for common functions
Before creating Looker expressions, check if your task can be completed using built-in shortcuts:
- Table calculations: If your admin has granted you permissions to create table calculations, you can use Shortcut calculations to quickly perform common calculations on numeric fields in an Explore's data table.
- Custom fields: If your admin has granted you
permissions
to create custom fields, you can use the following:
- Custom groups to group
values under custom labels without needing to develop
CASE WHENlogic insqlparameters ortype: casefields. - Custom bins to group
numeric type dimensions in custom tiers without needing to develop
type: tierLookML fields.
- Custom groups to group
values under custom labels without needing to develop
Looker expressions
Looker expressions are used to perform calculations for:
A Looker expression is built from a combination of these elements:
NULL: The valueNULLindicates there is no data, and can be useful when you want to check that something is empty or doesn't exist.A constant: A constant is an unchanging value that you provide. A number such as
7or a string such asCompletedare constants.A Looker field: A reference to a Looker field, which includes dimensions, measures, and table calculations.
A Looker operator: For a list of available operators, see Looker functions and operators. Supported operators include the following categories:
- Mathematical operators (such as
+,-,*, and/) - Comparison operators (such as
=,>, and<=) - Logical operators (such as
AND,OR, andNOT)
- Mathematical operators (such as
A Looker function: Similar to spreadsheet functions, functions let you transform your data or reference data in complex ways. For a list of available functions, see Looker functions and operators.
Create Looker expressions
Table calculations, custom fields, and custom filters use the Looker expression editor. As you type your expression, Looker prompts you with functions, operators, and field names that you might want to use.
See all suggestions
Access the Looker expression editor in an Explore by creating a table calculation, custom field, or custom filter.
Type a space to see a list of all fields, functions, and operators that you can choose from. If a field is currently selected in the Explore, Looker displays a black dot to the left of the field and displays the field at the top of the list.
Start typing in the Looker expression editor to shorten the list to items that you are interested in.
The editor for custom fields displays Explore fields that are currently in use, if they are compatible with the custom field's function.
Add a field
To include a Looker field in your expression, start typing the field's name. As you type, the editor narrows your search to a list of fields and functions that contain what you've typed. You can type the name of the field as it appears on the Explore page, or you can use its LookML name if you know it.
When you select a field from the list, Looker adds it to your
expression using the LookML name in the form ${view_name.field_name}. This
ensures that all of your fields have unique names in your expression.
Add totals
If you are creating an expression that is based on an Explore where you
displayed totals,
you can also include column and row totals in your expression. Column totals
appear in the editor with the word Total in front of the LookML iteration of
the field name. For example, for a field named Count,
Looker gives the column total for that field the name
Count - Total.
The LookML name for totals is in the form ${view_name.field_name:total},
where :total is added to the end of the field name.
For row totals, the words Row Totals appear in front of the field name in
the editor. In the LookML name of the field, :row_total is added to the end
of the field name, such as ${view_name.field_name:row_total}.
Add operators
You can add logical operators such as AND, OR, and NOT to your expression
if needed. Ordinarily AND operators are evaluated before OR operators, but
you can override this behavior by using parentheses. You can also use
comparison operators (such as >, =, and <=) and mathematical operators
(such as + and *).
When you hold the pointer over an operator, notes for proper use display in the information pane.
Add functions
To include a Looker function in your expression, start typing the function's name. As you type, the editor narrows your search to a list of fields and functions that contain what you've typed.
Functions may be constructed of arguments (or variables) that require a certain type, such as a field, a number, or yes/no. When you hold the pointer over a function, check the notes in the information pane to understand which arguments you need to provide, and what type they need to be.
For a full list of functions, see Looker functions and operators.
Use error hints and the information pane
Looker displays an information pane next to the Looker expression editor. This pane provides documentation and suggestions, especially if your expression contains an error.
The information pane provides the following information:
Error highlighting: Looker underlines in red any parts of the expression that are not yet correct.
Suggestions and error details: Looker gives suggestions about what to add next in your expression. If there is an error, it explains why the error occurs.
Documentation: Looker displays documentation about the function or operator you are working with. For example, while you type the first argument of an
iffunction, Looker indicates that the first argument should evaluate asyesorno. Click the function name to view its documentation.
Include comments
You can include comments in Looker expressions by beginning the
comment line with # in the expression editor.
Use fields
Sometimes you want to use the value of a field (a dimension, measure, or table calculation) in an expression. You might want to add the value of the field to something else, check that it has a certain value, or include it in a function.
As described in Add a field, you can type the name of the field
into the expression editor, and Looker helps you find the correct
reference format. When you add a field to an expression, Looker
uses the field's LookML identifier, such as ${view_name.field_name}. Type the
field name as it appears in the field picker, and the expression editor displays
the field picker name alongside the LookML identifier.
There are several ways to retrieve a value:
Get a value from the same row: The most basic way to use a field is to reference it directly, such as
${product.category}. This references the value for that field in the current row.Get a value from a different row: You can also retrieve a field's value from a different row. For example, to get the Product Category from the previous row, use an offset function such as
offset(${product.category}, -1). For a list of positional functions, see Positional functions.Get a value from a pivoted column: To get values from pivoted columns, use pivot functions such as
pivot_index(${order.total_sales}, 1). For a list of pivot functions, see Pivot functions.Get a total from a row or a column: If you displayed totals in your Explore, you can get total values by adding
:total(for column totals) or:row_total(for row totals) to the field name, using the format${field_name:total}. For example:${orders.count} / ${orders.count:total}.
Use operators
Looker expressions can include logical, comparison, and mathematical operators to create different conditions:
- Logical operators (such as
AND,OR, andNOT) - Comparison operators (such as
>and<) - Mathematical operators (such as
+and-)
Unless you specify otherwise with parentheses, AND logic is evaluated before
OR logic. The following expression without additional parentheses:
if (
${order_items.days_to_process}>=4 OR
${order_items.shipping_time}>5 AND
${order_facts.is_first_purchase},
"review", "okay")
is evaluated as:
if (
${order_items.days_to_process}>=4 OR
(${order_items.shipping_time}>5 AND ${order_facts.is_first_purchase}),
"review", "okay")
In Looker, use yes and no instead of true and false.
These logical constants are not the same thing as the literal strings "yes"
and "no". For more information, see
Logical constants.
Use functions
Looker expressions often include one or more functions to retrieve or calculate data. They are similar to spreadsheet functions.
Functions take the form of a name followed by parentheses, such as
my_function(). Values passed inside the parentheses are arguments, like
my_function(argument_1, argument_2).
For example, the now
function takes no arguments and returns the current date and time: now().
The round function
takes one numeric argument: round(3.2). The result is 3.
To know which arguments to provide:
- The information pane next to the expression editor provides documentation for the active function.
- For a complete list of functions, see Looker functions and operators.
Consider the contains
function:
| Function | Syntax | Purpose |
|---|---|---|
| contains {:#function-contains} | contains(string, search_string) |
Returns Yes if string contains search_string, and No otherwise. |
The contains function requires two arguments: string and search_string.
The string argument represents the field or text to search in, and search_string
represents the term to search for:
contains(${customer.feedback_text}, "great")
If "great" appears in the customer feedback, the function returns Yes.
Otherwise, it returns No.
You can nest functions inside other functions:
contains(
if(
is_null(${customer.feedback_text}),
${customer.comment_text},
${customer.feedback_text}
),
"great")
This expression evaluates in three steps:
- The
is_nullfunction checks if customer feedback text is empty. - The
iffunction returns the feedback text if present; otherwise it returns the comment text. - The
containsfunction searches the returned text for "great."
Logically, this expression means: "If there is customer feedback, search in that text. If not, search in customer comments instead. In both cases, look for the word 'great.'"