Skip to content

Instantly share code, notes, and snippets.

View ImkeF's full-sized avatar

Imke Feldmann ImkeF

View GitHub Profile
// splits text where every character before the last character is a number
// matching string will be the first item of the new text, but that can be modified by filling up instead
let
Source = "Appl2e Pe3ar Banan2a Toma4to Potato",
ToList = Text.Split(Source, " "),
#"Converted to Table" = Table.FromColumns({ToList}),
PatternCheck = Table.AddColumn(#"Converted to Table",
"Pattern",
each if List.Contains({"0".."9"}, Text.At([Column1], Text.Length([Column1])-2))
then [Column1]
@ImkeF
ImkeF / PowerBI.DataModel.pq
Last active May 21, 2020 01:35
Returns port number and database name of the latest Power BI data model opened with PBI Desktop.
let func =
(optional Model as text) =>
let
Source_Port = Folder.Files("C:\Users"),
msmdsrv = Table.SelectRows(Source_Port, each [Name] = "msmdsrv.port.txt"),
#"Sorted Rows" = Table.Buffer(Table.Sort(msmdsrv,{{"Date created", Order.Descending}})),
Select_Last_Instance_Active = Table.FirstN(#"Sorted Rows",1),
#"Combined Binaries" = Binary.Combine(Select_Last_Instance_Active[Content]),
#"Imported Text" = Table.FromColumns({Lines.FromBinary(#"Combined Binaries",null,null,1252)}),
@ImkeF
ImkeF / Text.RemoveBetweenDelimiters.pq
Last active October 11, 2020 07:22
Removes text between 2 delimiters.
let func =
(TextToClean as text, StartDelimiter as text, EndDelimiter as text, optional RemoveDelimiters) =>
let
removeDelimiters = if RemoveDelimiters = null then StartDelimiter & EndDelimiter else "",
Source = Text.From(TextToClean),
FirstSplit = List.Buffer( Text.Split(Source, StartDelimiter) ),
Custom2 = if List.First(FirstSplit) = "" then List.Skip(FirstSplit) else FirstSplit,
Custom1 = List.Transform(Custom2, each if Text.Contains(_, EndDelimiter) then Text.AfterDelimiter(_, EndDelimiter, 0) else _),
ListSelect = List.Select(Custom1, each _<>""),
TextCombine = Text.Combine(ListSelect, removeDelimiters)
@ImkeF
ImkeF / DAX.VariableDebugger.pq
Last active November 18, 2019 20:03
Produces DAX code to debug the variables in a DAX measure.
let func =
let
Source = (columnNames as text, optional topN as number, optional measureCode as text) =>
let
/* Debug parameters
measureCode = DAXMeasureCode,
columnNames = "RankItem,RankMeasure, null, Rank, TopOrOthers, TopN_Others",
topN = 5,
@ImkeF
ImkeF / DAX.CalculateDebugger.pq
Last active November 18, 2019 20:02
Produces DAX code to debug a filter argument of CALCULATE.
let func =
(filterExpression as text,
myColumnName as text,
optional MaxFilters as number
) =>
let
/* Debug parameters
myColumnName = "Datum",
filterExpression = "DATESYTD(DimDate[Datum])",
@ImkeF
ImkeF / Table.ContainsAnywhere.pq
Last active May 16, 2022 09:27
Checks if a string or list of strings is contained somewhere in the table.
let func =
(MyTable as table,
MySearchStrings as any,
optional AllAny as text,
optional CaseInsensitive as text,
optional PartialMatch as text ) =>
let
/* Debug Parameters ___Description for function parameters
MyTable = MyTable, // Table to search trough
let func =
(MyTable as table, MyColumnName as text) =>
let
Source = MyTable,
ShiftedList = {null} & List.RemoveLastN(Table.Column(Source, MyColumnName),1),
Custom1 = Table.ToColumns(Source) & {ShiftedList},
Custom2 = Table.FromColumns(Custom1, Table.ColumnNames(Source) & {"Previous Row"})
in
Custom2 ,
documentation = [
let func =
(FileOrFolderPath as text) =>
let
CreateTable = if Text.End(FileOrFolderPath,5) = ".xlsx" or Text.End(FileOrFolderPath,5) = ".xlsm"
then #table({"Content", "Name"}, {{File.Contents(FileOrFolderPath), FileOrFolderPath}})
else Folder.Files(FileOrFolderPath) ,
FetchQueries = Table.AddColumn(CreateTable, "FetchQueries", each try fnFetchQueries([Content]) otherwise #table({"Column1"}, {{null}})),
#"Removed Other Columns" = Table.SelectColumns(FetchQueries,{"Name", "FetchQueries"}),
let func =
(ExpandedJson as table, optional adjustDotDel as number) =>
let
AdjustSkip = if adjustDotDel = null then 1 else adjustDotDel,
Source = ExpandedJson,
NameKey = Table.AddColumn(Source, "NameKey", each Text.Combine(List.Transform([Dots], (x) => Text.From(Record.Field(_,x))), " | "), type text),
Item = Table.AddColumn(NameKey, "Item", each Text.BeforeDelimiter([Sort], ".", {0, RelativePosition.FromEnd}), type text),
#"Extracted Text After Delimiter" = Table.TransformColumns(Item, {{"SortBy", each Text.BeforeDelimiter(_, ".", AdjustSkip), type text}}),
#"Removed Other Columns" = Table.SelectColumns(#"Extracted Text After Delimiter",{"Value", "NameKey", "Item", "SortBy"}),
@ImkeF
ImkeF / Type.AsText
Created February 8, 2019 17:57
Returns type in text format
let func =
(t as type) as text =>
let
nonNullableType = Type.NonNullable(t),
TypeDescription = if Type.Is(nonNullableType, type binary) then "binary"
else if Type.Is(nonNullableType, type date) then "date"
else if Type.Is(nonNullableType, type datetime) then "datetime"
else if Type.Is(nonNullableType, type datetimezone) then "datetimezone"
else if Type.Is(nonNullableType, type duration) then "duration"
else if Type.Is(nonNullableType, type function) then "function"