A macro gives a repeated Jinja pattern a name. Define its arguments in a macro block, then call it from a model expression. The rendered output must still be valid SQL.
Passing a column name as a quoted Jinja string lets the macro write that identifier into the query; passing a SQL string value requires the SQL quotes to remain in the rendered text.
Keep macros small enough to inspect in Compile. A useful macro removes repeated mechanics, such as trimming and lowercasing a code, while the model retains the business condition. Give optional arguments explicit defaults, and decide how NULL should behave before replacing it.
These tasks use the same normalization macro across different sources, then ask you to change the macro itself without rewriting every caller. That's the benefit of reuse, and also its risk.