Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

[ Power Query ] #_cheatsheet />

Loading Data

● Load from CSV: =


Csv.Document(File.Contents("path/to/file.csv"),[Delimiter=",",
Columns=5, Encoding=1252, QuoteStyle=QuoteStyle.None])
● Load from Excel: =
Excel.Workbook(File.Contents("path/to/file.xlsx"), null, true)
● Load from JSON: = Json.Document(File.Contents("path/to/file.json"))
● Load from Web: = Web.Contents("http://example.com")
● Load from Folder: = Folder.Files("path/to/folder")
● Load from SQL Database: = Sql.Database("server", "database")

Data Transformation

● Remove Columns: = Table.RemoveColumns(Source,{"Column1",


"Column2"})
● Rename Columns: = Table.RenameColumns(Source,{{"oldName",
"newName"}})
● Change Data Type: = Table.TransformColumnTypes(Source,{{"Column",
Int64.Type}})
● Filter Rows: = Table.SelectRows(Source, each [Column] > 100)
● Sort Rows: = Table.Sort(Source,{{"Column", Order.Ascending}})
● Add Custom Column: = Table.AddColumn(Source, "Custom", each
[Column1] + [Column2])
● Merge Queries: =
Table.NestedJoin(Source1,{"KeyColumn"},Source2,{"KeyColumn"},"NewCo
lumnName",JoinKind.Inner)
● Append Queries: = Table.Combine({Source1, Source2})
● Group Rows: = Table.Group(Source, {"KeyColumn"}, {{"NewColumn",
each Table.RowCount(_), type number}})
● Pivot Columns: = Table.Pivot(Source,
List.Distinct(Source[ColumnToPivot]), "ColumnToPivot",
"ValueColumn")
● Unpivot Columns: = Table.UnpivotOtherColumns(Source, {"Column1",
"Column2"}, "Attribute", "Value")

By: Waleed Mousa


● Extract Text Before Delimiter: = Table.TransformColumns(Source,
{"Column", each Text.BeforeDelimiter(_, "-"), type text})
● Extract Text After Delimiter: = Table.TransformColumns(Source,
{"Column", each Text.AfterDelimiter(_, "-"), type text})
● Split Column by Delimiter: = Table.SplitColumn(Source, "Column",
Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv))
● Replace Values: = Table.ReplaceValue(Source, "oldValue",
"newValue", Replacer.ReplaceText, {"Column"})
● Fill Down: = Table.FillDown(Source,{"Column"})
● Fill Up: = Table.FillUp(Source,{"Column"})
● Trim Text: = Table.TransformColumns(Source,{{"Column", Text.Trim,
type text}})
● Make Uppercase: = Table.TransformColumns(Source,{{"Column",
Text.Upper, type text}})
● Make Lowercase: = Table.TransformColumns(Source,{{"Column",
Text.Lower, type text}})
● Add Prefix: = Table.TransformColumns(Source,{{"Column", each
"Prefix_" & _, type text}})
● Add Suffix: = Table.TransformColumns(Source,{{"Column", each _ &
"_Suffix", type text}})
● Round Numbers: = Table.TransformColumns(Source,{{"Column",
Number.Round, type number}})
● Remove Duplicates: = Table.Distinct(Source, {"Column"})
● Remove Blank Rows: = Table.SelectRows(Source, each not
List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {null,
""})))
● Expand Table Column: = Table.ExpandTableColumn(Source, "Column",
{"SubColumn1", "SubColumn2"})
● Aggregate Column: = Table.AggregateTableColumn(Source, "Column",
{{"Column", List.Sum, "Sum"}})
● Parse JSON Column: = Table.TransformColumns(Source,{{"Column",
Json.Document, type any}})
● Calculate Age: = Table.AddColumn(Source, "Age", each
Date.Year(DateTime.LocalNow()) - Date.Year([BirthDate]))

Date Operations

By: Waleed Mousa


