TM1 Rest Api 参考文档

概述

  1. tm1 rest api 使用的是OData Version 4 标准:

    http://www.odata.org/documentation/

     

  2. tm1 rest api 文档地址:

https://www.ibm.com/support/knowledgecenter/zh/SSD29G_2.0.0/com.ibm.swg.ba.cognos.tm1_rest_api.2.0.0.doc/tm1_rest_api.html

url说明

访问tm1 rest api的url如下:

http://tm1server:httpportnumber/api/v1/
http:// tm1server:httpportnumber/api/v1/$metadata

其中tm1server就是tm1server的ip;

Httpportnumber是安装tm1server时的配置文件tm1s.cfg中配置的:

HTTPPortNumber = 8015

浏览器直接访问url可以查看tm1对象:

image.png

image.png

对象说明

参考TM1官方文档 TM1 REST API--> Metadata-->Entity types

https://www.ibm.com/support/knowledgecenter/zh/SSD29G_2.0.0/com.ibm.swg.ba.cognos.tm1_rest_api.2.0.0.doc/r_restapi_v1_csdl_alltypes.html#restapi_v1_csdl_entitytypes

image.png

Entity types下的所有对象包括cube、视图、维度、子集、元素等,都可以用来查看、操作。具体查看方式可以参考OData4的文档。 

方法说明

参考TM1官方文档 TM1 REST API--> Metadata-->Actions

https://www.ibm.com/support/knowledgecenter/zh/SSD29G_2.0.0/com.ibm.swg.ba.cognos.tm1_rest_api.2.0.0.doc/r_restapi_v1_csdl_actions.html#restapi_v1_csdl_actions

image.png

Actions可以对Entity进行操作。具体方式可以参考OData4的文档。

以下示例通过postman来调用restapi接口。

示例

  • 查询cubes

image.png

url:http://ip:port/api/v1/Cubes

请求方式:get

认证:Basic Auth - 输入用户密码

参数:无

Body:无

返回所有cube的内容:

 

{
    "@odata.context": "$metadata#Cubes",
    "value": [
        {
            "@odata.etag": "W/\"f902bfdd55eb399944374e2e1879b8dc2359cf38\"",
            "Name": "名字",
            "Rules": null,
            "DrillthroughRules": null,
            "LastSchemaUpdate": "2020-09-17T04:20:02.203Z",
            "LastDataUpdate": "2020-09-17T05:33:32.539Z",
            "Attributes": {
                "Caption": "名字"
            }
        },{},{}…{}
    ]
}

说明:"Name":cube名;  "Rules":规则内容;  

延申:cube的属性有name、rules、DrillthroughRules等,是否可以只返回cube的某一个属性?

  • 查询cubes的Name属性

image.png

url:http://ip:port/api/v1/Cubes?$select=Name

请求方式:get

认证:Basic Auth - 输入用户密码

参数:无

Body:无

返回所有cube的Name属性:

 

{
    "@odata.context": "$metadata#Cubes(Name)",
    "value": [
        {
            "@odata.etag": "W/\"f902bfdd55eb399944374e2e1879b8dc2359cf38\"",
            "Name": "cube名"
        },
        {
            "@odata.etag": "W/\"a764851aa2ae29b3e764767d9d5ce07cd41c75c3\"",
            "Name": " cube名"
        },
        {
            "@odata.etag": "W/\"df06bb06bdfffd8ee1d17bb4876436391af4b545\"",
            "Name": " cube名"
        }
    ]
}

延申:此处返回了所有cube的信息,是否可以只返回某一个cube的?

  • 查询某一个cube【cube1】

image.png

url:http://ip:port/api/v1/Cubes('cube1')

说明:在url中拼了cube的名称。

请求方式:get

认证:Basic Auth - 输入用户密码

参数:无

Body:无

延申:

1.http://ip:port/api/v1/Cubes('cube1') ?$select=Name 

这个请求会返回什么?--会只返回cube【cube1】的Name属性

2.根据查看cube的属性,可以发现cube有如下附属属性

image.png

是否可以查该cube的维度、视图呢?

  • 查询某一个cube的所有维度

 

image.png

