2015-11-06 5 views
0

У меня есть вычисляемое поле, называемое Booking_Size с формулой:Как мы делаем фильтр (от вычисляемого поля) контекстный фильтр в Tableau

IF RANK_PERCENTILE (SUM (BK_Total))> = 0 и RANK_PERCENTILE (SUM (BK_Total)) < 0,5 THEN 'Small'

ELSEIF RANK_PERCENTILE (SUM ([BK_Total]))> = 0,5 и RANK_PERCENTILE (SUM ([BK_Total)) < .7 Then 'Medium Small'

ELSEIF RANK_PERCENTILE (SUM ([BK_Total]))> = .7 И RANK_PERCENTILE (SUM ([BK_Total])) < .9 THEN 'Medium'

ELSEIF RANK_PERCENTILE (SUM ([BK_Total]))> = 0,9 и RANK_PERCENTILE (SUM ([BK_Total)) < +0,95 THEN 'Medium Large'

ELSE 'Large' END

Я хочу чтобы сделать это фильтром контекста, потому что, если я использую какой-либо другой фильтр поверх указанного выше фильтра, функция RANK PERCENTILE в указанном выше фильтре (фильтр Booking_Size) пересчитывает уже отфильтрованную таблицу.

ответ

0

Вы не можете сделать фильтры расчета таблицы в фильтрах контекста.

Фильтры контекста оцениваются очень рано в конвейере операций на источнике данных (aka сервер базы данных). Табличные вычисления вычисляются очень поздно в рабочем конвейере Tableau (aka client).

Итак, вы спрашиваете, почему что-то, что происходит на одном компьютере по определению, невозможно установить раньше на другом компьютере. Причина в том, что функции вычисления таблицы, такие как rank_percentile, реализуются самим Tableau, действуя на совокупные результаты запроса, возвращаемые базой данных или источником данных.

Если вы хотите протолкнуть эту функцию в начале конвейера, ей необходимо использовать функции, предоставляемые исходным источником данных. Поэтому, если ваша база данных поддерживает такие функции, как rank_percentile, вы можете поместить их в базовый запрос, скажем, с помощью пользовательского sql или пройти через вызовы SQL или определить представление в базе данных.

BTV, Ваш вычисляемое поле без необходимости повторяет сравнительные тесты

если определить расчетное поле, называемое гк в RANK_PERCENTILE(SUM(BK_Total))

Тогда ваше поле может быть определено более эффективно, как показано ниже, так как каждый тест можно предположить, предшествующее тесты не удались.

if rk < .5 then 
    'Small' 
elseif rk < .7 then 
    'Medium Small' 
elseif rk < .9 then 
    'Medium' 
elseif rk < .95 then 
    'Medium Large' 
else 
    'Large' 
end