概述
-
tm1 rest api 使用的是OData Version 4 标准:
http://www.odata.org/documentation/
-
tm1 rest api 文档地址:
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对象:
对象说明
参考TM1官方文档 TM1 REST API--> Metadata-->Entity types
Entity types下的所有对象包括cube、视图、维度、子集、元素等,都可以用来查看、操作。具体查看方式可以参考OData4的文档。
方法说明
参考TM1官方文档 TM1 REST API--> Metadata-->Actions
Actions可以对Entity进行操作。具体方式可以参考OData4的文档。
以下示例通过postman来调用restapi接口。
示例
-
查询cubes
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属性
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】
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有如下附属属性
是否可以查该cube的维度、视图呢?
-
查询某一个cube的所有维度
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】:
查询该视图:
url:http://ip:port/api/v1/Cubes('cube1')/Views('视图1')/tm1.Execute?$expand=Cells
说明:
1.在url中拼了cube和视图的名称。
2.使用了tm1.Execute函数,函数说明如下:
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的指定视图-同时返回维度组合和数据
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的数据-同时返回维度组合和数据
url :
http://ip:port/api/v1/ExecuteMDX?$expand=Cells($select=Ordinal,FormattedValue),Cells($expand=Members($select=Name,UniqueName))
说明:
1.使用了ExecuteMDX函数,函数说明:
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数据
url :
http://ip:port/api/v1/Cubes('cube1')/tm1.Update
说明:
1. 使用了update方法,此方法见文档:
请求方式: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
url :
http://ip:port/api/v1/Processes('TI名')/tm1.Execute
说明:
1. 使用了update方法,此方法见文档:
请求方式: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"}]}