url:http://ip:port/api/v1/Cubes('cube1')/Dimensions

说明:在url中拼了cube的名称。

请求方式:get

认证:Basic Auth - 输入用户密码

参数:无

Body:无 

返回值:

 

{
    "@odata.context": "../$metadata#Dimensions",
    "value": [
        {
            "@odata.etag": "W/\"d6872f7cad4afb4bb50d6dcc43f72c1e69c0fd4c\"",
            "Name": "维度1",
            "UniqueName": "[维度1]",
            "AllLeavesHierarchyName": "",
            "Attributes": {
                "Caption": "维度1"
            }
        },
        {
            "@odata.etag": "W/\"0c86b02961f89f60f9b227f858f364ecabf42192\"",
            "Name": "维度2",
            "UniqueName": "[维度2]",
            "AllLeavesHierarchyName": "",
            "Attributes": {
                "Caption": "维度2"
            }
        },
        {
            "@odata.etag": "W/\"b78ad099475bd087893c3da0502dd451f88d4f07\"",
            "Name": "维度3",
            "UniqueName": "[维度3]",
            "AllLeavesHierarchyName": "",
            "Attributes": {
                "Caption": "维度3"
            }
        }
    ]
}

延申:

1. http://ip:port/api/v1/Cubes('cube1')/Dimensions?$select=Name

这个请求会返回什么?--会只返回cube【cube1】所有维度的Name属性

2. http://ip:port/api/v1/Cubes(' cube1')/Views

这个请求会返回什么?--会只返回cube【cube1】所有视图

3.如何只查询cube的指定视图?

  • 查询某一个cube的指定视图

Cube【cube1】有视图【视图1】:

image.png

查询该视图:

image.png

url:http://ip:port/api/v1/Cubes('cube1')/Views('视图1')/tm1.Execute?$expand=Cells

说明:

1.在url中拼了cube和视图的名称。

2.使用了tm1.Execute函数,函数说明如下:

image.png

3.expand表示展开,对视图展开,展开单元格

请求方式:post

认证:Basic Auth - 输入用户密码

参数:无

Body:无 

返回值:

 

{
    "@odata.context": "../../$metadata#Cellsets(Cells)/$entity",
    "ID": "42_2cDQBAIBbAwAg",
    "Cells": [
        {
            "Ordinal": 0,
            "Value": 7777,
            "FormattedValue": "7777"
        },
        {
            "Ordinal": 1,
            "Value": 100,
            "FormattedValue": "100"
        },{},{}...{}
    ]
}

延申:此返回结果只有数据,没有维度组合,看不出数据含义,无法使用。如何同时获取维度组合和数据?

  • 查询某一个cube的指定视图-同时返回维度组合和数据

image.png

url:http://ip:port/api/v1/Cubes('cube1')/Views('视图1')/tm1.Execute?$expand=Cells($select=Ordinal,FormattedValue),Cells($expand=Members($select=Name,UniqueName))

说明:

1.在url中拼了cube和视图的名称。

2.使用了tm1.Execute函数,函数说明略。

3.expand表示展开,对视图展开,展开Cells单元格

4.Cells里,select表示返回的结果只返回Ordinal,FormattedValue这两个字段,

5.Cells里,展开Members,对Members只返回Name,UniqueName这两个字段

请求方式:post

认证:Basic Auth - 输入用户密码

参数:无

Body:无

返回结果:

 

{
    "@odata.context": "../../$metadata#Cellsets(Cells(Ordinal,FormattedValue,Members+(Name,UniqueName)))/$entity",
    "ID": "42_2cDQBAIB8AwAg",
    "Cells": [
        {
            "Ordinal": 0,
            "FormattedValue": "值",
            "Members": [
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                }
            ]
        },
        {
            "Ordinal": 1,
            "FormattedValue": "100",
            "Members": [
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                }
            ]
        },{},{}...{}
    ]
}

说明:Ordinal是唯一标识,可忽略;FormattedValue是格式化的值;Members是维度元素:其中Name是维度元素名,UniqueName的结构是【维度.hierarchy.元素名

  • Mdx查询某一个cube的数据-同时返回维度组合和数据

