Как составить список записей с фильтром "NOT IN" на основе двух атрибутов в GoodData
Например, у меня есть эти таблицы:
__vendors___ _______sales_______
|V_Cod|Name | |S_Cod |Item |Price|
|1 |Alan | |2 |apple |10 |
|2 |Fred | |2 |sugar |5 |
|3 |Alex | |3 |rice |9 |
|4 |David | |3 |meat |20 |
Я хочу перечислить всех продавцов, у которых нет записей в таблице продаж, но в редакторе MAQL следующая метрика не работает:
select count(V_Cod) where V_Cod not in (S_Cod)
Я также попытался подсчитать каждый код отдельно и затем вычесть один из них другим, но это не сработало (этот показатель действителен, но мне нужно увидеть имя поставщика в отчете, а GoodData - нет). позвольте мне выбрать vendor_name на вкладке HOW с этим показателем):
select (select count(V_Cod)) - (select count(S_Cod))
Есть еще один способ заставить этот счет работать?
1 ответ
Это рабочий подход. Вы можете использовать внутреннюю метрику для подсчета продаж по поставщикам и использовать ее вместе с функцией IFNULL. Затем вы можете использовать такую метрику для фильтрации внешней метрики, которая является простым подсчетом поставщиков.
SELECT COUNT(V_Cod) WHERE (SELECT IFNULL(COUNT(S_Cod), 0) BY V_Cod)=0
В настоящее время необходимо использовать IFNULL, потому что поставщики, у которых нет продаж, иначе не будут возвращены внутренней метрикой, и, следовательно, условие не будет выполнено.
Эта метрика имеет размерность поставщика, так что вы сможете использовать V_Cod и Name в HOW.
Примечание: из примера не похоже, что S_Cod является точкой подключения в Sales (скорее всего, это похоже на ссылку на V_Cod). С точки зрения производительности, чтобы рассчитать количество продаж на одного поставщика, может быть лучше использовать COUNT(записи продаж) или COUNT(независимо от точки подключения продаж), а не COUNT(S_Cod), потому что механизм может выполнять простой подсчет без четкого,
SELECT COUNT(V_Cod) WHERE (SELECT IFNULL(COUNT(Records of sales), 0) BY V_Cod)=0