Пример: Хранимое производное поле
У вас может быть процесс Выбрать, сконфигурированный для выбора ID на основе ограничения производного поля, связанного с процессом Выбрать для вывода выбранных записей, содержащих производное поле. Если вы пометите производное поле как хранимое, вычисленное значение будет передано от процесса Выбрать в процесс Снимок.
Другое использование хранимых производных полей - это в сочетании с любым производным полем агрегированного типа (например, AVG или GROUPBY). Эти агрегированные поля вычисляются на основе нескольких строк данных в текущей ячейке, поэтому значение этих агрегированных полей изменяется при изменении содержимого ячейки. В случае хранимых производных полей вы можете указать, что следует сохранить исходное вычисленное значение и переносить его в другие процессы. Если вы вместо этого укажете, что нужно производить перерасчет производного поля, вы получите вычисленное значение на основе оставшихся записей в текущей ячейке.
Если процесс принимает несколько входных данных, например, процесс Снимок, работающий с входными данными от двух процессов Выбрать, все хранимые производные поля будут доступны последующему процессу.
Если хранимое производное поле не является доступным для всех входных процессов Выбрать и включается в выходные данные процесса Снимок, то в процессе Снимок появится значение NULL для этого хранимого производного поля во всех выходных строках процессов Выбрать, у которых нет этого хранимого производного поля.
Если хранимое производное поле не является доступным для всех входных процессов Выбрать, а вы его используете, чтобы задать процесс Сегмент, то в процессе Сегмент будут пустые сегменты для процессов Выбрать, у которых нет этого хранимого производного поля.
Процесс Сегмент останется деконфигурированным, если вы попытаетесь задать сегмент, используя выражение более чем с одним хранимым производным полем, которого нет во всех процессах Выбрать.
К хранимым производным полям (Persistent Derived Field, PDF) применимы следующие рекомендации:
*
*
*
*
*
*
Однако, если вы используете производное поле на основе поля таблицы, выходные данные будут содержать непосредственно поле таблицы. Таким образом, будет запись для каждого экземпляра значения ID. (Другими словами, если значение ID встречается в данных семь раз, в выходных данных будет семь записей.)
В постоянных производных полях хранится только одно значение для каждого ID аудитории, которое случайным образом выбирается из доступных значений. Это означает, что при работе с ненормализованными данными нужно использовать макрофункцию GROUPBY для получения нужного поведения.
Допустим, что вы хотите найти в таблице транзакций закупок самую большую сумму в долларах в одной транзакции, совершенной покупателем, и хотите сохранить это значение как хранимое производное поле для последующей обработки. Вы можете создать производное поле (а затем сохранить его как хранимое производное поле) следующим образом:
Highest_purchase_amount = groupby(CID, maxof, Purch_Amt)
В случае ненормализованных данных о транзакциях закупок (показанных ниже), будут вычислены следующие значения:
При сохранении производного поля выбирается (случайным образом) любое значение (в данном случае, все значения равны $300) и сохраняется для покупателя A.
Вторым, менее очевидным примером, может быть выбор оценки прогностической модели из таблицы оценок для конкретной модели X. В этом случае производное поле может принять следующий вид:
ModelX_score = groupby(CID, maxof, if(Model = 'X', 1, 0), Score)
А данные могут иметь следующий вид:
При сохранении производного поля, ModelX_Score, будет получен нужный результат со значением оценки, равным 80. Нельзя создавать производное поле вида:
Bad_ModelX_score = if(Model = 'X', Score, NULL)
При этом можно получить следующие результаты:
Тогда при сохранении производного поля Bad_ModelX_score сохраненным значением может быть NULL или 80. Если вы работаете с ненормализованными данными, и не все значения производных полей являются одинаковыми, при сохранении такого производного поля можно получить любое из возвращенных значений. Например, если задать поле Derived_field_Score = SCORE и сохранить его, можно получить значение 57, 72 или 80 для покупателя A. Чтобы обеспечить ожидаемое поведение, нужно использовать макрос GROUPBY для ID покупателя, что гарантирует, что значение производного поля будет одним и тем же для всех данных для этого покупателя.