I think you can create "fake" entries for the columns, like this?
let starttime = 14d;
let endtime = 1d;
let RareRegion = AzureActivity
| where TimeGenerated between (ago(starttime) .. ago(endtime))
| evaluate bag_unpack(Properties_d, OutputColumnPrefix='unpack_', columnsConflict='replace_source')
| extend unpack_requestbody = column_ifexists('unpack_requestbody','fake')
| where isnotempty(unpack_requestbody)
| extend request_body = parse_json(unpack_requestbody)
| evaluate bag_unpack(request_body, OutputColumnPrefix='unpack_', columnsConflict='replace_source')
| extend unpack_location = column_ifexists('unpack_location','fake')
| where isnotempty(unpack_location)
| summarize count() by CallerIpAddress, Caller, OperationNameValue, unpack_location, bin(TimeGenerated, 1d)
// Returns all the records from the right side that don't have matches from the left.
| join kind=rightantisemi (
AzureActivity
| where TimeGenerated > ago(endtime)
| evaluate bag_unpack(Properties_d, OutputColumnPrefix='unpack_', columnsConflict='replace_source')
| extend unpack_requestbody = column_ifexists('unpack_requestbody','fake')
| where isnotempty(unpack_requestbody)
| extend request_body = parse_json(unpack_requestbody)
| evaluate bag_unpack(request_body, OutputColumnPrefix='unpack_', columnsConflict='replace_source')
| extend unpack_location = column_ifexists('unpack_location','fake')
| where isnotempty(unpack_location)
| summarize
StartTimeUtc = min(TimeGenerated),
EndTimeUtc = max(TimeGenerated),
ActivityTimeStamp = make_set(TimeGenerated, 100),
ActivityStatusValue = make_set(ActivityStatusValue, 100),
CorrelationIds = make_set(CorrelationId, 100),
ResourceGroups = make_set(ResourceGroup, 100),
ResourceIds = make_set(_ResourceId, 100),
ActivityCountByCallerIPAddress = count()
by CallerIpAddress, Caller, OperationNameValue, unpack_location)
on CallerIpAddress, Caller, OperationNameValue, unpack_location;
RareRegion
| extend Name = iif(Caller has '@', tostring(split(Caller, '@', 0)[0]), "")
| extend UPNSuffix = iif(Caller has '@', tostring(split(Caller, '@', 1)[0]), "")
| extend AadUserId = iif(Caller !has '@', Caller, "")