I’d like to resurface this request with a proposal.
EXAMPLE USE CASE
I have a date column that in most cases can be derived from other data. However sometimes it needs to be manually overridden because the wold is complex
Workaround 1: Add an Override Column
Add a “Date override” column where people can specify manual dates. Then the date column is
if(
dateOverride.isNotBlank(),
dateOverride,
[the auto-calculated formula I was using for the column previously]
)
Does this work? Yep!
Is it an absolutely confounding UI for my users? Yep.
Workaround 2: Build a Reactivity System with Automations
I have not tried this because I don’t think the delay inherent in automations would be acceptable in my situation, but I imagine you could:
- Move the date column formula to “value for new rows” so it only runs upon creation
- Keep track of whether data has been manually or automatically entered via a hidden boolean column
- Have automations watching for changes in any of the data that used to feed into your date calculation formula
- When that data changes, update your date column if the most recent update to the cell was NOT a manual one
- When a cell is cleared (user intends to remove a manual override), run an automation with the date calculation formula
I haven’t yet worked out detecting manual vs automation input but it seems doable. But the biggest drawbacks here are complexity of the rig and automation delay.
PROPOSAL 1: BASIC OVERRIDES (PRIMARY RECOMMENDATION)
- Add a switch in the column options allowing manual overrides to the formula
- When a user edits a cell in such a column, accept their input
- Indicate which cells have been manually overridden vs calculated via formula (perhaps similar UI to when input doesn’t match column type?)
PROPOSAL 2: ACCESS TO MANUAL INPUT IN FORMULA
This is more complex but could open up interesting use cases for data validation/normalization in addition to manual overrides. Basically, you would expose any manually-entered input as a manualInput
variable accessible in column formulae. This pattern is common in animation tools, e.g. Expressions in Adobe After Effects.
To implement manual override, you would do:
IF(
manualInput.isNotBlank(),
manualInput,
[your regular column formula]
)
But you could also use it to manipulate input. I admit I can’t think of a great use case at the moment, but as a toy example you could ensure input begins with a dollar sign:
IF(
manualInput.startsWith('$'),
manualInput,
Concatenate('$', manualInput)
)
Drawbacks here would be that it’s harder for the doc maker to implement the basic “allow overrides” functionality, and we probably lose UI highlighting of manually-overridden cells.
CHALLENGES
- I recognize these proposals require a change to the data model, though I’m hoping it wouldn’t be too destructive (as I understand it, cells already carry ancillary data such as conditional formatting, and this could be handled similarly).
- I’m not quite sure how to handle the user wanting to specify an override value of blank (in my proposals, blank is how the user specifies “fall back to the formula”)