image.png

url :

http://ip:port/api/v1/ExecuteMDX?$expand=Cells($select=Ordinal,FormattedValue),Cells($expand=Members($select=Name,UniqueName))

说明:

1.使用了ExecuteMDX函数,函数说明:

image.png

 

2.expand表示展开,对mdx结果进行展开,展开Cells单元格

3.Cells里,select表示返回的结果只返回Ordinal,FormattedValue这两个字段,

4.Cells里,展开Members,对Members只返回Name,UniqueName这两个字段

请求方式:post

认证:Basic Auth - 输入用户密码

参数:无

Body:

 

{"MDX":
 "SELECT {[维度1].[子集1]} ON COLUMNS,  {[维度2].[成员2]} ON ROWS  FROM [cube1]   
 WHERE ([维度3].[成员3]) and ([维度2].[成员2])"
}

说明:MDX语句是多维的标准语句,可网上自行查找。

此示例可以看出来查询的是cube【cube1】,维度【维度1】作为列,展现的是子集【子集1】;维度【维度2】作为行,展示的是子集【成员2】;查询条件是维度【维度3】选择成员【成员3】,【维度3】选择【成员3】.

返回结果:

 

{
    "@odata.context": "$metadata#Cellsets(Cells(Ordinal,FormattedValue,Members+(Name,UniqueName)))/$entity",
    "ID": "42_2cDQBAICGAwAg",
    "Cells": [
        {
            "Ordinal": 0,
            "FormattedValue": "1000.00",
            "Members": [
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                }
            ]
        },
        {
            "Ordinal": 1,
            "FormattedValue": "3333.00",
            "Members": [
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**1",
                    "UniqueName": "[**].[**].[**1]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                }
            ]
        },
         {
            "Ordinal": 1,
            "FormattedValue": "3333.00",
            "Members": [
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                },
                {
                    "Name": "**1",
                    "UniqueName": "[**].[**].[**1]"
                },
                {
                    "Name": "**",
                    "UniqueName": "[**].[**].[**]"
                }
            ]
        }
    ]
}

说明:

Ordinal是唯一标识,可忽略;

FormattedValue是格式化的值;

Members是维度元素:其中Name是维度元素名,UniqueName的结构是【维度.hierarchy.元素名】.

  • 更新cube数据

image.png

url :

http://ip:port/api/v1/Cubes('cube1')/tm1.Update

说明:

1. 使用了update方法,此方法见文档:

image.png

请求方式:post

认证:Basic Auth - 输入用户密码

参数:无

Body:

 

[{
        "Cells": [{
            "Tuple@odata.bind": [
                "Dimensions('维度1')/Hierarchies('维度1')/Elements('成员1')",
                "Dimensions('维度2')/Hierarchies('维度2')/Elements('成员2')",
                "Dimensions('维度3')/Hierarchies('维度3')/Elements('成员3')"
            ]
        }],
        "Value": "3333"
    },
    {
        "Cells": [{
            "Tuple@odata.bind": [
                "Dimensions('维度1')/Hierarchies('维度1')/Elements('成员11')",
                "Dimensions('维度2')/Hierarchies('维度2')/Elements('成员22')",
                "Dimensions('维度3')/Hierarchies('维度3')/Elements('成员33')"
            ]
        }],
        "Value": "4444"
    }
]

说明:此处更新了两个数.

更新维度【维度1.成员1】+【维度2.成员2】+【维度3.成员3】的值为3333;

更新维度【维度1.成员11】+【维度2.成员22】+【维度3.成员33】的值为4444;

  • 执行TI

image.png

image.png

url :

http://ip:port/api/v1/Processes('TI')/tm1.Execute

说明:

1. 使用了update方法,此方法见文档:

image.png

请求方式:post

认证:Basic Auth - 输入用户密码

参数:无

Body:

 

{"Parameters":[{"Name":"PJson","Value":"123"}]}

说明:

此处的参数Name:PJson中的PJson是TI的参数名,123是参数的值,如果有多个TI参数,就用传多个list:

{"Parameters":[{"Name":"PJson","Value":"123"},{"Name":"PJson2","Value":"1234"}]}