You could try create custom activity fields to compute these things. This one calculates “Hike ascent time” (total time doing power hike in trail run):
{
let time = icu.streams.time
let alt = icu.streams.fixed_altitude
let cadence = icu.streams.cadence
// https://forum.intervals.icu/t/elevation-gain-off/8463/16
let threshold = 1.2
let totSecs = 0.0
let prev = 0
let maxDeltaTime = activity.icu_median_time_delta ? activity.icu_median_time_delta * 2 : 0
if (maxDeltaTime < 30) maxDeltaTime = 30
let prevAlt = alt[0]
let prevTime = 0
for (let i = 1; i < alt.length - 1; i++) {
let t = time[i]
if (t == null) continue
let deltaTime = t - prev
if (deltaTime <= maxDeltaTime) {
let v = alt[i]
if (v != null) {
if (prevAlt != null) {
let delta = v - prevAlt
if (Math.abs(delta) >= threshold) {
if (delta > 0.0 && cadence[i] <= 69) totSecs += t - prevTime
prevAlt = v
prevTime = t
}
} else {
prevAlt = v
}
}
} else {
prevAlt = alt[i]
prevTime = t
}
prev = t
}
totSecs
}