In the MC expression language, 0 is FALSE and non-0 (e.g. 1) is TRUE.
The syntax of IfElse() is
condition1, outpu1,
condition2, output2,
...
conditionN, outputN
The final 1 as conditionN will always evaluate is TRUE (because 1 is non-0), so this gives you a final ELSE clause.
The Compare() in this expression turns out to be unnecessary, as Math() can do all the work:
IfElse(
Math(above([Bookmark] / 1000 / [Duration,0], 0.95)),
Watched,
Math(above([Bookmark] / 1000 / [Duration,0], 0.05)),
Watching,
1,
Not Watched
)
or to use on a single line:
IfElse(Math(above([Bookmark] / 1000 / [Duration,0], 0.95)), Watched, Math(above([Bookmark] / 1000 / [Duration,0], 0.05)), Watching, 1, Not Watched)
or using rick.ca's suggested method:
If(Math(above([Bookmark] / 1000 / [Duration,0], 0.95)), Watched, if(Math(above([Bookmark] / 1000 / [Duration,0], 0.05)), Watching, Not Watched))
rick.ca - the expression inside Math() is passed to a Windows library function which does the actual work. Since that function allows commas, parens, and forward slashes, MC has to peek inside the expression to not trip over these MC-reserved tokens. But it looks like when a field is on the right of a division character (/), MC misses this case:
Math(100/[duration,0])
fails, but all of these work:
Math(100 / [duration,0])
Math(100//[duration,0])
Math([duration,0]/100)