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

Очистка данных

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

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

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

Таблицы сопоставления

Таблицы, загружаемые с помощью оператора Mapping load или Mapping select, обрабатываются отлично от других таблиц. Они сортируются в отдельной области памяти и используются только в качестве таблиц сопоставления в ходе выполнения скрипта. После выполнения скрипта эти таблицы автоматически исключаются.

Правила:

  • Таблица сопоставления должна состоять из двух столбцов, первый из которых содержит значения, используемые для сравнения, а второй — желаемые значения для сопоставления.
  • Двум столбцам следует присвоить имена, но имена сами по себе не важны. Имена столбцов не связаны с именами полей в обычных внутренних таблицах.

Функции и операторы Mapping

В данном учебном пособии описаны следующие операторы/функции сопоставления.

• Префикс Mapping

ApplyMap()

MapSubstring()

• Оператор Map … Using

• Оператор Unmap

Префикс Mapping

Префикс Mapping используется в скрипте для создания таблицы сопоставления. Затем таблицу сопоставления можно использовать с функцией ApplyMap(), MapSubstring() или оператором Map … Using.

Выполните следующие действия.

  1. Создайте новое приложение и дайте ему имя.
  2. Добавьте новый раздел скрипта в Редакторе загрузки данных.
  3. Вызовите раздел Countries.
  4. Введите следующий скрипт:
  5. CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ];

    Таблица CountryMap содержит два столбца: Country и NewCountry. Столбец Country содержит различные способы введения стран в поле Country. Столбец NewCountry хранит способ сопоставления этих значений. Эта таблица сопоставления будет использоваться для хранения согласованных значений страны US в поле Country. Например, если значение U.S.A. хранится в поле Country, сопоставьте его со значением US.

ApplyMap() функция

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

Таблица данных
ID Имя Страна Код
1 John Black U.S.A. SDFGBS1DI
2 Steve Johnson U.S. 2ABC
3 Mary White United States DJY3DFE34
4 Susan McDaniels u DEF5556
5 Dean Smith US KSD111DKFJ1

Обратите внимание, что название страны вводилось различными способами. Чтобы согласовать поля «country», загружается таблица сопоставления и используется функция ApplyMap().

