Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
stark___
Contributor III
Contributor III

Не правильное умножение в сводной таблице

Коллеги, добрый день.

Столкнулся с небольшой проблемой, которую не могу понять и нужен ваш совет.

У нас есть отчет дистрибьютора по продажам нашей продукции через своих клиентов. Продажи показаны только в штуках и, чтобы оценить продажи, нужно умножить штуки на наши цены. Актуальные цены подтягиваются из 1С, а т.к. в 1С нет справочника цен с ценами на каждый день, во время загрузки создается КнигаЦен. Связь между отчетом и книгой цен осуществляется через ключ: наименование продукта + дата.

Скрипт.jpg

Пытаюсь создать сводную таблицу, в которой будут показаны продажи в рублях и тут возникает проблема:

Таблица 1.jpg

если я использую формулу sum(Количество*Цена), то получается какая-то ерунда (результат в последней колонке), при этом цены к номенклатуре подтягиваются правильно, умножение колонок Цена и Количество дает правильный результат, формула

sum(Количество)*Цена ,    тоже дает верный результат, но не показывает Total при сворачивании номенклатуры.


Я пытался сделать КнигуЦен на основе QVD, но результат тот же. Самое интересное, если КнигуЦен выгрузить в Excel и загрузить в отчет, то все получается верно:

Таблица 2.jpg


В чем может быть проблема?



С уважением. Stark.



1 Solution

Accepted Solutions
stark___
Contributor III
Contributor III
Author

На каждый вопрос есть ответ, просто нужно его поискать)))

Вопрос решился сам собой, в результате поиска решения для другого скрипта:

в последней таблице надо было просто добавить DISTINCT

Цены2:
LOAD Distinct Цена1 as Цена,Справочник_НоменклатурныеГруппы.Наименование&'-'&Дата as КлючЦена
Resident Цены;
DROP Table Цены;

С уважением, Stark

View solution in original post

3 Replies
Sergey_Polekhin
Former Employee
Former Employee

Добрый день,

Первое, на что я предложил бы посмотреть - на то, как вы формируете ключ "КлючЦена":

  1. Используете ли для его генерации функции семейства Autonumber()?
  2. Выполняете ли вы построение этого ключа в рамках одного сценария загрузки или грузите данные в таблицы "Sales1" и "Цены2" в разных сценариях и при этом используете функции семейства Autonumber() в разных сценариях?
stark___
Contributor III
Contributor III
Author

Добрый день.

Мне уже подсказали в параллельной ветке  Incorrect multiplication in the pivot table, что надо в формуле сделать агрегирование:

Sum(Aggr(Sum(Quantity) * Price, AllYourChartDimensionsHere))

тогда все работает. Но мне все равно не понятно, почему, когда я загружаю цены из Excel, формула sum(Количество*Цена) формула работает правильно, а когда цены загружаются из QV, то надо агрегировать.

Загрузка продаж происходит из базы Access.

Для расчета цен использую следующий скрипт:

ODBC CONNECT TO PostgreUT;
РегистрСведений_ЦеныНоменклатуры:
LOAD
Date(DayStart("_period")) as Дата,
MonthStart(Date(DayStart("_period"),'DD-MM-YYYY')) as Прайс_Дата,
"_fld4677rref" as Справочник_Номенклатура,
"_fld4681" as Цена;
SQL SELECT
"_period",
"_fld4677rref",
"_fld4681"
FROM "ut82sql".public."_inforg4675";

Left Join (РегистрСведений_ЦеныНоменклатуры)
LOAD *
Resident Справочник_НоменклатурныеГруппы;

LETvarMinDate1 = Num('01.01.2014');
LETvarMaxDate1 = num(trim(Today()));

Goods_x_Dates: 
Load
Справочник_НоменклатурныеГруппы,
MonthStart(Date(DayStart($(varMinDate) + IterNo() -1),'DD-MM-YYYY')) asПрайс_Дата
Resident РегистрСведений_ЦеныНоменклатуры
WhileIterNo() <= $(varMaxDate) - $(varMinDate) + 1 ;

Join (РегистрСведений_ЦеныНоменклатуры)
LOAD *
Resident Goods_x_Dates;
DropTable Goods_x_Dates;

Цены:
NoConcatenateLoadПрайс_ДатаasДата,
Справочник_НоменклатурныеГруппы,
Цена,
If(Справочник_НоменклатурныеГруппы=Peek( Справочник_НоменклатурныеГруппы ) andIsNull( Цена ),peek(Цена1),Цена) asЦена1
Resident РегистрСведений_ЦеныНоменклатуры
OrderByСправочник_НоменклатурныеГруппы, Прайс_Дата ;
DropTable РегистрСведений_ЦеныНоменклатуры;

LeftJoin (Цены)
LOAD *
Resident Справочник_НоменклатурныеГруппы;

DROPTable Справочник_НоменклатурныеГруппы;
DROPFieldsСправочник_Номенклатура, Цена, Справочник_НоменклатурныеГруппы;

Цены2:
LOAD Цена1 as Цена,Справочник_НоменклатурныеГруппы.Наименование&'-'&Дата as КлючЦена
Resident Цены;
DROP Table Цены;

С уважением, Stark

stark___
Contributor III
Contributor III
Author

На каждый вопрос есть ответ, просто нужно его поискать)))

Вопрос решился сам собой, в результате поиска решения для другого скрипта:

в последней таблице надо было просто добавить DISTINCT

Цены2:
LOAD Distinct Цена1 as Цена,Справочник_НоменклатурныеГруппы.Наименование&'-'&Дата as КлючЦена
Resident Цены;
DROP Table Цены;

С уважением, Stark