Перейти к основному содержимому Перейти к дополнительному содержимому

Производные поля

Если у вас есть группа связанных друг с другом полей, или если поля несут информацию, которую можно разбить на составляющие части, относящиеся друг к другу при создании измерений или мер, вы можете создать определения поля, которые можно использовать для создания производных полей. Одним из примеров является поле данных, из которого можно извлечь несколько атрибутов, например год, месяц, номер недели или название дня. Все эти атрибуты можно вычислить в выражении измерения с помощью функций даты Qlik Sense, но альтернативным способом является создание определения календаря, что удобно для всех полей типов данных. Определения полей хранятся в скрипте загрузки данных.

Примечание к информацииОпределения полей календаря по умолчанию для Qlik Sense включены в autoCalendar для полей данных, загруженных с помощью инструмента Диспетчер данных.Для получения дополнительной информации см. разделы Автоматическое создание производных полей даты с использованием автокалендаря и Добавление данных в приложение из подключений и новых файлов.

Объявление определения полей календаря

Для создания определения производных полей используйте оператор Declare. Здесь определяются различные атрибуты поля, в данном случае, атрибуты, относящиеся к дате. Каждое поле описано следующим образом: <expression> As field_name tagged tag. Можно настроить один или несколько тегов. Это не обязательно, но может повлиять на порядок сортировки производного поля. Используйте $1 для ссылки на поле данных, из которого должны быть созданы производные поля.

Примечание к предупреждению Если вы не создаете собственный автокалендарь или работаете с автоматически настроенным [autoCalendar], созданным в Диспетчер данных, не используйте autoCalendar в качестве имени для определений полей календаря. Это имя зарезервировано для автоматически созданных шаблонов календаря. См. раздел Автоматическое создание производных полей даты с использованием автокалендаря.
Calendar: DECLARE FIELD DEFINITION TAGGED '$date' Parameters first_month_of_year = 1 Fields Year($1) As Year Tagged ('$numeric'), Month($1) as Month Tagged ('$numeric'), Date($1) as Date Tagged ('$date'), Week($1) as Week Tagged ('$numeric'), Weekday($1) as Weekday Tagged ('$numeric'), DayNumberOfYear($1, first_month_of_year) as DayNumberOfYear Tagged ('$numeric');
 

Для получения дополнительной информации см. раздел Declare.

Сопоставление полей данных с календарем с помощью Derive

Следующим шагом будет использование оператора Derive, чтобы отметить существующие поля данных на календаре. Так будут созданы производные поля. Это можно сделать в скрипте загрузки данных тремя способами.

  • Отметить определенные поля согласно имени поля.

    DERIVE FIELDS FROM FIELDS OrderDate,ShippingDate USING Calendar;
  • Отметить все поля с одним или несколькими определенными тегами поля.

    DERIVE FIELDS FROM EXPLICIT TAGS ('$date') USING Calendar;
  • Отметить все поля, которые имеют один из тегов определения поля ($date в примере выше).

    DERIVE FIELDS FROM IMPLICIT TAG USING Calendar;

В данном случае можно использовать любой из трех приведенных примеров.

Для получения дополнительной информации см. раздел Derive.

Автоматическое создание производных полей даты с использованием автокалендаря

Если используется Диспетчер данных для создания приложения и загрузки данных, календарь с именем [autoCalendar] автоматически вставляется в сценарий загрузки с целью предоставления определений календаря по умолчанию. Они отражаются в бизнес-логике приложения.

Для приложений, созданных с использованием скриптов, которые содержат поля данных, можно вставить этот код [autoCalendar], приведенный ниже, в скрипт в разделе после загрузки всех применимых полей данных. Это дает возможность использовать все доступные типы анализа на основе периодов, в том числе пригодные для построения «умных» листов. Обратите внимание, что календарь должен называться [autocalendar], чтобы календарные периоды корректно добавлялись в бизнес-логику.

Измените имена полей [My_Date_Field1] и [My_Date_Field2] в строке DERIVE FIELDS FROM FIELDS [My_Date_Field1], [My_Date_Field2] USING [autoCalendar] ;, чтобы связать поле даты с расчетами автокалендаря, которые создают новые производные поля даты. Если имеется только одно поле даты для связи с автокалендарем, удалите [My_Date_Field2]. Подобным образом, добавьте дополнительные поля даты, если имеется больше двух полей даты, для которых требуется активировать автокалендарь.

[autoCalendar]:
  DECLARE FIELD DEFINITION Tagged ('$date')
FIELDS		
  Dual(Year($1), YearStart($1)) AS [Year] Tagged ('$axis', '$year'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),Num(Ceil(NUM(Month($1))/3),00)) AS [Quarter] Tagged ('$quarter', '$cyclic'),
  Dual(Year($1)&'-Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [YearQuarter] Tagged ('$yearquarter', '$qualified'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [_YearQuarter] Tagged ('$yearquarter', '$hidden', '$simplified'),
  Month($1) AS [Month] Tagged ('$month', '$cyclic'),
  Dual(Year($1)&'-'&Month($1), monthstart($1)) AS [YearMonth] Tagged ('$axis', '$yearmonth', '$qualified'),
  Dual(Month($1), monthstart($1)) AS [_YearMonth] Tagged ('$axis', '$yearmonth', '$simplified', '$hidden'),
  Dual('W'&Num(Week($1),00), Num(Week($1),00)) AS [Week] Tagged ('$weeknumber', '$cyclic'),
  Date(Floor($1)) AS [Date] Tagged ('$axis', '$date', '$qualified'),
  Date(Floor($1), 'D') AS [_Date] Tagged ('$axis', '$date', '$hidden', '$simplified'),
  If (DayNumberOfYear($1) <= DayNumberOfYear(Today()), 1, 0) AS [InYTD] ,
  Year(Today())-Year($1) AS [YearsAgo] ,
  If (DayNumberOfQuarter($1) <= DayNumberOfQuarter(Today()),1,0) AS [InQTD] ,
  4*Year(Today())+Ceil(Month(Today())/3)-4*Year($1)-Ceil(Month($1)/3) AS [QuartersAgo] ,
  Ceil(Month(Today())/3)-Ceil(Month($1)/3) AS [QuarterRelNo] ,
  If(Day($1)<=Day(Today()),1,0) AS [InMTD] ,
  12*Year(Today())+Month(Today())-12*Year($1)-Month($1) AS [MonthsAgo] ,
  Month(Today())-Month($1) AS [MonthRelNo] ,
  If(WeekDay($1)<=WeekDay(Today()),1,0) AS [InWTD] ,
  (WeekStart(Today())-WeekStart($1))/7 AS [WeeksAgo] ,	
  Week(Today())-Week($1) AS [WeekRelNo] ;

DERIVE FIELDS FROM FIELDS [My_Date_Field1], [My_Date_Field2] USING [autoCalendar] ;

При правильной настройке в бизнес-логике приложения будет автоматически создано несколько календарных периодов, и в Инструмент «Наблюдения» можно будет использовать типы анализа на основе периодов.

Для получения дополнительной информации см. раздел Использование «умных» листов в Инструмент «Наблюдения» для анализов на основе периодов.

Использование производных полей даты в визуализации

Qlik Sense позволяет распознавать производные поля даты, если вы создали определение календаря и отметили поля, как показано в примере выше. Они доступны в разделе Поля даты и времени на панели ресурсов Поля. Все производные поля также можно найти в редакторе выражений и при создании или изменении измерений.

Для получения дополнительной информации см. раздел Поля даты и времени.

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!