0 Replies Latest reply: May 2, 2017 9:44 AM by Stanislav Chernov RSS

    Вывод строкового значения + немного магии анализа множеств

    Stanislav Chernov

      Приветствую коллеги, есть немного вопросов (речь о QlikView),

      Я сделал тестовое приложение которое содержит некую структуру данных, скрин1 : https://s.mail.ru/MtZV/BMfvzP3MJ

      Т.е. есть две таблицы фактов, которые по некоторым причинам я не могу просто так заджоинить, одна таблица содержит данные по ценам конкурентов, вторая - цены по переоценкам (т.е. продажные), в релизе есть еще и третья таблица фактов - это цены закупочные (но её сейчас опустим, она по принципу с ценами по переоценкам)

      Примерный дэшбоард получился следующим, картинка 2: https://s.mail.ru/51At/1U5qkJb7A

       

      Необходимо построить таблицу следующего содержания:

      Измерения: Магазин / Товар

      Меры: Мин. цена конкурента / Наименование конкурента с мин. ценой / Цена продажная на дату проверки / Цена продажная текущая

       

      Есть доп. условие, пользователи сами выбирают период, за который хотят анализировать данные, с этим проблем нет: создаем два календаря, две переменные и называем из varDateStart и varDateEnd, попутно, в ходе работы скрипта оставляем заполненными еще две переменные с мин.датой и макс.датой - все даты представляем в виде числа. картинка 3: https://s.mail.ru/G8LK/Qp8Y5Fymo

       

      С измерениями вопросов нет, поехали по мерам.

      Мин. цена конкурента, считаем по формуле без проблем : min( {< ДатаЧислом = {'>=$(varDateStart)<=$(varDateEnd)'} > }  ЦенаКонкурента)

       

      Наименование конкурента с мин. ценой - взывает о помощи, текущая формула : FirstSortedValue( {< ДатаЧислом = {'>=$(varDateStart)<=$(varDateEnd)'} > }  Конкурент, ЦенаКонкурента)

      Формула работает, если у нас одна минимальная цена у одного конкурента в один день;

      Формула не работает, если у нас есть одинаковая цена товара по разным конкурентам ; если взять count (distinct Конкурент) - их будет больше 1

       

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

      т.е. если у нас, для примера:

      товар1 ; магазин1 ; 10.04.2017 ; конкурент1 ; 20 руб. мин. цена конкурента

      и переоценки:

      товар1 ; магазин1 ; 01.04.2017 ; 10 руб. цена продажи

      товар1 ; магазин1 ; 08.04.2017 ; 15 руб. цена продажи

      товар1 ; магазин1 ; 12.04.2017 ; 20 руб. цена продажи

      товар1 ; магазин1 ; 30.04.2017 ; 30 руб. цена продажи

       

      то мы должны увидеть в таблице , цену товара = 15 руб., т.к. эта цена, максимальной даты и меньше даты цены конкурента

       

      Цена продажная текущая, в теории должная работать формула: only( {< ДатаЧисломПереоценка = {'$(=max(ДатаЧисломПереоценка))'} > }  ЦенаНаша)

      которая отрабатывает и берет максимальную дату, без аггрегирования по товарам. Т.е. берет макс.дату и пытается на эту дату получить цену - получаем конечно же Null(), т.к. у нас нет на макс. дату - цены продажи

       

      Собственно, тестовое приложение во вложении,

      Прошу содействия в решении формул.