Split A1 according to separator “->“. The expected result is C1:F1:

Usually need VBA as a formula alone cannot manage

High technical threshold & low efficiency

Use multi-character splitting function split(). Enter formula in C1:

`=spl("=?.split(""->"")",A1)`

Directly use a splitting function without turning to VBA, and has high efficiency

Find data existing in column A but not in column B, that is, the difference. The expected result is shown in column C:

Do not support set operations such as difference, and can only piece together a complex and hard to understand formula using existing functions (such as if, iserror, vlookup and filter)

Use the difference operator \

`=spl("=?1\?2",A1:A6,B1:B5)`

Support various operators and functions for set operations; formulas are simple and easy to understand and allow automatic filling

- Calculate median of values in unspecified cells (like those where max and min values will be removed)
- Get TopN from an unspecified number of cells (N is a cell value, for instance)
- Return the substring before the specified marker string
- Split a string into an array of numbers and an array of characters
- Split away all dates from a string
- Insert an empty row every N rows
- Insert an empty row wherever the specified data changes
- Split key value pairs in a certain range into two columns – the key and the value
- Get all Sundays within a specified time period

The old version does not support the unique function (for getting unique values) the 2019?&365 offers.

Get upgraded or write a complex formula

Use the SPL counterpart id@u

`=spl("=?.id@u()",A2:A17)`

More about SPL id function:

- Sort result by default, and is equivalent to Excel sort(unique())
- id@u does not sort the result and is equivalent to Excel unique

Achieve a lot of new functionalities in an old version without upgrading, and support automatic filling

- filter
- sort\sortBy
- xlookup
- maxifs\minifs
- xmatch
- sequence
- randArray
- switch
- concat\textjoin

Filter function does not return column names for the filtering result, cannot reference column names in the condition, does not support fuzzy query.

Copy column names manually and formulas are hard to write (accompanied by functions such as search\iferror)

Use more powerful SPL select function

`=spl("=E(?).select(Salary>5000 && Salary< 10000 && like(Name,""*Jo*""))",A1:G499)`

More about SPL select function：

- Return the first matched record only
- Return all eligible records after the first matched one
- Support reverse filtering
- Return non-matched records
- Support binary search

Return column names for the filtering result, allow using column names in the condition and support fuzzy query

- Vlookup: return multiple matched records
- Xlookup: Perform cross-match and two-way match
- Index: Get ordinal numbers backwards
- avg: Skip non-number members
- max: Return ordinal number(s) of the max value
- count: Calculate formula on each member and return number of the non-null results
- datedif: Calculate the number of quarters/weeks/Mondays/Sundays between two dates
- concat: Use a user-defined separator and enclose members with quotation marks
- find: Case-insensitive and find eligible members backwards

Find products whose sales quantities rank in top10 in Jan. but do not rank in top10 in Feb., that is, records existing in table on the left but not in table on the right (their difference).

Do no support getting difference of simple data sets as well as of table data; need cooperation of multiple functions to achieve, which is hard

Use the specialized function merge@od to get difference on records

`=spl("=[E(?1),E(?2)].merge@od(ProductName)",Jan!A2:C12,Feb!A2:C12)`

More about SPL merge：

- By default return duplicate records after combination (which is concatenation) and data remains ordered
- @o means data is still unordered
- @i gets common records of two tables – the intersection
- @u gets all unique records of two tables – the union
- Can perform a set operation between single columns/multiple columns/whole rows

Support various set operations on table data with simple and easy to understand formulas

Table Orders’ SellerID column is associated with table Seller’s ID column (in a many-to-one relationship), but both have missing data (highlighted in blue and yellow). Our goal is to perform a two-way search (full join) on the two tables and generate a new table using certain columns while displaying missing data in the other table.

xlookup has incomplete functionalities, and can perform a one-way search only (inner join and left join) but cannot perform a two-way search (full join)

Use the two-way search (full join) function join@f on records. Enter the following formula:

`=spl("=join@f(E(?1),SellerID;E(?2),ID).new(_1.OrderNo,_1.Amount,_2.ID,_2.Name)",A2:D8,F2:H7)`

More about SPL join：

- By default perform a one-way search without displaying missing values (which is an inner join)
- @1 enables a one-way search and displaying missing data (left join)
- @p enables a search by row numbers in a table
- Support join queries between single columns/multiple columns/whole rows

Support all query types on tables with simple and easy to understand formulas

- Perform a cross-join (calculating Cartesian product) on two tables
- Create a new group whenever data changes
- Create a new group whenever an empty row appears
- Create a new group whenever a non-empty row appears
- Expand one row into N rows according to value (Like N) of a specified field
- Get records where values of a specified field increase for at least continuous three days
- Transform one column with multiple rows into a table having the specified column count (row count can be specified, too)
- Transform one row with multiple columns into a table having the specified row count (column count can be specified, too)

Find employees whose salaries rank in bottom three in each department.

Do not support computations after grouping; need large amounts of manual operations

Use group function to group table data and then ~.topt to get TopN in each group

`=spl("=E(?1).group(Dept).conj(~.top(3;Salary))",A1:G499)`

More about SPL top function:

- Return a single row/column
- -3 represents top3 employees getting the highest salaries

Support various computations after table data is grouped

- Get ranking of values of a specified field in a group
- Get positions of odd numbers, even numbers or steps in a group
- Get a relative position in a group, such as calculating YOY, link relative ratio or moving average
- Perform filtering on detailed data in a group according to a condition like greater than average and less than a certain percentage of the aggregate value
- Perform aggregate-value-related computations on detailed data in a group, such as calculating percentage of a certain field’s value in the aggregate value
- Use a separator to combine multiple rows in a group into a single row
- Split each row into multiple rows according to a specified separator