Ссылки на явное поле
Поле считается явным, когда оно не включено в функцию агрегирования.
Ссылка на явное поле — это массив, содержащий, возможно, несколько значений. Программе Qlik Sense неизвестно, которое из этих значений требуется, поэтому она вычислит его как NULL.
Всегда используйте функцию агрегирования в выражении
Если выражение делает вычисление неправильно, высока вероятность того, что у него нет функции агрегирования.
Ссылка на поле в выражении — это массив значений. Пример.
Необходимо включить поле Invoice Date в функцию агрегирования, чтобы свернуть его в одно значение.
Если не использовать функцию агрегирования в выражении, Qlik Sense будет использовать функцию Only() по умолчанию. Если ссылка на поле возвращает несколько значений, Qlik Sense интерпретирует его как NULL.
Разделение дат счета с помощью функции If()
Функция If() часто используется в условных агрегированиях. Она возвращает значение в зависимости от условия функции: True или False.
В приложении на листе Naked field references находится таблица с названием Using If() on Invoice dates.
Выполните следующие действия.
- Выберите доступную таблицу Using If() on Invoice dates.
Откроется панель свойств. - Щелкните команду Добавить столбец и выберите параметр Мера.
- Щелкните символ .
Откроется редактор выражения. - Введите следующее: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Щелкните Применить.
Это выражение проверяет, наступает ли 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).
Выполните следующие действия.
- Выберите доступную таблицу Sum(Amount).
Откроется панель свойств. - Щелкните команду Добавить столбец и выберите параметр Мера.
- Щелкните символ .
Откроется редактор выражения. - Введите следующее: If( [Invoice Date]>= 41323, Sum(Sales) )
- Щелкните Применить.
Для каждого года существует массив с датами счетов, которые наступают после ссылочной даты. Так как в нашем выражении нет функции агрегирования, оно будет вычислено как NULL. В правильном выражении нужно использовать функцию агрегирования, такую как Min() или Max(), в первом параметре функции If():
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
Выполните следующие действия.
- Щелкните команду Добавить столбец и выберите параметр Мера.
- Щелкните символ .
Откроется редактор выражения. - Введите следующее: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Щелкните Применить.
В качестве альтернативы функцию If() можно поместить внутрь функции Sum():
Sum(If([Invoice Date]>= Date(41323), Sales) )
Выполните следующие действия.
- Щелкните команду Добавить столбец и выберите параметр Мера.
- Щелкните символ .
Откроется редактор выражения. - Введите следующее: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Щелкните Применить.
В предпоследнем выражении функция If() была вычислена один раз для каждого значения измерения. В последнем выражении она вычислена один раз на строку в необработанных данных. Различия в вычислении функции приводят к различным результатам, но оба возвращают ответ. Первое выражение вычисляется просто как NULL. На изображении выше показана разница между выражениями при использовании 18.02.2013 в качестве ссылочной даты.