Skip to content

MDXView

MDXView(cube_name, view_name, MDX)

Bases: View

Abstraction on TM1 MDX view

IMPORTANT. MDXViews can't be seen through the old TM1 clients (Archict, Perspectives). They do exist though!

Source code in TM1py/Objects/MDXView.py
def __init__(self, cube_name: str, view_name: str, MDX: str):
    View.__init__(self, cube_name, view_name)
    self._mdx = MDX

MDX property writable

body property

mdx property writable

construct_body()

Source code in TM1py/Objects/MDXView.py
def construct_body(self) -> str:
    mdx_view_as_dict = collections.OrderedDict()
    mdx_view_as_dict["@odata.type"] = "ibm.tm1.api.v1.MDXView"
    mdx_view_as_dict["Name"] = self._name
    mdx_view_as_dict["MDX"] = self._mdx
    return json.dumps(mdx_view_as_dict, ensure_ascii=False)

from_dict(view_as_dict, cube_name=None) classmethod

Source code in TM1py/Objects/MDXView.py
@classmethod
def from_dict(cls, view_as_dict: Dict, cube_name: str = None) -> "MDXView":
    return cls(
        cube_name=view_as_dict["Cube"]["Name"] if not cube_name else cube_name,
        view_name=view_as_dict["Name"],
        MDX=view_as_dict["MDX"],
    )

from_json(view_as_json, cube_name=None) classmethod

Source code in TM1py/Objects/MDXView.py
@classmethod
def from_json(cls, view_as_json: str, cube_name: Optional[str] = None) -> "MDXView":
    view_as_dict = json.loads(view_as_json)
    return cls.from_dict(view_as_dict, cube_name)

substitute_title(dimension, hierarchy, element)

dimension and hierarchy name are space sensitive!

Parameters:

Name Type Description Default
dimension str
required
hierarchy str
required
element str
required

Returns:

Type Description
Source code in TM1py/Objects/MDXView.py
def substitute_title(self, dimension: str, hierarchy: str, element: str):
    """dimension and hierarchy name are space sensitive!

    :param dimension:
    :param hierarchy:
    :param element:
    :return:
    """
    pattern = re.compile(r"\[" + dimension + r"\].\[" + hierarchy + r"\].\[(.*?)\]", re.IGNORECASE)
    findings = re.findall(pattern, self._mdx)

    if findings:
        self._mdx = re.sub(pattern=pattern, repl=f"[{dimension}].[{hierarchy}].[{element}]", string=self._mdx)
        return

    if hierarchy is None or case_and_space_insensitive_equals(dimension, hierarchy):
        pattern = re.compile(r"\[" + dimension + r"\].\[(.*?)\]", re.IGNORECASE)
        findings = re.findall(pattern, self._mdx)
        if findings:
            self._mdx = re.sub(pattern=pattern, repl=f"[{dimension}].[{element}]", string=self._mdx)
            return

    raise ValueError(f"No selection in title with dimension: '{dimension}' and hierarchy: '{hierarchy}'")