You can look up the description for the columns in an XE trace in the sys.dm_xe_object_columns view. For example, to view the column defs for the sp_statement_completed event:
SELECT name, type_name, column_type, capabilities_desc, description
WHERE object_name = 'sp_statement_completed'
ORDER BY column_type, column_id
duration - "The time (in microseconds) that it took to execute the statement."
Duration is the wall clock amount of time between the start time and end time of execution.
cpu_time - "Indicates the CPU time (in microseconds) that is consumed by the statement."
cpu_time is the amount of time was 'on CPU', meaning 'actually executing' per CPU.
A blocked statement will continue to accrue Duration time but no cpu_time.
There is no direct correlation between duration and cpu_time; they measure different operational aspects of a running query.
A statement that took 4 milliseconds to complete, during which it was actively executing in parallel on 8 cores for 3 milliseconds of it, would show 4000 as the duration and 24000 for the cpu_time.
A statement that took 4 milliseconds to complete, during which it was blocked* for 3.5 milliseconds before completing on one core in 0.5ms would have 4000 for the duration and 500 for the cpu_time.
* "Blocked" in this context refers to any wait condition, not just normal SQL Server lock-based blocking.