qlik
December 30, 2020

Кейс Set Analysis - Баг или Фича?

Вводная часть

Разберем небольшой кейс. Источник данных, собранный на коленке:

SET1:

SET2:

Модель 1

Скрипт загрузки:

SET1:
LOAD
    ID,
    "Field 1",
    1 			As [Flag Set 1]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET1);

SET2:
LOAD
    ID,
    "Field 2",
    1 			As [Flag Set 2]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET2);

Скриншот модели:

Посчитаем количество уникальных ID 4-мя способами:

Count(Distinct ID)
Count({<[Flag Set 1]={1}>} Distinct ID)
Count({<[Flag Set 2]={1}>} Distinct ID)
Count({ <[Flag Set 1]={1}> + <[Flag Set 2]={1}> } Distinct ID)

Результат:

Модель 2

Меняем одну строку:

SET1:
LOAD
    ID,
    "Field 1",
    1 			As [Flag Set 1]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET1);

Outer Join(SET1)
LOAD
    ID,
    "Field 2",
    1 			As [Flag Set 2]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET2);

Получилась модель данных:

Формулы остаются те же, а результат меняется:

Модель 3

Скрипт:

SET1:
LOAD
    ID,
    "Field 1"
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET1);

SET2:
LOAD
    ID,
    "Field 2"
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET2);

//==============================

Dim1:
LOAD
    ID,
    1 			As [Flag Set 1]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET1);

Dim2:
LOAD
    ID,
    1 			As [Flag Set 2]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET2);

Модель данных:

Результат работы:

Модель 4

Скрипт:

SET1:
LOAD
    ID,
    "Field 1"
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET1);

SET2:
LOAD
    ID,
    "Field 2"
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET2);


DIM:
LOAD
    ID,
    1 			As [Flag Set 1]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET1);

Concatenate(DIM)
LOAD
    ID,
    1 			As [Flag Set 2]
FROM [lib://Source/data.xlsx]
(ooxml, embedded labels, table is SET2);

Модель данных:

Результат работы: