15 октября 2009 г.

Наборы данных. Исключаемые значения

Коллеги, всем привет.
Давненько я не писал чего-то интересного и познавательного. Собственно, исправляюсь… Сегодня снова поговорим о Set Analysis’е, а именно, о нюансах исключения некоторых значений поля из всего набора данных.

Думаю, проще всего сразу показать эти нюансы на примере, поэтому предлагаю создать новый документ QlikView, и загрузить в него следующую информацию:
Sales:
LOAD * INLINE[
User, Amount
Петр, 11235
Алексей, 11999
Жанна, 37000
Николай, 53000
Григорий, 10000
];

Теперь представим ситуацию, что нам неинтересна информация о том, на какую сумму Петр продал товара, т.е. нам необходимо исключить значение “Петр”. Как, собственно, мы можем этого добиться? Если не использовать Set Analysis, то мы должны выбрать все значения поля “User”, кроме значения “Петр”. Согласитесь, это не очень удобно, как минимум, потому что нам всегда нужно будет производить подобную манипуляцию и не забывать об этом. Поэтому логичней здесь воспользоваться Set Analysis’ом и произвести подобное исключение внутри наших выражений. Создадим диаграмму типа Прямая таблица, в качестве измерения выбираем поле User и определим 2 выражения:
Sum( {< User -= {"Петр"} >} Amount)
Sum( {< User =- {"Петр"} >} Amount)
На первый взгляд, эти выражения выполняют одно и тоже – исключают значение “Петр” из нашей диаграммы и только лишь. Однако, это не совсем так. Оба эти выражения действительно исключают значение “Петр”, однако если мы сделаем выборку в поле User, то увидим что именно отличает друг от друга эти 2 реализации одной и той же задачи.
Первое выражение, как собственно и описано в официальной документации QlikView, является сокращенной формой выражения вида:  Sum( {< User = User - {"Петр"} >} Amount), т.е. этим выражением мы говорим, что хотим рассчитать сумму продаж на основании текущей выборки по полю “User”, за исключением значения “Петр”. Соответственно, когда у нас не выбрано ни одно значение поля “User”, мы получаем список из всех пользователей за исключением Петра. Как только мы производим выборку, наш список пользователей сокращается до этой выборки. Собственно стандартное поведение системы.
Второе же выражение является краткой формой следующего: Sum( {< User = {*} - {"Петр"} >} Amount). Здесь мы говорим системе, что хотим получить все значения поля “User” вне зависимости от текущей выборки по полю “User”. В итоге мы получаем статический набор из всех пользователей за исключением одного Петра.
На этом разрешите откланяться :).

2 комментария:

  1. что-то в QV11 у меня эти примеры не заработали.
    Для того, что бы исключить Петра пришлось написать Sum ({1 - } AMOUNT) тогда действительно остались все кроме Петра.
    Это синтакис изменился или недокументированные возможности...

    ОтветитьУдалить
  2. приветствую. Только что проверил - все ок. Поведение точно такое же.
    QlikView build 11.0.11149.0

    ОтветитьУдалить