@@ -197,14 +197,19 @@ def _read_complete_execution_result(
197197
198198
199199def _create_header_mapper (
200- response : BareExecutionResponse , dim : int , label_overrides : Optional [LabelOverrides ] = None
200+ response : BareExecutionResponse ,
201+ dim : int ,
202+ label_overrides : Optional [LabelOverrides ] = None ,
203+ use_local_ids_in_headers : bool = False ,
201204) -> Callable [[Any , Optional [int ]], str ]:
202205 """
203206 Prepares header mapper function which is doing header structures translations into appropriate label used
204207 in a dataframe
205208 :param response: Response structure to gather dimension header details
206209 :param dim: dimension id
207210 :param label_overrides: label overrides
211+ :param use_local_ids_in_headers: Use local identifiers of header attributes and metrics. Optional.
212+
208213 :return: Mapper function
209214 """
210215 if label_overrides is None :
@@ -223,20 +228,26 @@ def _mapper(header: Any, header_idx: Optional[int]) -> str:
223228 label = header ["attributeHeader" ]["labelValue" ]
224229 elif "labelName" in header ["attributeHeader" ]:
225230 attr_local_id = header ["attributeHeader" ]["localIdentifier" ]
226- if attr_local_id in attribute_labels :
227- label = attribute_labels [ attr_local_id ][ "title" ]
231+ if use_local_ids_in_headers :
232+ label = attr_local_id
228233 else :
229- label = header ["attributeHeader" ]["labelName" ]
234+ if attr_local_id in attribute_labels :
235+ label = attribute_labels [attr_local_id ]["title" ]
236+ else :
237+ label = header ["attributeHeader" ]["labelName" ]
230238 elif "measureHeader" in header and header_idx is not None :
231239 measure_idx = header ["measureHeader" ]["measureIndex" ]
232240 measure_descriptor = dim_descriptor ["headers" ][header_idx ]["measureGroupHeaders" ][measure_idx ]
233241
234- if measure_descriptor ["localIdentifier" ] in measure_labels :
235- label = measure_labels [measure_descriptor ["localIdentifier" ]]["title" ]
236- elif "name" in measure_descriptor :
237- label = measure_descriptor ["name" ]
238- else :
242+ if use_local_ids_in_headers :
239243 label = measure_descriptor ["localIdentifier" ]
244+ else :
245+ if measure_descriptor ["localIdentifier" ] in measure_labels :
246+ label = measure_labels [measure_descriptor ["localIdentifier" ]]["title" ]
247+ elif "name" in measure_descriptor :
248+ label = measure_descriptor ["name" ]
249+ else :
250+ label = measure_descriptor ["localIdentifier" ]
240251 elif "totalHeader" in header :
241252 label = header ["totalHeader" ]["function" ]
242253 return label
@@ -249,11 +260,17 @@ def _headers_to_index(
249260 headers : Tuple [_DataHeaders , Optional [_DataHeaders ]],
250261 response : BareExecutionResponse ,
251262 label_overrides : LabelOverrides ,
263+ use_local_ids_in_headers : bool = False ,
252264) -> Optional [pandas .Index ]:
253265 if len (response .dimensions ) <= dim_idx or not len (response .dimensions [dim_idx ]["headers" ]):
254266 return None
255267
256- mapper = _create_header_mapper (response = response , dim = dim_idx , label_overrides = label_overrides )
268+ mapper = _create_header_mapper (
269+ response = response ,
270+ dim = dim_idx ,
271+ label_overrides = label_overrides ,
272+ use_local_ids_in_headers = use_local_ids_in_headers ,
273+ )
257274
258275 return pandas .MultiIndex .from_arrays (
259276 [
@@ -309,6 +326,7 @@ def convert_execution_response_to_dataframe(
309326 label_overrides : LabelOverrides ,
310327 result_size_dimensions_limits : ResultSizeDimensions ,
311328 result_size_bytes_limit : Optional [int ] = None ,
329+ use_local_ids_in_headers : bool = False ,
312330) -> pandas .DataFrame :
313331 """
314332 Converts execution result to a pandas dataframe, maintaining the dimensionality of the result.
@@ -332,9 +350,17 @@ def convert_execution_response_to_dataframe(
332350 return pandas .DataFrame (
333351 data = full_data ,
334352 index = _headers_to_index (
335- dim_idx = 0 , headers = full_headers , response = execution_response , label_overrides = label_overrides
353+ dim_idx = 0 ,
354+ headers = full_headers ,
355+ response = execution_response ,
356+ label_overrides = label_overrides ,
357+ use_local_ids_in_headers = use_local_ids_in_headers ,
336358 ),
337359 columns = _headers_to_index (
338- dim_idx = 1 , headers = full_headers , response = execution_response , label_overrides = label_overrides
360+ dim_idx = 1 ,
361+ headers = full_headers ,
362+ response = execution_response ,
363+ label_overrides = label_overrides ,
364+ use_local_ids_in_headers = use_local_ids_in_headers ,
339365 ),
340366 )
0 commit comments