我正在开发一种工具,允许客户应用强制用户过滤器。当像“Year”或“Age”这样加载属性时,每个属性都可以包含数百个带有后续ID的元素。在POST请求中创建过滤器(在此处记录:https://developer.gooddata.com/article/lets-get-started-with-mandatory-user-filters),如下所示:
{
"userFilter": {
"content": {
"expression": "[/gdc/md/{project-id}/obj/{object-id}]=[/gdc/md/{project-id}/obj/{object-id}/elements?id={element-id}]"
},
"meta": {
"category": "userFilter",
"title": "My User Filter Name"
}
}
}
在“表达式”属性中,它指出了如何设置一个ID。我想要的是将多个id与使用post设置的object-id相关联。例如,如果我想在演示项目中向“Year”(有150个)中的所有元素添加过滤器,那么发出150个帖子请求似乎很奇怪。
有更好的方法吗?
更新
托马斯感谢你的帮助。我没有遇到为用户分配多个用户过滤器的问题。我可以使用文档中概述的方法轻松地将单个过滤器应用于用户。但是,这会覆盖userfilter字段。这是什么语法?
这是我的演示POST数据:
{ "userFilters":
{ "items": [
{ "user": "/gdc/account/profile/decd0b2e3077cf9c47f8cfbc32f6460e",
"userFilters":["/gdc/md/a1nc4jfa14wey1bnfs1vh9dljaf8ejuq/obj/808728","/gdc/md/a1nc4jfa14wey1bnfs1vh9dljaf8ejuq/obj/808729","/gdc/md/a1nc4jfa14wey1bnfs1vh9dljaf8ejuq/obj/808728"]
}
]
}
}
这会收到一个不良请求。
答案 0 :(得分:3)
我不确定你的意思是“有多个id与object-id相关联”,但我会尽力告诉你我所知道的一切。 : - )
如果您确实发出了多个POST请求,创建了多个userFilter并为一个用户设置了所有这些请求,则用户根本不会看到任何内容。这是因为系统使用逻辑AND组合了单独的userFilters,而且Year不能同时是2013和2014。所以对于我的其余部分,我会假设你想要OR而不是。
有几种方法可以做到这一点。正如您现在可能已经猜到的那样,您可以使用如下表达式明确地使用AND / OR:
[/…/obj/{object-id}]=[/…/obj/{object-id}/elements?id={element-id}] OR [/…/obj/{object-id}]=[/…/obj/{object-id}/elements?id={element-id}]
这通常可以进一步简化为:
[/…/obj/{object-id}] IN ( [/…/obj/{object-id}/elements?id={element-id}], [/…/obj/{object-id}/elements?id={element-id}], … )
如果属性是日期(年,月,...)属性,理论上您还可以使用BETWEEN指定范围,而不是列出所有元素:
[/…/obj/{object-id}] BETWEEN [/…/obj/{object-id}/elements?id={element-id}] AND [/…/obj/{object-id}/elements?id={element-id}]
但是,似乎这仅适用于度量标准MAQL,并且不允许在用户过滤器的实现中使用。我不明白为什么。
此外,对于像Age这样的属性,您不能这样做,因为不支持用户定义的数字属性。理论上,您可以添加一个包含数值的事实,并根据该事实构建BETWEEN过滤器。似乎在用户过滤器的实现中也不允许这样做。 : - (
希望这有帮助。