This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
fxFindMinMaxDates = (tableNames as list, optional dateColsID as text, optional excludeDateColNames as list) as record => | |
let | |
selectedTables = Record.SelectFields( | |
#sections[Section1], | |
tableNames, | |
MissingField.Ignore | |
), | |
rawData = Table.RemoveColumns( | |
Table.Combine(Record.ToList(selectedTables)), |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
fxExtractEightDigitSequence = let | |
extractEightDigitSequence = (txt as nullable text, optional Occurrence as number) => | |
let | |
input = txt ?? "", | |
parts = Text.SplitAny(input, Text.Remove(input, {"0" .. "9"})), | |
digits = List.Select(parts, each Text.Length(_) = 8) | |
in | |
{List.First(digits), List.Last(digits), digits}{(Occurrence ?? 0)}, | |
extractEightDigitSequenceType = type function ( |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
extractCharactersByCase = (input as nullable text, optional caseType as text) as text => | |
Text.Combine( | |
List.Select( | |
Text.ToList(input ?? ""), | |
(s) => | |
if Text.Proper(caseType ?? "Upper") = "Upper" | |
then not (Text.Lower(s) = s) | |
else not (Text.Upper(s) = s) | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var dateTableName = "Dates"; // Name of your date table | |
var dateKeyColName = "Date"; // Name of the date key column in the table | |
var colOperations = new List<Tuple<string, string, bool>>(){ | |
Tuple.Create("Quarter & Year", "QuarternYear", true), | |
Tuple.Create("Month & Year", "MonthnYear", true), | |
Tuple.Create("Month Name", "MonthOfYear", true), | |
Tuple.Create("Month Short", "MonthOfYear", true), | |
Tuple.Create("Month Initial", "MonthOfYear", true), | |
Tuple.Create("Week & Year", "WeeknYear", true), | |
Tuple.Create("Day of Week Name", "DayOfWeek", true), |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
fnDateTable = ( StartDate as date, EndDate as date, optional FYStartMonthNum as number, optional Holidays as list, optional WDStartNum as number, optional AddRelativeNetWorkdays as logical ) as table => | |
let | |
FYStartMonth = List.Select({1..12}, each _ = FYStartMonthNum){0}? ?? 1, | |
WDStart = List.Select({0..1}, each _ = WDStartNum){0}? ?? 0, | |
CurrentDate = Date.From(DateTimeZone.FixedUtcNow()), | |
DayCount = Duration.Days(Duration.From(EndDate - StartDate)) + 1, | |
weekStart = Day.Monday, | |
HolidaysProvided = Holidays <> null, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
/* Function to convert an input value like a date, datetime, datetimezone, or text to a target type */ | |
convertDateTo = let | |
fxConvertDateTo = (Value as any, ReturnType as text, optional Culture as any, optional formatString as text) as any => | |
let | |
Separators = Text.Combine(List.Select( | |
Text.ToList(Text.Remove(Text.From(Value) ?? "", {"0" .. "9"})), | |
each Text.Lower(_) = Text.Upper(_) ) | |
), | |
c = Culture ?? Culture.Current, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
colTypes = [ | |
#"any" = Any.Type, | |
#"date" = Date.Type, | |
#"time" = Time.Type, | |
#"datetime" = DateTime.Type, | |
#"logical" = Logical.Type, | |
#"number" = Number.Type, | |
#"currency" = Currency.Type, | |
#"integer" = Int64.Type, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
/* This was an exercise just for fun. Who knows, it might have a real-world application... */ | |
/* Generate every possible substring combination from a string */ | |
getAllSubstrings = (s as text, optional makeDistinct as logical, optional ignoreCase as logical) as list => | |
let | |
c = if ignoreCase ?? false then Comparer.OrdinalIgnoreCase else Comparer.Ordinal, | |
n = Text.Length(s), | |
sub = List.TransformMany( | |
{0..n-1}, | |
each {_+1..n}, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
fxErrorReport = (myTable as table, optional keyCols as list, optional scanCols as list ) as record => | |
let | |
colNames = Table.ColumnNames( myTable ), | |
validKeys = List.Intersect( { colNames, keyCols ?? {} } ), | |
hasKeys = List.Count( validKeys ) >0, | |
selCols = List.Intersect( { colNames, scanCols ?? {} } ), | |
nTable = Table.SelectColumns( myTable, if List.Count( selCols ) >0 then validKeys & selCols else colNames ), | |
reservedNames = { "Name", "Errors", "Reason", "Message", "Detail", "rowIndex", "nCol" }, | |
nameViolations = List.Intersect( { colNames, reservedNames } ), |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(t as table) as table => | |
Table.Profile(t, | |
{{ | |
"ErrorCount", | |
each true, | |
each Table.RowCount(Table.SelectRowsWithErrors(Table.FromColumns({_}))) | |
}} | |
) |
NewerOlder