First of all, there are four ways of populating a custom field in the Email SendLog:
1.1 Matching field name in the Sendable DE
1.2 Matching attribute name passed in the API's Payload (e.g. Triggered Send)
2. Matching attribute name in the Subscriber's Attributes (All Subscribers list)
3. Matching AMPScript variable name inside an Email
The first two options are interchangeable and serve a similar purpose - provide initial information (Email Address and SubscriberKey) for the send either from API's Payload or Sendable DE's fields with an option to supply additional fields.
That is how the priority of populating custom fields in the Email SendLog goes in the same order as above. When the send is getting prepared, first it checks Sendable DE/API Payload, then Subscriber's Attributes, and lastly AMPScript variables. Even if all 3 places would be filled in, the priority would be Sendable DE's field, other 2 would be ignored.
That is what happens in your scenario, since a Sendable DE has a value for the "Brand" field - the AMPScript variable
@Brand will be skipped. And if you would like to use the AMPScript variable's value, then you would need to simply play around with names:
- Change the field's name in the SendLog and reference a new name via AMPScript
- Create a new field in the SendLog and only reference it with AMPScript
- Vice versa, change Sendable DE's field name