Skip to content

Instantly share code, notes, and snippets.

@jimbrig
Created May 6, 2025 16:40
Show Gist options
  • Save jimbrig/a621591744f3a468ca4a1c05ccdf8205 to your computer and use it in GitHub Desktop.
Save jimbrig/a621591744f3a468ca4a1c05ccdf8205 to your computer and use it in GitHub Desktop.
GMH Data Model Excel Workbook Modules
/*
* Extract the Street from an Address
*/
AddressStreet = LAMBDA(address, LEFT(address,FIND(",",address)-1));
/*
* Extract the City from an Adderss
*/
AddressCity = LAMBDA(address, TRIM(MID(address,FIND(",",address)+1,FIND(",",address,FIND(",",address)+1)-FIND(",",address)-1)));
/*
* Extract the State from an Address
*/
AddressState = LAMBDA(address, TRIM(MID(address,FIND(",",address,FIND(",",address)+1)+2,2)));
/*
* Extrct the Post Code from an Address
*/
AddressPostalCode = LAMBDA(address, RIGHT(address, 5));
// --- SQL Module ---
// Module containing Lambdas for generating SQL DDL Statements.
/**
* Generates SQL ENUM statements from header and values
*/
SQLEnum = LAMBDA(header_cell, values_range,
"CREATE TYPE ""survey""." & CHAR(34) & header_cell & CHAR(34) & " AS ENUM (" & CHAR(10) &
TEXTJOIN("," & CHAR(10), TRUE, " '" & FILTER(values_range, values_range <> "") & "'") & CHAR(10) &
");"
);
/**
* Formats a value properly for SQL based on its data type
*/
SQLValue = LAMBDA(value,
LET(
fmt, CELL("format", value),
is_date, LEFT(fmt, 1)="D",
formatted,
IFS(
ISTEXT(value), "'" & SUBSTITUTE(value, "'", "''") & "'",
ISBLANK(value), "NULL",
is_date, "'" & TEXT(value, "yyyy-mm-dd hh:mm:ss") & "'",
ISLOGICAL(value), IF(value, "TRUE", "FALSE"),
TRUE, value
),
formatted
)
);
/**
* Formats a row of data as SQL VALUES tuple
*/
SQLValues = LAMBDA(row_data,
"(" & TEXTJOIN(", ", FALSE, MAP(row_data, SQLValue)) & ")"
);
/**
* Generates a complete SQL INSERT statement for a range of data
*/
SQLInsert = LAMBDA(table_name, columns, data,
LET(
col_list, "(" & TEXTJOIN(", ", FALSE, columns) & ")",
values, BYROW(data, SQLValues),
values_with_commas, MAP(
values,
SEQUENCE(ROWS(values)),
LAMBDA(v, r, v & IF(r = ROWS(values), "", ", "))
),
all_values, TEXTJOIN(CHAR(10), FALSE, values_with_commas),
"INSERT INTO " & table_name & " " & col_list & " VALUES " & CHAR(10) & all_values & ";"
)
);
/**
* Generates a SQL CREATE TABLE statement based on column names and types
*/
SQLCreateTable = LAMBDA(table_name, columns, types,
LET(
columns_and_types, MAP(columns, types, LAMBDA(col, type, " " & col & " " & type)),
columns_text, TEXTJOIN("," & CHAR(10), FALSE, columns_and_types),
"CREATE TABLE " & table_name & " (" & CHAR(10) & columns_text & CHAR(10) & ");"
)
);
/**
* Generates a SQL SELECT statement with optional WHERE clause
*/
SQLSelect = LAMBDA(columns, table, [where_clause],
LET(
cols_text, IF(columns = "*", "*", TEXTJOIN(", ", FALSE, columns)),
where_part, IF(ISOMITTED(where_clause), "", " WHERE " & where_clause),
"SELECT " & cols_text & " FROM " & table & where_part & ";"
)
);
/**
* Get SQL Data Types
*/
SQLType =LAMBDA(in_list,
IF(
AND(ROWS(in_list)<>1,COLUMNS(in_list)<>1),
NA(),
LET(
_list,in_list,
_txt,ISTEXT(_list),
_formats,MAP(_list,LAMBDA(r,CELL("format",INDEX(r,1,1)))),
_isdates,LEFT(_formats,1)="D",
_out,MAKEARRAY(
ROWS(_list),
COLUMNS(_list),
LAMBDA(r,c,
IFS(
INDEX(_txt,r,c),"text",
INDEX(_isdates,r,c),"date",
TRUE,"number"
)
)
),
FILTER(_out,in_list<>"")
)
)
);
/**
* Determines if the current row is the last row in a range
*/
SQLLastRow = LAMBDA(data, current_row,
current_row = (ROWS(data) + MIN(ROW(data)) - 1)
);
/**
* Generate the created_at & updated_at SQL
*/
SQLCreatedAtUpdatedAt = " created_at TIMESTAMPTZ DEFUALT NOW()," & CHAR(10) & " updated_at TIMESTAMPTZ DEFUALT NOW()" & CHAR(10);
/**
* Generate the created_by & updated_by SQL
*/
SQLCreatedByUpdatedBy = " created_by UUID," & CHAR(10) & " updated_by UUID" & CHAR(10);
// --- Workbook Module ---
// Module containing named range definitions for the GMH Data Model Workbook.
/**
* Get Sheet Names of Current Workbook
*/
Workbook.GetSheetNames = TRANSPOSE(SUBSTITUTE(GET.WORKBOOK(1), "[" & GET.WORKBOOK(16) & "]", ""));
/**
* Define SheetNames
*/
Workbook.SheetNames = Workbook.GetSheetNames;
/**
* Get Sheet Names Filtering for a Pattern
*/
Workbook.GetSheetNamesByPattern = LAMBDA(pattern,
FILTER(SheetNames, REGEXTEST(SheetNames, pattern, 0))
);
/**
* Define the Default Property Image URL
*/
Workbook.DefaultPropertyImageURL = "https://placehold.co/600x400.png";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment