def get_element_identifiers(self, dimension_name: str, hierarchy_name: str, elements: Union[str, List[str]], **kwargs) -> CaseAndSpaceInsensitiveSet: """ Get all element names and alias values for a set of elements in a hierarchy :param dimension_name: :param hierarchy_name: :param elements: MDX (Set) expression or iterable of elements :return: """ alias_attributes = self.get_alias_element_attributes(dimension_name, hierarchy_name, **kwargs) if isinstance(elements, str): mdx_element_selection = elements else: mdx_element_selection = ",".join(build_element_unique_names( [dimension_name] * len(elements), elements, [hierarchy_name] * len(elements))) mdx = """ SELECT {{ {elem_mdx} }} ON ROWS, {{ {attr_mdx} }} ON COLUMNS FROM [}}ElementAttributes_{dim}] """.format( elem_mdx=mdx_element_selection, attr_mdx=",".join(build_element_unique_names( ["}ElementAttributes_" + dimension_name] * len(alias_attributes), alias_attributes)), dim=dimension_name) return self._retrieve_mdx_rows_and_cell_values_as_string_set(mdx, **kwargs)
def get_attribute_of_elements(self, dimension_name: str, hierarchy_name: str, attribute: str, elements: Union[str, List[str]] = None, exclude_empty_cells: bool = True, element_unique_names: bool = False) -> dict: """ Get element name and attribute value for a set of elements in a hierarchy :param dimension_name: :param hierarchy_name: :param attribute: Name of the Attribute :param elements: MDX (Set) expression or iterable of elements :param exclude_empty_cells: Boolean :param element_unique_names: Boolean :return: Dict {'01':'Jan', '02':'Feb'} """ if not elements: elements = self.get_element_names(dimension_name=dimension_name, hierarchy_name=hierarchy_name) if isinstance(elements, str): mdx_element_selection = elements else: mdx_element_selection = ",".join(build_element_unique_names( [dimension_name] * len(elements), elements, [hierarchy_name] * len(elements))) mdx = """ SELECT {{ {elem_mdx} }} ON ROWS, {{ {attr_mdx} }} ON COLUMNS FROM [}}ElementAttributes_{dim}] """.format( elem_mdx=mdx_element_selection, attr_mdx="[}ElementAttributes_" + dimension_name + "].[" + attribute + "]", dim=dimension_name) rows_and_values = self._retrieve_mdx_rows_and_values(mdx, element_unique_names=element_unique_names) return self._extract_dict_from_rows_and_values(rows_and_values, exclude_empty_cells=exclude_empty_cells)