Table.Skip Function (Power Query M)

Table.Skip returns a table with the top rows removed, either a set number of rows or every row from the top that meets a condition. Available in Excel (Power Query), Power BI Desktop, and Power BI Service.

If you want to remove the first few rows of a table in Power Query, Table.Skip is the function you reach for. In this article, I’ll show you how to use it with five practical examples, including the classic messy-report cleanup.

Syntax of Table.Skip Function

Table.Skip(table as table, optional countOrCondition as any) as table

where

  • table (required, table). The source table to skip rows from.
  • countOrCondition (optional, any). Controls how many rows get skipped. Omit it to skip just the first row. Pass a number to skip that many rows from the top. Pass a condition (an each expression) to skip rows from the top while the condition is true, stopping at the first row where it is false.

Returns: a table containing every row of table except the skipped ones at the top. The remaining rows keep their original order, and all columns stay intact.

In plain terms, you point it at a table, tell it how many rows to drop from the top (or when to stop dropping), and it gives you back the rest.

Example 1: Skip a set number of rows

Say you have a Shipments table and the first two shipments have already been processed. You want to keep only the rows from the third one onward.

Here is the starting data:

ShipmentCarrierWeight
SH-2201Northwind Freight180
SH-2202Coastal Express95
SH-2203Northwind Freight240
SH-2204Arrow Logistics132
SH-2205Coastal Express75

Pass 2 as the second argument to skip the first two rows:

let
Source = Excel.CurrentWorkbook(){[Name="Shipments"]}[Content],
Result = Table.Skip(Source,2)
in
Result

The result keeps the last three shipments:

ShipmentCarrierWeight
SH-2203Northwind Freight240
SH-2204Arrow Logistics132
SH-2205Coastal Express75

The first two rows are gone, and everything below them comes through untouched.

Example 2: Skip the first row by omitting the argument

When you leave out the second argument, Table.Skip removes exactly one row.

Here, a Readings table starts with a calibration test entry that should not be part of the temperature data:

ReadingCelsius
Calibration test0
Morning18
Noon24
Evening21

Call Table.Skip with no second argument:

let
Source = Excel.CurrentWorkbook(){[Name="Readings"]}[Content],
Result = Table.Skip(Source)
in
Result

The result drops only the calibration row:

ReadingCelsius
Morning18
Noon24
Evening21

Omitting countOrCondition is just shorthand for Table.Skip(Source,1).

Example 3: Skip rows with a condition

Instead of a number, you can pass a condition. Table.Skip then removes rows from the top for as long as the condition is true, and stops for good at the first row where it is false.

Here is a Tickets table sorted with the oldest tickets on top:

TicketStatus
MNT-101Closed
MNT-102Closed
MNT-103Open
MNT-104Closed
MNT-105Open

Skip rows while the status is Closed:

let
Source = Excel.CurrentWorkbook(){[Name="Tickets"]}[Content],
Result = Table.Skip(Source,each [Status]="Closed")
in
Result

The result starts at the first ticket that is not closed:

TicketStatus
MNT-103Open
MNT-104Closed
MNT-105Open

Notice that MNT-104 survives even though its status is Closed. The skipping stopped at MNT-103, so later matching rows are left alone. That’s the difference between skipping and filtering.

Example 4: Skip report preamble rows and promote headers

This is the most common real-world use of Table.Skip. Exported reports often arrive with title and metadata rows sitting above the actual column headers.

Here is a gym member export the way it lands in Power Query:

Column1Column2
Lakeside Gym – Member Exportnull
Export period: FY26-Q1null
MemberPlan
Dana WhitfieldAnnual
Marcus LeeMonthly
Priya NairAnnual

Skip every row until the real header row appears, then promote it:

let
Source = Excel.CurrentWorkbook(){[Name="MemberExport"]}[Content],
Skipped = Table.Skip(Source,each [Column1]<>"Member"),
Result = Table.PromoteHeaders(Skipped,[PromoteAllScalars=true])
in
Result

The result is a clean table with proper headers:

MemberPlan
Dana WhitfieldAnnual
Marcus LeeMonthly
Priya NairAnnual

Using a condition instead of Table.Skip(Source,2) makes the query robust. If the export grows an extra note row next quarter, the condition still finds the Member header and skips exactly the right amount.

Example 5: Skip more rows than the table has

What happens when the count is larger than the row count? Nothing bad. You just get an empty table back, no error.

Here is the starting data, a 3-row Snacks table:

ItemStock
Trail mix40
Granola bars25
Dried mango60

The query asks it to skip 10 rows, and Table.RowCount counts what is left:

let
Source = Excel.CurrentWorkbook(){[Name="Snacks"]}[Content],
Result = Table.RowCount(Table.Skip(Source,10))
in
Result

Result: 0

This makes Table.Skip safe to use with a computed count. You never need to guard against the count overshooting the table.

Things to keep in mind with Table.Skip

  • The condition form is not a filter. It stops at the first non-matching row (Example 3). To remove every row that meets a condition, wherever it sits, use Table.SelectRows with the condition negated.
  • The UI writes this function for you. Home > Remove Rows > Remove Top Rows generates a Table.Skip step with a numeric count. Switch to a condition by editing the step in the formula bar.
  • Column names in the condition are case-sensitive. each [status]="Closed" throws Expression.Error: The field 'status' of the record wasn't found. when the column is named Status. Match the name exactly.
  • Be careful skipping right after a sort. Against foldable sources, the engine can reorder operations, so the skipped rows may not respect your Table.Sort order. Wrap the sorted table in Table.Buffer first when the skip must follow the sort.

Performance and query folding

With a numeric count, Table.Skip can fold to the source on some SQL databases as an OFFSET-style query. The condition form is evaluated row by row, so it typically runs locally. On Excel and CSV sources everything runs locally anyway, and the cost is negligible at workbook sizes.

Common questions about Table.Skip

What is the difference between Table.Skip and Table.RemoveFirstN?

They behave the same. Both accept a count or a condition and drop rows from the top. Table.RemoveFirstN is a documented twin, so use whichever reads better in your query.

What is the difference between Table.Skip and Table.FirstN?

They are opposites. Table.FirstN keeps the top rows and drops the rest, while Table.Skip drops the top rows and keeps the rest. Both accept a count or a condition.

How do I skip rows from the bottom instead?

Use Table.RemoveLastN. It takes the same count-or-condition argument but works from the end of the table upward.

List of All Power Query Functions

Related Power Query Functions / Articles:

I am a huge fan of Microsoft Excel and love sharing my knowledge through articles and tutorials. I work as a business analyst and use Microsoft Excel extensively in my daily tasks. My aim is to help you unleash the full potential of Excel and become a data-slaying wizard yourself.