● Add Days: = Table.AddColumn(Source, "NewDate", each
Date.AddDays([DateColumn], 10))
● Subtract Days: = Table.AddColumn(Source, "NewDate", each
Date.AddDays([DateColumn], -10))
● Start of Month: = Table.AddColumn(Source, "StartOfMonth", each
Date.StartOfMonth([DateColumn]))
● End of Month: = Table.AddColumn(Source, "EndOfMonth", each
Date.EndOfMonth([DateColumn]))
● Difference Between Dates: = Table.AddColumn(Source, "DaysDiff",
each Duration.Days([DateColumn2] - [DateColumn1]))
● Extract Year: = Table.AddColumn(Source, "Year", each
Date.Year([DateColumn]))
● Extract Month: = Table.AddColumn(Source, "Month", each
Date.Month([DateColumn]))
● Extract Day: = Table.AddColumn(Source, "Day", each
Date.Day([DateColumn]))
● Day of Week: = Table.AddColumn(Source, "Weekday", each
Date.DayOfWeek([DateColumn]))
● Week of Year: = Table.AddColumn(Source, "WeekOfYear", each
Date.WeekOfYear([DateColumn]))

Text Operations

● Length of Text: = Table.AddColumn(Source, "Length", each


Text.Length([TextColumn]))
● Extract Substring: = Table.AddColumn(Source, "Substring", each
Text.Middle([TextColumn], start, length))
● Find Text Position: = Table.AddColumn(Source, "Position", each
Text.PositionOf([TextColumn], "searchText", 1, -1))
● Replace Text: =
Table.ReplaceValue(Source,"oldText","newText",Replacer.ReplaceText,
{"TextColumn"})
● Split Text at Position: = Table.SplitColumn(Source, "TextColumn",
Splitter.SplitTextByPositions({start, length}), {"Text1", "Text2"})
● Combine Text: = Table.CombineColumns(Source, {"TextColumn1",
"TextColumn2"}, Combiner.CombineTextByDelimiter(" ",
QuoteStyle.None), "CombinedColumn")

By: Waleed Mousa


Logical Operations

● Conditional Columns: = Table.AddColumn(Source, "Category", each if


[Column] > 100 then "High" else "Low")
● Switch Statement: = Table.AddColumn(Source, "Category", each
switch([Condition], 1, "One", 2, "Two", "Other"))
● Logical And: = Table.SelectRows(Source, each [Column1] > 100 and
[Column2] < 50)
● Logical Or: = Table.SelectRows(Source, each [Column1] > 100 or
[Column2] < 50)
● Logical Not: = Table.SelectRows(Source, each not [Column] =
"Value")

Advanced Data Transformation

● Custom Function Call: = Table.AddColumn(Source, "CustomResult",


each MyCustomFunction([Column]))
● Iterate Over Rows: = Table.TransformRows(Source, each [Column1] +
[Column2])
● Normalize Data: = Table.TransformColumns(Source,{{"Column", each (_
- List.Min(Source[Column])) / (List.Max(Source[Column]) -
List.Min(Source[Column])), type number}})
● Standardize Data: = Table.TransformColumns(Source,{{"Column", each
(_ - List.Average(Source[Column])) /
List.StandardDeviation(Source[Column]), type number}})
● Discretize Column: = Table.TransformColumns(Source,{{"Column", each
if _ > threshold then "Above" else "Below", type text}})

Data Aggregation

● Sum Column: = Table.Sum(Source, "Column")


● Average Column: = Table.Average(Source, "Column")
● Min and Max: = Table.Min(Source, "Column"), = Table.Max(Source,
"Column")
● Count Rows: = Table.RowCount(Source)
● Count Unique Values: = Table.Group(Source, {"Column"}, {{"Count",
each Table.RowCount(_), Int64.Type}})

By: Waleed Mousa


Query Management

● Reference Other Query: = #"Other Query Name"


● Set Data Type: = Table.TransformColumnTypes(Source,{{"Column", type
type}})
● Parameter Reference: = #"Parameter Name"
● Invoke Custom Function: = MyFunction(parameters)

Data Integration

