class_docstr: An input that describes the ordered item.
  
  The challenge with order-by items is that it may not be obvious how to match an order-by item to a metric or a
  group-by item in the query. When the query inputs were always strings, this was easy because the order-by item
  could be resolved with an equality check. However, when the query inputs could be a string or a *QueryParameter
  object, the equality check is not possible. e.g. consider the case:
  
      group-by item: TimeDimension("creation_time"), order-by item: "creation_time".
  
  Instead, the approach is to resolve the metrics / group-by items into concrete spec objects, and then use the
  SpecPattern generated from the order-by item input to match to those.
  
  possible_inputs is necessary because at parse-time for string inputs, order-by inputs are resolved to spec patterns,
  and those patterns could match to either metrics or group-by-items.
class_docstr_tok: ["An","input","that","describes","the","ordered","item",".","The","challenge","with","order-by","items","is","that","it","may","not","be","obvious","how","to","match","an","order-by","item","to","a","metric","or","a","group-by","item","in","the","query",".","When","the","query","inputs","were","always","strings",",","this","was","easy","because","the","order-by","item","could","be","resolved","with","an","equality","check",".","However",",","when","the","query","inputs","could","be","a","string","or","a","*","QueryParameter","object",",","the","equality","check","is","not","possible",".","e.g",".","consider","the","case",":","group-by","item",":","TimeDimension","(","``","creation_time","''",")",",","order-by","item",":","``","creation_time","''",".","Instead",",","the","approach","is","to","resolve","the","metrics","\/","group-by","items","into","concrete","spec","objects",",","and","then","use","the","SpecPattern","generated","from","the","order-by","item","input","to","match","to","those",".","possible_inputs","is","necessary","because","at","parse-time","for","string","inputs",",","order-by","inputs","are","resolved","to","spec","patterns",",","and","those","patterns","could","match","to","either","metrics","or","group-by-items","."]
code: def ui_description(self) -> str:
      return str(self.input_obj)
  
imports: from __future__ import annotations
  from dataclasses import dataclass
  from typing import Optional, Tuple, Union
  from dbt_semantic_interfaces.protocols import WhereFilterIntersection
  from typing_extensions import override
  from metricflow.mf_logging.formatting import indent
  from metricflow.mf_logging.pretty_print import mf_pformat
  from metricflow.naming.metric_scheme import MetricNamingScheme
  from metricflow.naming.naming_scheme import QueryItemNamingScheme
  from metricflow.protocols.query_parameter import GroupByParameter, MetricQueryParameter, OrderByQueryParameter
  from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath
  from metricflow.query.resolver_inputs.base_resolver_inputs import InputPatternDescription, MetricFlowQueryResolverInput
  from metricflow.specs.patterns.metric_pattern import MetricSpecPattern
  from metricflow.specs.patterns.spec_pattern import SpecPattern
label_desc: Use image node_id 1 for calling the ResolverInputForOrderByItem obj's underlying member method code with example usage: obj.ui_description() and returns: str