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

Ссылки на явное поле

Поле считается явным, когда оно не включено в функцию агрегирования.

Ссылка на явное поле — это массив, содержащий, возможно, несколько значений. Программе Qlik Sense неизвестно, которое из этих значений требуется, поэтому она вычислит его как NULL.

Всегда используйте функцию агрегирования в выражении

Если выражение делает вычисление неправильно, высока вероятность того, что у него нет функции агрегирования.

Ссылка на поле в выражении — это массив значений. Пример.

Две таблицы: одна показывает, что Max(Invoice Date) — это одно значение, а другая показывает, что Invoice Date — это массив значений.

 Two tables, one showing that Max(Invoice Date) is a single value, and one showing that Invoice Date is an array of values.

Необходимо включить поле Invoice Date в функцию агрегирования, чтобы свернуть его в одно значение.

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

Разделение дат счета с помощью функции If()

Функция If() часто используется в условных агрегированиях. Она возвращает значение в зависимости от условия функции: True или False.

В приложении на листе Naked field references находится таблица с названием Using If() on Invoice dates.

  1. Выберите доступную таблицу Using If() on Invoice dates.
    Откроется панель свойств.
  2. Щелкните команду Добавить столбец и выберите параметр Мера.
  3. Щелкните символ Expression.
    Откроется редактор выражения.
  4. Введите следующее: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. Щелкните Применить.

Таблица показывает даты счета, разделяемые по ссылочной дате.

 Table showing invoice dates being split by a reference date.

Это выражение проверяет, наступает ли Invoice Date раньше ссылочной даты 18.02.2013, и возвращает 'Before', если дата наступает раньше. Если дата наступает позже ссылочной даты 18.02.2013 или равна ей, выражение возвращает 'After'. Ссылочная дата выражается как целое число 41323.

Для получения дополнительной информации см. if — функция скрипта и диаграммы

Недопущение ссылок на явное поле

На первый взгляд это выражение выглядит правильно:

If([Invoice Date]>= Date(41323) 'After', 'Before')

Оно должно вычислить даты счета после ссылочной даты, вернуть 'After' или в противном случае вернуть 'Before'. Хотя Invoice Date — это ссылка на явное поле, у нее нет функции агрегирования, и поэтому она является массивом с несколькими значениями и будет вычислена как NULL. В предыдущем примере в таблице была только одна Invoice Date для значения Date и, таким образом, выражение было вычислено правильно.

Давайте посмотрим, как подобное выражение будет работать при другом значении измерения и как решить проблему со ссылкой на явное поле:

Недопущение ссылок на явное поле в функции If()

Как и раньше будет использоваться подобное выражение:

If([Invoice Date]>= Date(41323), Sum(Sales))

На этот раз функция суммирует объем продаж после ссылочной даты.

В приложении на листе Naked field references находится таблица с названием Sum(Amount).

  1. Выберите доступную таблицу Sum(Amount).
    Откроется панель свойств.
  2. Щелкните команду Добавить столбец и выберите параметр Мера.
  3. Щелкните символ Expression.
    Откроется редактор выражения.
  4. Введите следующее: If( [Invoice Date]>= 41323, Sum(Sales) )
  5. Щелкните Применить.

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

 Table showing year, sum of sales for each year, and the results of the expression

Примечание о подсказкеМетка на мерах будет сохранена, чтобы показать разницу между выражениями. В столбцах с денежными значениями изменим Формат чисел на Денежный, а Образец формата — на $ #,##0;-$ #,##0.

Для каждого года существует массив с датами счетов, которые наступают после ссылочной даты. Так как в нашем выражении нет функции агрегирования, оно будет вычислено как NULL. В правильном выражении нужно использовать функцию агрегирования, такую как Min() или Max(), в первом параметре функции If():

If(Max([Invoice Date])>= Date(41323), Sum(Sales))

  1. Щелкните команду Добавить столбец и выберите параметр Мера.
  2. Щелкните символ Expression.
    Откроется редактор выражения.
  3. Введите следующее: If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. Щелкните Применить.

Таблица показывает год, сумму продаж за каждый год и результаты различных выражений с помощью функции If().

Table showing year, sum of sales for each year, and the results of the different expressions

В качестве альтернативы функцию If() можно поместить внутрь функции Sum():

Sum(If([Invoice Date]>= Date(41323), Sales) )

  1. Щелкните команду Добавить столбец и выберите параметр Мера.
  2. Щелкните символ Expression.
    Откроется редактор выражения.
  3. Введите следующее: Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. Щелкните Применить.

Таблица показывает год, сумму продаж за каждый год и результаты различных выражений с помощью функции If().

Table showing year, sum of sales for each year, and the results of the different expressions

В предпоследнем выражении функция If() была вычислена один раз для каждого значения измерения. В последнем выражении она вычислена один раз на строку в необработанных данных. Различия в вычислении функции приводят к различным результатам, но оба возвращают ответ. Первое выражение вычисляется просто как NULL. На изображении выше показана разница между выражениями при использовании 18.02.2013 в качестве ссылочной даты.

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

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