The request

From Sarah Mitchell, CRM Manager
Your goal
The Source step is the 52 customers who signed up from 20 December 2025 (customer_id, first_name, last_name, email, signup_date). Orders is another query with their 26 orders. Merge Orders on customer_id with the join kind that keeps only the customers who never ordered: one row per customer, with only the Customers columns.
- Show exactly
customer_idfirst_namelast_nameemailsignup_datenot done yet - 33 rowsnot done yet
Your query steps
| customer_id | first_name | last_name | signup_date | ||
|---|---|---|---|---|---|
| 1 | 1949 | Noah | Taylor | noah.taylor@yahoo.com | 2025-12-20 |
| 2 | 1950 | Nathan | Murphy | nathan.murphy@gmail.com | 2025-12-20 |
| 3 | 1951 | Michael | Mendoza | mmendoza84@outlook.com | 2025-12-20 |
| 4 | 1952 | Miguel | Russell | mrussell23@gmail.com | 2025-12-20 |
| 5 | 1953 | Patrick | Barnes | pbarnes@parkrowhotels.com | 2025-12-20 |
| 6 | 1954 | Gregory | Barnes | gregorybarnes1989@outlook.com | 2025-12-20 |
| 7 | 1955 | David | Sullivan | david.sullivan@gmail.com | 2025-12-21 |
| 8 | 1956 | Kelly | Campbell | kelly.campbell@gmail.com | 2025-12-21 |
| 9 | 1957 | Shirley | Gomez | shirleygomez1977@gmail.com | 2025-12-21 |
| 10 | 1958 | Thomas | Price | thomas.price@gmail.com | 2025-12-21 |
| 11 | 1959 | Peter | Mendoza | petermendoza2002@gmail.com | 2025-12-21 |
| 12 | 1960 | Ronald | Sanders | ronaldsanders1968@yahoo.com | 2025-12-21 |
| 13 | 1961 | Melissa | Harris | melissa.harris@icloud.com | 2025-12-22 |
| 14 | 1962 | Brandon | Mitchell | brandon.mitchell@gmail.com | 2025-12-22 |
| 15 | 1963 | Sofia | Ward | sofia.ward@gmail.com | 2025-12-22 |
| 16 | 1964 | Robert | Flores | rflores61@yahoo.com | 2025-12-22 |
| 17 | 1965 | Scott | Johnson | scott.johnson@comcast.net | 2025-12-22 |
| 18 | 1966 | Karen | James | karenjames1985@yahoo.com | 2025-12-22 |
| 19 | 1967 | James | Sullivan | james.sullivan@gmail.com | 2025-12-23 |
| 20 | 1968 | Andrew | Cook | acook@willowandfern.com | 2025-12-23 |
| 21 | 1969 | Donald | Jackson | djackson93@gmail.com | 2025-12-23 |
| 22 | 1970 | Jasmine | Patel | jasmine.patel@gmail.com | 2025-12-23 |
| 23 | 1971 | Stephen | Martin | smartin74@outlook.com | 2025-12-23 |
| 24 | 1972 | Edward | Brooks | edward.brooks@outlook.com | 2025-12-23 |
| 25 | 1973 | Anthony | Martin | amartin67@outlook.com | 2025-12-23 |
| 26 | 1974 | Betty | Harrison | bettyharrison1990@gmail.com | 2025-12-23 |
| 27 | 1975 | Shirley | Cox | scox27@comcast.net | 2025-12-23 |
| 28 | 1976 | Kenneth | Roberts | kennethroberts1972@outlook.com | 2025-12-23 |
| 29 | 1977 | Nicole | Jones | nicolejones1989@outlook.com | 2025-12-24 |
| 30 | 1978 | Jerry | White | jerrywhite1972@gmail.com | 2025-12-24 |
| 31 | 1979 | Margaret | Phillips | margaret.phillips@gmail.com | 2025-12-26 |
| 32 | 1980 | Jacob | Perry | jperry26@gmail.com | 2025-12-26 |
| 33 | 1981 | Sandra | Bennett | sandra.bennett@icloud.com | 2025-12-26 |
| 34 | 1982 | Carolyn | Hudson | chudson81@gmail.com | 2025-12-26 |
| 35 | 1983 | Jeffrey | Thomas | jeffrey.thomas@gmail.com | 2025-12-26 |
| 36 | 1984 | Ryan | Bailey | ryanbailey1977@gmail.com | 2025-12-26 |
| 37 | 1985 | Dylan | Harris | dharris77@icloud.com | 2025-12-27 |
| 38 | 1986 | Joseph | Brooks | joseph.brooks@gmail.com | 2025-12-27 |
| 39 | 1987 | Luis | Hill | luishill1988@yahoo.com | 2025-12-28 |
| 40 | 1988 | Jerry | Mendoza | jmendoza@evergreenproperties.com | 2025-12-28 |
| 41 | 1989 | Mark | Brennan | mbrennan@willowandfern.com | 2025-12-28 |
| 42 | 1990 | Donald | Walker | donald.walker@icloud.com | 2025-12-29 |
| 43 | 1991 | Margaret | Wright | margaret.wright@yahoo.com | 2025-12-29 |
| 44 | 1992 | Jose | Martinez | jmartinez76@gmail.com | 2025-12-29 |
| 45 | 1993 | Logan | Harrison | lharrison15@gmail.com | 2025-12-30 |
| 46 | 1994 | Dennis | Long | dennislong1975@gmail.com | 2025-12-30 |
| 47 | 1995 | Donald | Wood | dwood55@gmail.com | 2025-12-30 |
| 48 | 1996 | Carlos | Martinez | cmartinez45@gmail.com | 2025-12-30 |
| 49 | 1997 | Edward | Vasquez | evasquez74@gmail.com | 2025-12-31 |
| 50 | 1998 | Pamela | Richardson | pamela.richardson@aol.com | 2025-12-31 |
| 51 | 1999 | Gabriela | Sanchez | gsanchez37@icloud.com | 2025-12-31 |
| 52 | 2000 | Lucas | Jackson | ljackson49@icloud.com | 2025-12-31 |
Loading the editor…
Reference solution
Mote checks your result
Press Check. Mote fills in your answer and compares it with what the report needs.
What Sarah gets, and why
The lesson
Merge Queries is Power Query’s join: it matches the rows of two queries on a key column, the
way SQL’s JOIN and Excel’s XLOOKUP do. The join kind decides which rows survive, and it’s
the setting people most often leave on its default without thinking.
Where it is
In Power BI: Home → Transform data, select the customers query, then Home → Merge Queries
(adds a step to that query) or Merge Queries as New (makes a third query and leaves both
inputs untouched). In the dialog, pick Orders as the second table, click customer_id in both
previews, and choose the Join Kind. At the bottom, the dialog tells you how many rows match.
The merged table has a new column holding a small table of matching Orders rows; the expand icon on its header picks which of those columns to bring in.
The six join kinds
| Join kind | Keeps | New customers + Orders here |
|---|---|---|
| Left Outer (default) | every first-table row, with matches or nulls | 59 rows |
| Right Outer | every second-table row, with matches or nulls | 26 rows |
| Full Outer | every row from both sides | 59 rows |
| Inner | only rows that match on both sides | 26 rows |
| Left Anti | first-table rows with no match | 33 rows |
| Right Anti | second-table rows with no match | 0 rows |
The row counts are after expanding order_id: each customer with orders appears once per order,
which is why left outer reaches 59 rows from 52 customers.
In the practice editor
Write the join kind after the key; leave it out and the merge is a left outer join, as in the dialog:
Merge queries: Orders on customer_id, left anti
Merge queries: Orders on customer_id, inner, expand order_id, order_date
Merge queries: Orders on customer_id, full outer, expand order_id
An anti join brings in nothing from the other side (every match is gone), so it needs no expand. Right outer, full outer and right anti do: they add rows of the second table, and the first table’s columns are null on those rows.
In M, the kind is the last argument of the join step:
Table.NestedJoin(Source, {"customer_id"}, Orders, {"customer_id"}, "Orders", JoinKind.LeftAnti)
Picking one
- Left outer: you’re adding columns to a table and every row must stay, as with a lookup of the category for each order line. The default, and the right choice most of the time.
- Inner: you only want rows that exist in both, for example order lines whose product is in a promotion list.
- Left anti: “which of these has no partner?”, Sarah’s question.
- Right anti: the same question from the other side. Here, orders whose customer is missing from the list: none, which is a useful check that the data is complete.
- Full outer: reconciling two lists, such as our orders against a marketplace’s settlement file, where rows can be missing on either side.
Read the match count
The Merge dialog says something like “The selection matches 19 of 52 rows from the first
table”. Read it every time. If you expected everything to match and it doesn’t, look at the keys:
types that differ (text 0127 against the number 127), stray spaces, or different case.
Use fuzzy matching in the same dialog can match near-identical text, but check what it
paired before trusting it.
Sarah’s list
Left anti gives 33 customers. Across the whole customer table the same merge finds 247, and eighteen of those are second accounts (ids 2001 to 2018) of people already in Customers under an earlier id, with the same email apart from case or a stray space. This level’s query leaves them out; on the full table, drop them before sending, because those people may well have ordered under their first account.
Common mistakes
- Leaving Left Outer on for a “who hasn’t” question. It works, with an extra filter on null, and a lot more rows.
- Inner instead of anti. Inner keeps the people who did order: the opposite list.
- Expanding every column. Bring in only the columns the report needs.
- Ignoring the match count. A merge that matched nothing still runs without an error.
Lantern lit!
Practised: power querymerge queriesjoin kindleft outerinner joinleft antifull outer
- Solved
- No hints
- First run
