The brief
The client works with large list and operational files. Filtering in Excel overwrites the last step. Nobody can say, three days later, exactly which conditions produced the file that went out.
They needed complete filtering - nested conditions, reusable sequences, exports - with history that behaves like a tree, not like undo.
How we approached it
The model is parent dataset plus transformation equals derived dataset. Root has no filter. Every other node applies a keep or remove, optionally scoped, and caches the matching row ids. Rows are not duplicated per branch.
Saved transformations and saved sequences are definitions, not pointers at live nodes, so a template can be applied to a new import without dragging old data with it.
What we built
A three-pane web application: source tree, filter builder, and a virtualized table of the current node. Import wizards cover delimited files and fixed-width layouts. Any node can export the result, the lineage, or both.
The same discipline - do not destroy the last good view - is what we apply when a team later asks for workflow automation or a web scraper feeding this kind of source.
This engagement is covered by a confidentiality agreement, so the client is not named and some implementation detail is described in general terms.