Is a "semantic layer" nothing more than a fancy name for a SQL VIEW in a NoSQL?
Semantic Layer is about decomposing views into dimensions and aggregates, then letting downstream apps/users compose their own views on top without having to redefine/re-calculate business level metrics.
This makes data analyis more flexible than sql views which are hardcoded on particular groupings.
create view active_cx as select * from customer join audit_events using(...) join ... where -- active condition
-- use active_cx wherever
select ... from orders join active_cx using(...) where ts > start_of_month() group by active_cx.id