Skip to content

NativeView

NativeView(cube_name, view_name, suppress_empty_columns=False, suppress_empty_rows=False, format_string='0.#########', titles=None, columns=None, rows=None)

Bases: View

Abstraction of TM1 NativeView (classic cube view)

:Notes: Complete, functional and tested

Source code in TM1py/Objects/NativeView.py
def __init__(
    self,
    cube_name: str,
    view_name: str,
    suppress_empty_columns: Optional[bool] = False,
    suppress_empty_rows: Optional[bool] = False,
    format_string: Optional[str] = "0.#########",
    titles: Optional[Iterable[ViewTitleSelection]] = None,
    columns: Optional[Iterable[ViewAxisSelection]] = None,
    rows: Optional[Iterable[ViewAxisSelection]] = None,
):
    super().__init__(cube_name, view_name)
    self._suppress_empty_columns = suppress_empty_columns
    self._suppress_empty_rows = suppress_empty_rows
    self._format_string = format_string
    self._titles = list(titles) if titles else []
    self._columns = list(columns) if columns else []
    self._rows = list(rows) if rows else []

MDX property

as_MDX property

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

Returns:

Type Description
str

String, the MDX Query

body property

columns property

format_string property writable

mdx property

rows property

suppress_empty_cells property writable

suppress_empty_columns property writable

suppress_empty_rows property writable

titles property

add_column(dimension_name, subset=None)

Add Dimension or Subset to the column-axis

Parameters:

Name Type Description Default
dimension_name str

name of the dimension

required
subset Union[Subset, AnonymousSubset]

instance of TM1py.Subset. Can be None

None

Returns:

Type Description
Source code in TM1py/Objects/NativeView.py
def add_column(self, dimension_name: str, subset: Union[Subset, AnonymousSubset] = None):
    """Add Dimension or Subset to the column-axis

    :param dimension_name: name of the dimension
    :param subset: instance of TM1py.Subset. Can be None
    :return:
    """
    view_axis_selection = ViewAxisSelection(dimension_name=dimension_name, subset=subset)
    self._columns.append(view_axis_selection)

add_row(dimension_name, subset=None)

Add Dimension or Subset to the row-axis

Parameters:

Name Type Description Default
dimension_name str
required
subset Subset

instance of TM1py.Subset. Can be None instead.

None

Returns:

Type Description
Source code in TM1py/Objects/NativeView.py
def add_row(self, dimension_name: str, subset: Subset = None):
    """Add Dimension or Subset to the row-axis

    :param dimension_name:
    :param subset: instance of TM1py.Subset. Can be None instead.
    :return:
    """
    view_axis_selection = ViewAxisSelection(dimension_name=dimension_name, subset=subset)
    self._rows.append(view_axis_selection)

add_title(dimension_name, selection, subset=None)

Add subset and element to the titles-axis

Parameters:

Name Type Description Default
dimension_name str

name of the dimension.

required
selection str

name of an element.

required
subset Union[Subset, AnonymousSubset]

instance of TM1py.Subset. Can be None instead.

None

Returns:

Type Description
Source code in TM1py/Objects/NativeView.py
def add_title(self, dimension_name: str, selection: str, subset: Union[Subset, AnonymousSubset] = None):
    """Add subset and element to the titles-axis

    :param dimension_name: name of the dimension.
    :param selection: name of an element.
    :param subset:  instance of TM1py.Subset. Can be None instead.
    :return:
    """
    view_title_selection = ViewTitleSelection(dimension_name, subset, selection)
    self._titles.append(view_title_selection)

from_dict(view_as_dict, cube_name=None) classmethod

