Esempio n. 1
0
    def get_native_view(self, cube_name: str, view_name: str, private=False, **kwargs) -> NativeView:
        """ Get a NativeView from TM1 Server

        :param cube_name:  string, name of the cube
        :param view_name:  string, name of the native view
        :param private:    boolean

        :return: instance of TM1py.NativeView
        """
        view_type = "PrivateViews" if private else "Views"
        url = format_url(
            "/api/v1/Cubes('{}')/{}('{}')?$expand="
            "tm1.NativeView/Rows/Subset($expand=Hierarchy($select=Name;"
            "$expand=Dimension($select=Name)),Elements($select=Name);"
            "$select=Expression,UniqueName,Name, Alias),  "
            "tm1.NativeView/Columns/Subset($expand=Hierarchy($select=Name;"
            "$expand=Dimension($select=Name)),Elements($select=Name);"
            "$select=Expression,UniqueName,Name,Alias), "
            "tm1.NativeView/Titles/Subset($expand=Hierarchy($select=Name;"
            "$expand=Dimension($select=Name)),Elements($select=Name);"
            "$select=Expression,UniqueName,Name,Alias), "
            "tm1.NativeView/Titles/Selected($select=Name)",
            cube_name, view_type, view_name)
        response = self._rest.GET(url, **kwargs)
        native_view = NativeView.from_json(response.text, cube_name)
        return native_view
Esempio n. 2
0
    def get_all(self, cube_name: str, **kwargs) -> Tuple[List[View], List[View]]:
        """ Get all public and private views from cube.

        :param cube_name: String, name of the cube.
        :return: 2 Lists of TM1py.View instances: private views, public views
        """
        private_views, public_views = [], []
        for view_type in ('PrivateViews', 'Views'):
            url = format_url(
                "/api/v1/Cubes('{}')/{}?$expand="
                "tm1.NativeView/Rows/Subset($expand=Hierarchy($select=Name;"
                "$expand=Dimension($select=Name)),Elements($select=Name);"
                "$select=Expression,UniqueName,Name, Alias),  "
                "tm1.NativeView/Columns/Subset($expand=Hierarchy($select=Name;"
                "$expand=Dimension($select=Name)),Elements($select=Name);"
                "$select=Expression,UniqueName,Name,Alias), "
                "tm1.NativeView/Titles/Subset($expand=Hierarchy($select=Name;"
                "$expand=Dimension($select=Name)),Elements($select=Name);"
                "$select=Expression,UniqueName,Name,Alias), "
                "tm1.NativeView/Titles/Selected($select=Name)",
                cube_name, view_type)
            response = self._rest.GET(url, **kwargs)
            response_as_list = response.json()['value']
            for view_as_dict in response_as_list:
                if view_as_dict['@odata.type'] == '#ibm.tm1.api.v1.MDXView':
                    view = MDXView.from_dict(view_as_dict, cube_name)
                else:
                    view = NativeView.from_dict(view_as_dict, cube_name)
                if view_type == "PrivateViews":
                    private_views.append(view)
                else:
                    public_views.append(view)
        return private_views, public_views
Esempio n. 3
0
    def get_native_view(self, cube_name, view_name, private=True):
        """ Get a NativeView from TM1 Server

        :param cube_name:  string, name of the cube
        :param view_name:  string, name of the native view
        :param private:    boolean

        :return: instance of TM1py.NativeView
        """
        view_type = "PrivateViews" if private else "Views"
        request = "/api/v1/Cubes('{}')/{}('{}')?$expand=" \
                  "tm1.NativeView/Rows/Subset($expand=Hierarchy($select=Name;" \
                  "$expand=Dimension($select=Name)),Elements($select=Name);" \
                  "$select=Expression,UniqueName,Name, Alias),  " \
                  "tm1.NativeView/Columns/Subset($expand=Hierarchy($select=Name;" \
                  "$expand=Dimension($select=Name)),Elements($select=Name);" \
                  "$select=Expression,UniqueName,Name,Alias), " \
                  "tm1.NativeView/Titles/Subset($expand=Hierarchy($select=Name;" \
                  "$expand=Dimension($select=Name)),Elements($select=Name);" \
                  "$select=Expression,UniqueName,Name,Alias), " \
                  "tm1.NativeView/Titles/Selected($select=Name)".format(cube_name, view_type, view_name)
        view_as_json = self._rest.GET(request)
        native_view = NativeView.from_json(view_as_json, cube_name)
        return native_view
