1

强制用户过滤器

我正在开发一种允许客户应用强制用户过滤器的工具。当像“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 相关联。例如,如果我的用户想为演示项目中“年份”中的所有元素(有 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"]
      }
    ]
  }
} 

这会收到一个错误的请求。

4

1 回答 1

3

我不确定您所说的“具有与对象 ID 关联的多个 ID”究竟是什么意思,但我会尽力告诉您我所知道的一切。:-)

如果您确实发出了多个 POST 请求,创建了多个 userFilters 并将它们全部设置为一个用户,那么用户根本看不到任何东西。这是因为系统使用逻辑 AND 组合了单独的 userFilters,并且年份不能同时是 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 过滤器。似乎这在用户过滤器的实现中也是不允许的。:-(

希望这可以帮助。

于 2014-03-19T22:32:44.573 回答