A bare column appears outside the places columns are allowed (aggregation arguments, Calculate predicates, Fixed/modifier arguments, iterator row expressions over the iterated table, column-typed signature parameters). A measure must reduce to one value per group — row context exists only inside iterators. The code also fires when an iterator row expression references a column from a table other than the one being iterated, or a [Measure] (no context transition).
Row-level arithmetic belongs in an iterator: SumX(Sales, Sales.Qty * Sales.Price). Row-level logic like Switch(Sales.Segment, …) belongs in a calculated field; aggregate its result in the measure.