Source code in TM1py/Objects/NativeView.py
@classmethod
def from_dict(cls, view_as_dict: Dict, cube_name: str = None) -> "NativeView":
    titles, columns, rows = [], [], []

    for axis_selection in view_as_dict["Titles"]:
        subset = cls._build_subset_from_axis_selection(axis_selection)

        if "Selected" in axis_selection:
            selected = axis_selection["Selected"]["Name"]

        elif "Selected@odata.bind" in axis_selection:
            selected = read_object_name_from_url(
                url=axis_selection["Selected@odata.bind"],
                pattern=r"Dimensions\('.*?'\)/Hierarchies\('.*?'\)/Elements\('(.+?)'\)",
            )

            if not selected:
                raise ValueError(
                    f"Unexpected value for 'Selected@odata.bind' property " f"in view title dict: '{selected}'"
                )

        else:
            raise ValueError("View Title dict must contain 'Selected' or 'Selected@odata.bind' as key")

        titles.append(ViewTitleSelection(dimension_name=subset.dimension_name, subset=subset, selected=selected))

    for i, axis in enumerate([view_as_dict["Columns"], view_as_dict["Rows"]]):
        for axis_selection in axis:
            subset = cls._build_subset_from_axis_selection(axis_selection)

            axis_selection = ViewAxisSelection(dimension_name=subset.dimension_name, subset=subset)
            columns.append(axis_selection) if i == 0 else rows.append(axis_selection)

    if not cube_name:
        cube_name = view_as_dict["@odata.context"][20 : view_as_dict["@odata.context"].find("')/")]
    return cls(
        cube_name=cube_name,
        view_name=view_as_dict["Name"],
        suppress_empty_columns=view_as_dict["SuppressEmptyColumns"],
        suppress_empty_rows=view_as_dict["SuppressEmptyRows"],
        format_string=view_as_dict["FormatString"],
        titles=titles,
        columns=columns,
        rows=rows,
    )

from_json(view_as_json, cube_name=None) classmethod

Alternative constructor :Parameters: view_as_json : string, JSON

:Returns: View : an instance of this class

Source code in TM1py/Objects/NativeView.py
@classmethod
def from_json(cls, view_as_json: str, cube_name: Optional[str] = None) -> "NativeView":
    """Alternative constructor
    :Parameters:
        `view_as_json` : string, JSON

    :Returns:
        `View` : an instance of this class
    """
    view_as_dict = json.loads(view_as_json)
    return NativeView.from_dict(view_as_dict, cube_name)

remove_column(dimension_name)

remove dimension from the column axis

Parameters:

Name Type Description Default
dimension_name str
required

Returns:

Type Description
Source code in TM1py/Objects/NativeView.py
def remove_column(self, dimension_name: str):
    """remove dimension from the column axis

    :param dimension_name:
    :return:
    """
    for column in self._columns[:]:
        if case_and_space_insensitive_equals(column.dimension_name, dimension_name):
            self._columns.remove(column)

remove_row(dimension_name)

remove dimension from the row axis

Parameters:

Name Type Description Default
dimension_name str
required

Returns:

Type Description
Source code in TM1py/Objects/NativeView.py
def remove_row(self, dimension_name: str):
    """remove dimension from the row axis

    :param dimension_name:
    :return:
    """
    for row in self._rows[:]:
        if case_and_space_insensitive_equals(row.dimension_name, dimension_name):
            self._rows.remove(row)

remove_title(dimension_name)

Remove dimension from the titles-axis

Parameters:

Name Type Description Default
dimension_name str

name of the dimension.

required

Returns:

Type Description
Source code in TM1py/Objects/NativeView.py
def remove_title(self, dimension_name: str):
    """Remove dimension from the titles-axis

    :param dimension_name: name of the dimension.
    :return:
    """
    for title in self._titles[:]:
        if case_and_space_insensitive_equals(title.dimension_name, dimension_name):
            self._titles.remove(title)

substitute_title(dimension, element)

Source code in TM1py/Objects/NativeView.py
def substitute_title(self, dimension: str, element: str):
    for title in self._titles:
        if case_and_space_insensitive_equals(title.dimension_name, dimension):
            title._subset = AnonymousSubset(dimension, dimension, elements=[element])
            title._selected = element
            return

    raise ValueError(f"Dimension '{dimension}' not found in titles")