Выполните следующие действия.

  1. Ниже введенного выше скрипта выберите и загрузите Data.xlsx, а затем вставьте данный скрипт.
  2. Введите следующее над вновь созданным оператором LOAD:
  3. Data:

    Скрипт должен выглядеть следующим образом:

    CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ]; Data: LOAD ID, Name, Country, Code FROM [lib://DataFiles/Data.xlsx] (ooxml, embedded labels, table is Sheet1);

  4. Измените строку, содержащую Country,, следующим образом:
  5. ApplyMap('CountryMap', Country) as Country,

    Первый параметр функции ApplyMap() — это имя сопоставления, заключенное в одинарные кавычки. Второй параметр — это поле с данными, которые необходимо заменить.

  6. Щелкните команду Загрузить данные.
  7. Полученная таблица выглядит следующим образом:

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

    Все различные варианты написания United States были заменены на US. Есть одна запись, которая была написана неправильно, поэтому функция ApplyMap() не изменила значение этого поля. В функции ApplyMap() можно использовать третий параметр для добавления выражения по умолчанию, если в таблице сопоставления нет соответствующего значения.

  8. Добавьте 'US' в качестве третьего параметра функции ApplyMap(), чтобы обрабатывать такие случаи, когда страна указана неправильно.
  9. ApplyMap('CountryMap', Country, 'US') as Country,

    Скрипт должен выглядеть следующим образом:

    CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ]; Data: LOAD ID, Name, ApplyMap('CountryMap', Country, 'US') as Country, Code FROM [lib://DataFiles/Data.xlsx] (ooxml, embedded labels, table is Sheet1);

  10. Щелкните команду Загрузить данные.
  11. Полученная таблица выглядит следующим образом:

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

Примечание: Чтобы узнать дополнительные сведения о функции ApplyMap(), см. эту запись блога в Qlik Community: Не объединяйте — используйте вместо этого функцию Applymap

MapSubstring() функция

Функция MapSubstring() позволяет сопоставлять части поля.

В таблице, созданной функцией ApplyMap(), нам теперь необходимо, чтобы числа записывались в виде текста. Таким образом, функция MapSubstring() будет использоваться для замены числовых данных тестом.

Для этого сначала необходимо создать таблицу сопоставления.

Выполните следующие действия.

  1. Добавьте следующие строки скрипта после раздела CountryMap, но перед разделом Data.
  2. CodeMap: MAPPING LOAD * INLINE [ F1, F2 1, one 2, two 3, three 4, four 5, five 11, eleven ];

    В таблице CodeMap сопоставлены числа от 1 до 5, и 11.

  3. В разделе скрипта Data измените оператор Code следующим образом:
  4. MapSubString('CodeMap', Code) as Code

    Скрипт должен выглядеть следующим образом:

    CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ]; CodeMap: MAPPING LOAD * INLINE [ F1, F2 1, one 2, two 3, three 4, four 5, five 11, eleven ]; Data: LOAD ID, Name, ApplyMap('CountryMap', Country, 'US') as Country, MapSubString('CodeMap', Code) as Code FROM [lib://DataFiles/Data.xlsx] (ooxml, embedded labels, table is Sheet1);

  5. Щелкните команду Загрузить данные.
  6. Полученная таблица выглядит следующим образом:

    Таблица, в которой отображаются данные, загруженные с помощью функции MapSubString
    Table showing data loaded using MapSubString function.

    В поле Code числовые символы были заменены текстом. Если число повторяется несколько раз, как для ID=3 и ID=4, текст также повторяется. ID=4. Susan McDaniels имеет в коде цифру 6. Поскольку цифра 6 не была сопоставлена в таблице CodeMap, она остается без изменений. ID=5, Dean Smith имеет в коде 111. Этому числу сопоставлен текст 'elevenone'.

Примечание: Чтобы узнать дополнительные сведения о функции MapSubstring(), см. эту запись блога в Qlik Community: Сопоставление … не географического типа

Map … Using

Оператор Map … Using может быть также использован для применения сопоставления к полю. Однако он работает немного по-другому, чем функция ApplyMap(). В то время как ApplyMap() выполняется при каждом появлении имени поля в выражении, Map … Using применяет сопоставление, если значение сохранено во внутренней таблице под определенным именем поля.

Давайте разберем пример. Допустим, что мы несколько раз загружали поле Country в скрипт и хотели, чтобы сопоставление применялось при каждой загрузке поля. Можно использовать функцию ApplyMap(), как рассматривалось ранее в данном учебном пособии, или можно использовать Map … Using.

Если Map … Using используется, когда сопоставление применяется к полю, это поле сохраняется во внутреннюю таблицу. Таким образом, в примере ниже сопоставление применяется к полю Country в таблице Data1, но не применяется к полю Country2 в таблице Data2. Это происходит, потому что оператор Map … Using применяется только к полям с именем Country. Когда поле Country2 сохраняется во внутреннюю таблицу, его имя уже не Country. Чтобы сопоставление применялось к таблице Country2, необходимо использовать функцию ApplyMap().

Оператор Unmap завершает работу оператора Map … Using, поэтому, если поля Country были загружены после оператора Unmap, функция CountryMap не будет применена.

Выполните следующие действия.

  1. Замените скрипт для таблицы Data на следующее:
  2. Map Country Using CountryMap;
    Data1:
    LOAD
        ID,
        Name,
        Country
    FROM [lib://DataFiles/Data.xlsx]
    (ooxml, embedded labels, table is Sheet1);
    					
    Data2:
    LOAD
        ID,
        Country as Country2
    FROM [lib://DataFiles/Data.xlsx]
    (ooxml, embedded labels, table is Sheet1);
    UNMAP;

  3. Щелкните команду Загрузить данные.
  4. Полученная таблица выглядит следующим образом:

    Таблица, в которой отображаются данные, загруженные с помощью функции Map … Using
    Table showing data loaded using Map … Using function.