Создание обязательных пользовательских фильтров с несколькими идентификаторами элементов

Обязательные пользовательские фильтры

Я работаю над инструментом, позволяющим клиентам применять обязательные пользовательские фильтры. Когда загружаются такие атрибуты, как «Год» или «Возраст», каждый из них может иметь сотни элементов с последующими идентификаторами. В запросе 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"
        }
    }
}

В свойстве «выражение» указано, как можно установить один идентификатор. Я хочу иметь несколько идентификаторов, связанных с идентификатором объекта, установленным в сообщении. Например, если я хочу добавить фильтр ко всем элементам в «Год» (их 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"]
      }
    ]
  }
} 

Это получает BAD REQUEST.


person thnkr    schedule 19.03.2014    source источник
comment
Обратите внимание, что обязательные пользовательские фильтры были переименованы в разрешения данных (help.gooddata.com/doc/en/project-and-user-administration/).   -  person Bugs Bunny    schedule 16.09.2020


Ответы (1)


Я не уверен, что именно вы подразумеваете под «иметь несколько идентификаторов, связанных с идентификатором объекта», но я попытаюсь рассказать вам все, что я знаю об этом. :-)

Если вы действительно сделали несколько запросов POST, создали несколько пользовательских фильтров и установили их все для одного пользователя, пользователь вообще ничего не увидит. Это связано с тем, что система объединяет отдельные пользовательские фильтры с помощью логического И, а год не может быть 2013 и 2014 одновременно. Итак, для остальной части моего ответа я предполагаю, что вместо этого вы хотите ИЛИ.

Есть несколько способов сделать это. Как вы, возможно, уже догадались, вы можете явно использовать 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 и не допускается при реализации пользовательских фильтров. Понятия не имею почему.

Кроме того, для вашего собственного атрибута, такого как Возраст, вы не можете этого сделать, поскольку пользовательские числовые атрибуты не поддерживаются. Теоретически вы можете добавить факт, содержащий числовое значение, и построить фильтр МЕЖДУ на основе этого факта. Похоже, это не допускается и в реализации пользовательских фильтров. :-(

Надеюсь это поможет.

person Tomáš Janoušek    schedule 19.03.2014
comment
Это потрясающе. Спасибо! - person thnkr; 20.03.2014
comment
Первое решение сработало отлично, можете проверить обновление? Спасибо. - person thnkr; 21.03.2014
comment
Вы уверены, что отправляете данные POST, которые, как вы говорите, отправляете? Я вижу это в журналах: JSON Parser вернул ошибку: искаженная строка JSON, ни массив, ни объект, ни число, ни строка, ни атом, со смещением 112 символов (до ([/gdc/md/a1nc4jfa1...) - person Tomáš Janoušek; 22.03.2014