Qlik Sense Блог

ABC Анализ Advance: Сортируемый Aggr по 2 измерениям (Клиент & Год)

Возникла задача отобразить исторический ABC в таблице (по годам). Есть два измерения – Клиент и Год.

Исходный загрузочный скрипт для модели:

Продажи:
LOAD 
     Клиент, 
     Год, 
     Продажи
FROM [lib://Data/Данные.xlsx]
(ooxml, embedded labels, table is Лист1);

Старая формула для ABC Анализа дала сбой. Для 1 измерения ABC Анализ рассчитывается корректно:

Старый подход в ABC Анализе с использованием сортируемого AGGR

Формула для старого ABC Анализа:

=if(
 (aggr(rangesum(above( sum(Продажи), 0, rowno() )),(Клиент, (=sum(Продажи), DESCENDING )))/sum(TOTAL Продажи)<0.8),'A',
 if(aggr(rangesum(above( sum(Продажи), 0, rowno() )),(Клиент, (=sum(Продажи), DESCENDING )))/sum(TOTAL Продажи)<0.95,'B','C')
)

Если в таблицу добавить измерение Год и вынести его в столбцы, то получаем некорректный расчет:

Старая формула с 2 измерениями не работает

Добавляем в загрузочный скрипт ранжирование по Году и по Клиенту:

Продажи:
LOAD 
     AutoNumberHash128(Клиент, Год) As %КлиентГодID,
     Клиент, 
     Год, 
     Продажи
FROM [lib://Data/Данные.xlsx]
(ooxml, embedded labels, table is Лист1);

NoConcatenate
Temp:
LOAD 
     %КлиентГодID,
     Год,
     Sum(Продажи) As СуммаПродаж
Resident Продажи
Group By Год, %КлиентГодID;

NoConcatenate
ПродажиПорядок:
LOAD *,
     RowNo() As [Rank Продажи]
Resident Temp
Order By Год, СуммаПродаж desc;

DROP Table Temp;
DROP Field Год From ПродажиПорядок;

Новая формула расчета числителя:

aggr(rangesum(above( sum(Продажи), 0, Rank(sum(Продажи)) )),([Rank Продажи],(Клиент, (=sum(Продажи), DESCENDING ))))

Новая формула расчета знаменателя:

sum(TOTAL <Год> Продажи)

Новая формула ABC Анализа с сортируемым AGGR с двумя измерениями (исторический ABC анализ по годам):

=if(
 (aggr(rangesum(above( sum(Продажи), 0, Rank(sum(Продажи)) )),([Rank Продажи],(Клиент, (=sum(Продажи), DESCENDING ))))/sum(TOTAL <Год> Продажи)<0.8),'A',
 if(aggr(rangesum(above( sum(Продажи), 0, Rank(sum(Продажи)) )),([Rank Продажи],(Клиент, (=sum(Продажи), DESCENDING ))))/sum(TOTAL <Год> Продажи)<0.95,'B','C')
)

Получаем правильный вид ABC анализа:


Скачать готовый пример:

0 0 голосов
Рейтинг статьи
qliksense-expert

View Comments

  • Мое мнение такое) Если уж пришлось лезть в скрипт чтобы формировать таблицу спецом под этот сценарий ABC, проще было бы и саму сегментацию добить на стороне скрипта, и избавиться от формулы с AGGR в визуале

    • В случае, если не нужно иметь динамический расчет ABC Анализа, то согласен на 100%. Плюс в таком варианте - можно измерения задавать через переменные и получается конструктор. Бизнес-пользователь может посмотреть на разные варианты сегментаций и возможно что-то ценное найдет.

Recent Posts

Доступ к системным данным и переменным в Extension Qlik Sense

Введение Иногда при создании расширения Qlik Sense вам необходимо получить доступ к системным данным. Это…

3 года ago

Как собрать с помощью PowerShell информацию по всем QVD из всех директорий?

// Команда, которая будет запускаться в Powershell на сервере LET vPowershellCommand = 'Get-ChildItem -Path ''lib://Data/QVDs''…

3 года ago

Как построить диаграмму Control Chart со скользящим средним в Qlik Sense?

Как построить диаграмму Control Chart со скользящим средним в Qlik Sense? В этой статье будет…

3 года ago

Как сделать чередование цвета в строках прямой таблицы Qlik Sense?

Как сделать чередование цвета в строках прямой таблицы Qlik Sense? Если порядок строк неважен, то…

3 года ago

Как создать Qlik Sense Extension с помощью Nebula.js и React

Обзор В этой серии руководств мы собираемся создать расширение Qlik Sense с использованием Nebula.js и…

3 года ago

Создание Extension с помощью qlik nebula.js и D3.js – Tutorial

Создание расширенного расширения визуализации с использованием Qlik Nebula.js и D3.js   В моем последнем посте я рассказал…

3 года ago

This website uses cookies.