abstract metric select function