def test_mdx_hierarchy_set_from_str(self): hierarchy_set = MdxHierarchySet.from_str( dimension="Dimension", hierarchy="Hierarchy", mdx="{[DIMENSION].[HIERARCHY].MEMBERS}") self.assertEqual(hierarchy_set.to_mdx(), "{[DIMENSION].[HIERARCHY].MEMBERS}")
def test_mdx_hierarchy_set_from_str_with_other(self): hierarchy_set = MdxHierarchySet.from_str( dimension="Dimension", hierarchy="Hierarchy", mdx="{[DIMENSION].[HIERARCHY].MEMBERS}").filter_by_attribute("Attribute1", ["Value1"]) self.assertEqual( hierarchy_set.to_mdx(), '{FILTER({[DIMENSION].[HIERARCHY].MEMBERS},[}ELEMENTATTRIBUTES_DIMENSION].([}ELEMENTATTRIBUTES_DIMENSION].[Attribute1])="Value1")}')
def as_MDX(self) -> str: """ Build a valid MDX Query from an Existing cubeview. Takes Zero suppression into account. Throws an Exception when no elements are place on the columns. Subsets are referenced in the result-MDX through the TM1SubsetToSet Function :return: String, the MDX Query """ if not self.columns: raise ValueError("Column selection must not be empty") query = MdxBuilder.from_cube(self.cube) if self._suppress_empty_rows: query.rows_non_empty() if self.suppress_empty_columns: query.columns_non_empty() axes = [self.columns] if self.rows: axes.append(self.rows) for axis_id, axis in enumerate(axes): for axis_selection in axis: subset = axis_selection.subset if isinstance(subset, AnonymousSubset): if subset.expression is not None: mdx_hierarchy_set = MdxHierarchySet.from_str( dimension=subset.dimension_name, hierarchy=subset.hierarchy_name, mdx=subset.expression) else: members = [ Member.of(subset.dimension_name, element) for element in subset.elements ] mdx_hierarchy_set = MdxHierarchySet.members(members) else: mdx_hierarchy_set = MdxHierarchySet.tm1_subset_to_set( dimension=axis_selection.dimension_name, hierarchy=axis_selection.hierarchy_name, subset=subset.name) query.add_hierarchy_set_to_axis( axis=axis_id, mdx_hierarchy_set=mdx_hierarchy_set) for title in self._titles: query.add_member_to_where( Member.of(title.dimension_name, title.selected)) return query.to_mdx()