Довольно часто возникает необходимость в формировании отчета о распределении записей по диапазонам в зависимости от определенной величины. Например, распределение численности работников по размерам начисленной заработной платы. Или распределение количества накладных (чеков) по сумме покупки. Или распределение численности по возрастным группам. Вообщем отчет, который дает информацию о количестве объектов определенное значение которых входит в определенные диапазоны (сколько товарных чеков на сумму от 1000 до 3000 или сколько сотрудников получают зарплату от 20 000 до 30 000).
На простом примере я покажу как решается этот вопрос в Qlikview.
Имеется таблица фактов, к примеру сумма начисленной зарплаты за определенный период, где IdTnun – табельный номер сотрудника, SumIn – Начисленная сумма зарплаты.
IdTnum | SumIn | IdTnum | SumIn | |
101 | 6540,5 | 111 | 65014 | |
102 | 10995 | 112 | 35412 | |
103 | 26500,5 | 113 | 16880 | |
104 | 26500 | 114 | 14700 | |
105 | 15000 | 115 | 19000 | |
106 | 15000,1 | 116 | 28000 | |
107 | 14563 | 117 | 13490 | |
108 | 13200 | 118 | 16077 | |
109 | 6400 | 119 | 14328 | |
110 | 15100 | 120 | 19746 |
Таблица 1. Itogi
Требуется распределить и подсчитать количество записей по диапазонам сумм:
Сумма от |
Сумма до |
Обозначение диапазона |
---|---|---|
0 | 4610,99 | До 4611 руб. |
4611 | 4611 | На уровне 4611 руб. |
4611,1 | 5000 | 4611,1 - 5000 руб. |
5000,1 | 5300 | 5000,1 - 5300 руб. |
5300,1 | 5600 | 5300,1 - 5600 руб. |
5600,1 | 5900 | 5600,1 - 5900 руб. |
5900,1 | 6200 | 5900,1 - 6200 руб. |
6200,1 | 6500 | 6200,1 - 6500 руб. |
6500,1 | 6800 | 6500,1 - 6800 руб. |
6800,1 | 7100 | 6800,1 - 7100 руб. |
7100,1 | 7400 | 7100,1 - 7400 руб. |
7400,1 | 7700 | 7400,1 - 7700 руб. |
7700,1 | 8000 | 7700,1 - 8000 руб. |
8000,1 | 8500 | 8000,1 - 8500 руб. |
8500,1 | 9000 | 8500,1 -9000 руб. |
9000,1 | 9500 | 9000,1 - 9500 руб. |
9500,1 | 10000 | 9500,1 - 10000 руб. |
10000,1 | 10500 | 10000,1 - 10500 руб. |
10500,1 | 11000 | 10500,1 - 11000 руб. |
11000,1 | 11500 | 11000,1 - 11500 руб. |
11500,1 | 12000 | 11500,1 - 12000 руб. |
12000,1 | 12500 | 12000,1 - 12500 руб. |
12500,1 | 13000 | 12500,1 - 13000 руб. |
13000,1 | 13500 | 13000,1 - 13500 руб. |
13500,1 | 14000 | 13500,1 - 14000 руб. |
14000,1 | 14500 | 14000,1 - 14500 руб. |
14500,1 | 15000 | 14500,1 - 15000 руб. |
15000,1 | Свыше 15000 руб. |
Таблица 2: intervalsum
В Qlikview такая задача решается с помощью оператора IntervalMatch.
Предварительно, в сценарии должны быть загружены обе таблицы.
Затем применяем согласно документации:
IntervalMatch ( SumIn ) load Sum1, Sum2 Resident intervalsum;
Устанавливается связь между таблицами "SumIn" и "intervalsum" посредством таблицы соответствий intervalsum-1
Которая содержит все соответствия SumIn → Sum1...Sum2
Sum1 | Sum2 | SumIn |
6 200,1 | 6 500,0 | 6 400,0 |
6 500,1 | 6 800,0 | 6 540,5 |
10 500,1 | 11 000,0 | 10 995,0 |
13 000,1 | 13 500,0 | 13 200,0 |
13 000,1 | 13 500,0 | 13 490,0 |
14 000,1 | 14 500,0 | 14 328,0 |
14 500,1 | 15 000,0 | 14 563,0 |
14 500,1 | 15 000,0 | 14 700,0 |
14 500,1 | 15 000,0 | 15 000,0 |
15 000,1 | 15 000,1 | |
15 000,1 | 15 100,0 | |
15 000,1 | 16 077,0 | |
15 000,1 | 16 880,0 | |
15 000,1 | 19 000,0 | |
15 000,1 | 19 746,0 | |
15 000,1 | 26 500,0 | |
15 000,1 | 26 500,5 | |
15 000,1 | 28 000,0 | |
15 000,1 | 35 412,0 | |
15 000,1 | 65 014,0 |
Далее все очень просто, формируем объект "Диаграмма", выбираем измерения (состоящие в ассоциативной связи с данными) и создаем выражение, к примеру:
Численность = count (DISTINCT IdTnum) .
Получаем требуему.ю таблицу:
Установив связь по полю IdTnum с таблицей, содержащей кадровые сведения, можно получить разнообразные отчеты. Просто, быстро и красиво. В этом и вся прелесть использования Qlikview для формирования управленческой отчетности на предприятии.
Скрипт примера в QlikView 11:
Itogi:
LOAD * INLINE [
IdTnum, SumIn
101, "6540,5"
102, "10995,"
103, "26500,5"
104, 26500
105, 15000
106, "15000,1"
107, 14563
108, 13200
109, 6400
110, 15100
111, 65014
112, 35412
113, 16880
114, 14700
115, 19000
116, 28000
117, 13490
118, 16077
119, 14328
120, 19746
];
intervalsum:
LOAD * INLINE [
Sum1, Sum2, RangeSumIn
0, "4610,99", До 4611 руб.
4611, 4611, На уровне 4611 руб.
"4611,1", 5000, "4611,1 - 5000 руб."
"5000,1", 5300, "5000,1 - 5300 руб."
"5300,1", 5600, "5300,1 - 5600 руб."
"5600,1", 5900, "5600,1 - 5900 руб."
"5900,1", 6200, "5900,1 - 6200 руб."
"6200,1", 6500, "6200,1 - 6500 руб."
"6500,1", 6800, "6500,1 - 6800 руб."
"6800,1", 7100, "6800,1 - 7100 руб."
"7100,1", 7400, "7100,1 - 7400 руб."
"7400,1", 7700, "7400,1 - 7700 руб."
"7700,1", 8000, "7700,1 - 8000 руб."
"8000,1", 8500, "8000,1 - 8500 руб."
"8500,1", 9000, "8500,1 -9000 руб."
"9000,1", 9500, "9000,1 - 9500 руб."
"9500,1", 10000, "9500,1 - 10000 руб."
"10000,1", 10500, "10000,1 - 10500 руб."
"10500,1", 11000, "10500,1 - 11000 руб."
"11000,1", 11500, "11000,1 - 11500 руб."
"11500,1", 12000, "11500,1 - 12000 руб."
"12000,1", 12500, "12000,1 - 12500 руб."
"12500,1", 13000, "12500,1 - 13000 руб."
"13000,1", 13500, "13000,1 - 13500 руб."
"13500,1", 14000, "13500,1 - 14000 руб."
"14000,1", 14500, "14000,1 - 14500 руб."
"14500,1", 15000, "14500,1 - 15000 руб."
"15000,1", , Свыше 15000 руб.
];
IntervalMatch ( SumIn ) load Sum1, Sum2 Resident intervalsum;