● Merge Tables (Inner Join): = Table.Join(Source1, "KeyColumn",


Source2, "KeyColumn", JoinKind.Inner)
● Merge Tables (Left Outer Join): = Table.Join(Source1, "KeyColumn",
Source2, "KeyColumn", JoinKind.LeftOuter)
● Merge Tables (Full Outer Join): = Table.Join(Source1, "KeyColumn",
Source2, "KeyColumn", JoinKind.FullOuter)
● Append Queries: = Table.Combine({Source1, Source2})

Data Cleaning

● Remove Empty Rows: = Table.SelectRows(Source, each not


List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"",
null})))
● Remove Rows With Errors: = Table.RemoveRowsWithErrors(Source,
{"Column1", "Column2"})
● Replace Errors: = Table.ReplaceErrorValues(Source, {{"Column", 0}})
● Capitalize Each Word: = Table.TransformColumns(Source,{{"Column",
Text.Proper, type text}})
● Remove Non-Printable Characters: =
Table.TransformColumns(Source,{{"Column", Text.Select, type text}},
{"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"})

Time Series Operations

● Time Series Decomposition: = Time.SeriesDecompose(Source,


"DateColumn", "ValueColumn", MissingValue.ReplacementType.None)

By: Waleed Mousa


● Moving Average: = Table.AddColumn(Source, "MovingAverage", each
List.Average(List.FirstN(List.Skip(Source[ValueColumn], _[Index] -
windowSize), windowSize)))
● Cumulative Sum: = Table.AddColumn(Source, "CumulativeSum", each
List.Sum(List.FirstN(Source[ValueColumn], _[Index] + 1)))
● Year-to-Date Sum: = Table.AddColumn(Source, "YTD", each
List.Sum(Table.SelectRows(Source, each [DateColumn] <=
_[DateColumn] and Date.Year([DateColumn]) =
Date.Year(_[DateColumn]))[ValueColumn]))

Statistical Operations

● Standard Deviation: = Table.AddColumn(Source, "StdDev", each


List.StandardDeviation(Source[Column]))
● Variance: = Table.AddColumn(Source, "Variance", each
List.Variance(Source[Column]))
● Correlation: = Table.AddColumn(Source, "Correlation", each
Table.Correl(Source[Column1], Source[Column2]))
● Linear Regression Coefficients: = Table.LinearRegression(Source,
"ValueColumn", {"Predictor1", "Predictor2"})

Data Export

● Export to CSV: =
Csv.Write(Table.TransformColumnTypes(Source,{{"Column", type
text}}), "file.csv", [Delimiter=','])
● Export to Excel: =
Excel.Workbook(Table.TransformColumnTypes(Source,{{"Column", type
text}}))
● Write to JSON: = Json.FromValue(Source)
● Export to XML: = Xml.Tables(Source)

Custom M Functions

● Define a Custom Function: = (x as number) => x * x


● Invoke a Custom Function: = Table.AddColumn(Source, "Squared", each
CustomFunction([Column]))
● Parameterized Queries: = (param as text) => ...

By: Waleed Mousa


Performance Optimization

● Buffer Table: = Table.Buffer(Source)


● Buffer List: = List.Buffer(Source[Column])
● Disable Load: Right-click on a query in the Query Editor and
select "Enable Load" to toggle off.
● Query Folding: Ensuring steps are compatible with query folding
for database sources.

Debugging and Error Handling

● View Native Query: Right-click on a step against a database source


and select "View Native Query".
● Try Otherwise: = try Source otherwise errorRecord
● Add Error Column: = Table.AddColumn(Source, "Error", each try
[Column] otherwise "Error")

Miscellaneous

● Create a Date Table: = Calendar.DateRange(Date.From("start_date"),


Date.From("end_date"))
● Dynamic Date Filters: = Table.SelectRows(Source, each [DateColumn]
>= Date.From(DateTime.LocalNow()))
● Text to List: = Text.ToList("string")
● List to Text: = Text.Combine(List.Transform(Source, each
Text.From(_)), ",")
● Index Column: = Table.AddIndexColumn(Source, "Index", 0, 1,
Int64.Type)

By: Waleed Mousa

You might also like