Esempio n. 4
0
    def search_subset_in_native_views(
            self,
            dimension_name: str = None,
            subset_name: str = None,
            cube_name: str = None,
            include_elements: bool = False,
            **kwargs) -> Tuple[List[View], List[View]]:
        """ Get all public and private native views that utilize specified dimension subset

        :param dimension_name: string, valid dimension name with subset to query
        :param subset_name: string, valid subset name to search for in views
        :param cube_name: str, optionally specify cube to search, otherwise will search all cubes
        :param include_elements: false to return view details without elements, faster
        :return: 2 Lists of TM1py.View instances: private views, public views
        """

        dimension_name = dimension_name.lower().replace(' ', '')
        subset_name = subset_name.lower().replace(' ', '')

        element_filter = ";$top=0" if not include_elements else ""
        if cube_name:
            base_url = format_url(
                "/api/v1/Cubes?$select=Name&$filter=replace(tolower(Name),' ', '') eq '{}'",
                cube_name.lower().replace(' ', ''))
        else:
            base_url = "/api/v1/Cubes?$select=Name"

        private_views, public_views = [], []
        for view_type in ('PrivateViews', 'Views'):
            url = base_url + format_url(
                "&$expand={}($filter=isof(tm1.NativeView) and"
                "("
                "(tm1.NativeView/Rows/any (r: replace(tolower(r/Subset/Name), ' ', '') eq '{}' "
                "and replace(tolower(r/Subset/Hierarchy/Dimension/Name), ' ', '') eq '{}'))"
                "or"
                "(tm1.NativeView/Columns/any (c: replace(tolower(c/Subset/Name), ' ', '') eq '{}' "
                "and replace(tolower(c/Subset/Hierarchy/Dimension/Name), ' ', '') eq '{}')) "
                "or"
                "(tm1.NativeView/Titles/any (t: replace(tolower(t/Subset/Name), ' ', '') eq '{}' "
                "and replace(tolower(t/Subset/Hierarchy/Dimension/Name), ' ', '') eq '{}'))"
                ");"
                "$expand=tm1.NativeView/Rows/Subset($expand=Hierarchy($select=Name;"
                "$expand=Dimension($select=Name)),Elements($select=Name{});"
                "$select=Expression,UniqueName,Name, Alias),  "
                "tm1.NativeView/Columns/Subset($expand=Hierarchy($select=Name;"
                "$expand=Dimension($select=Name)),Elements($select=Name{});"
                "$select=Expression,UniqueName,Name,Alias), "
                "tm1.NativeView/Titles/Subset($expand=Hierarchy($select=Name;"
                "$expand=Dimension($select=Name)),Elements($select=Name{});"
                "$select=Expression,UniqueName,Name,Alias), "
                "tm1.NativeView/Titles/Selected($select=Name))", view_type,
                subset_name, dimension_name, subset_name, dimension_name,
                subset_name, dimension_name, element_filter, element_filter,
                element_filter)

            response = self._rest.GET(url, **kwargs)
            response_as_list = response.json()['value']
            for cube in response_as_list:
                for view_as_dict in cube[view_type]:
                    view = NativeView.from_dict(view_as_dict, cube['Name'])
                    if view_type == "PrivateViews":
                        private_views.append(view)
                    else:
                        public_views.append(view)

        return private_views, public_views