Страницы: 1
RSS
DAX PBI Вычисление частично не принятых товаров.
 
Доброго времени суток форумчане!

У меня сл. ситуация. Рассчитываю количества товаров, которые ожидаются к поставке - товары, которые заказали, но которые прибыли частично или которые приняли частично.

У меня есть таблица, в которой есть два поля:
1) в котором указан номер документа, по которому заказывают товар - ID,
2) в котором указан номер документа по которому приходит товар - purchaseOrderid

Это все одна таблица.



Сложность в том, что я не понимаю, как возможно сделать так, чтобы мое выражение работало только в том случае, когда ID документа находит свой ID в поле purchaseOrderid. И тогда он из документа заказа вычитает товар который указан в документе приемки.
Код
Вот такую меру я уже написал.
VAR _1 = // тут вычисляем кол-во заказанных товаров
CALCULATE (
    SUM ( DocumentPosition[quantity] ),
    State[name] IN { "Ожидается поставка", "Частично пришло" }, // Document[metaType] = "purchaseorder",
    Document[applicable] = TRUE (),
    ALL ( 'Calendar'[Date] )
)

VAR _2 = //тут вычисляем кол-во принятых товаров
CALCULATE ( 
    SUM ( DocumentPosition[quantity] ),
    Document[applicable] = TRUE (),
    Document[metaType] = "supply",
    ALL ( 'Calendar'[Date] ),
    USERELATIONSHIP ( Document[purchaseOrderId], DocumentPosition[documentId] )
)

RETURN _1 -_2
 
Антон, пример где? Его гораздо легче составить, чем нам по Вашей неработающей мере понять, что и как нужно сделать.
Пример должен быть простой. Не 100 столбцов в каждой из 10 таблиц. Но отражающий суть Вашего вопроса. А потом Вы уже переложите решение на реальные данные.
Изменено: surkenny - 23.09.2022 12:02:41
 
Цитата
написал:
Антон, пример где? Его гораздо легче составить, чем нам по Вашей неработающей мере понять, что и как нужно сделать.
Пример должен быть простой. Не 100 столбцов в каждой из 10 таблиц. Но отражающий суть Вашего вопроса. А потом Вы уже переложите решение на реальные данные.
Прилагаю примет.
Там на срезе можно выбрать два склада - Капитал и Основной.
Если смотреть на склад Основной, то все вроде нормально по расчетом. Это связано с тем, что там есть всего один приход и поэтому цифры корректные. Но если вы выберите склад Капитал, то увидите, что есть 3 прихода и всего один заказ. И все эти приходы по другим заказам. поэтому расчет не корректный.

И я не понимаю, как мне сделать так, чтобы расчет производился только по документам, которые свой ID находят в поле purchaseOrderid. При том когда они находят свой номер в purchaseOrderid, в поле ID у документа приемки другой номер - отличается от ID номера документа родителя.  
Изменено: Антон - 23.09.2022 13:18:16
 
Антон, самый правильный ответ: сделать правильную модель, чтобы не мучиться. Разделите одну таблицу на две: Заказы и Поставки. Тогда вы спокойно сможете посчитать сколько у вас заказано по документу и сколько поставлено. Все остальные решения приведут или к пожиранию ресурсов, или к неверным вычислениям.
 
Цитата
написал:
Антон, самый правильный ответ: сделать правильную модель, чтобы не мучиться. Разделите одну таблицу на две: Заказы и Поставки. Тогда вы спокойно сможете посчитать сколько у вас заказано по документу и сколько поставлено. Все остальные решения приведут или к пожиранию ресурсов, или к неверным вычислениям.
Я думал над тем, чтобы разделить таблицу. Создал вычисляемую таблицу через FILTER(таблица, тип документа = supply). Правда так до нужного мне результата с расчётом и не дошел. Видимо, мало думал над этим решением.
Но как мне кажется, это не верное все-таки решение - создавать вычисляемы таблицы такого рода.
Такого рода пример надо решать либо через создание виртуальной таблицы и делать в ней расчеты, либо есть функция, через которую можно этот решить.

Честно говоря, очень хочется решить это через меру.)
Топорным способом наплодить таблиц всегда можно воспользоваться. : )
Изменено: Антон - 23.09.2022 18:19:16
 
Цитата
написал:
Но если вы выберите склад Капитал, то увидите, что есть 3 прихода и всего один заказ. И все эти приходы по другим заказам. поэтому расчет не корректный
Расчет у вас корректен для той задачи которую вы хотели решить - посчитать закупку и поставку по виду товара, склада.
Пример не удачен - нет счетов на закупку, для уже поставленного товара.

Если же задача посчитать сколько поставлено по счету с меткой "purchaseorder", то без правки модели будет трудно.
Во вложении немного топорно - пришлось добавить столбец в таблицу "DocumentPosition" и создать связь с полем Document[id] по нему.

Можно еще покумекать, но пока так

 
Изменено: DrillPipe - 25.09.2022 19:53:11
 
Цитата
Антон написал:
Но как мне кажется, это не верное все-таки решение - создавать вычисляемы таблицы такого рода.
Действительно - это НЕ верное решение. Все преобразования над данными необходимо делать ДО загрузки в модель.

Цитата
Антон написал:
Честно говоря, очень хочется решить это через меру.)
Через меру надо считать, когда данные уже готовы для этого, а не городить в них непонятно что. Есть правило: если не получается написать простую меру - значит ваша модель неправильная.
 
Цитата
написал:
Цитата
написал:
Антон , самый правильный ответ: сделать правильную модель, чтобы не мучиться. Разделите одну таблицу на две: Заказы и Поставки. Тогда вы спокойно сможете посчитать сколько у вас заказано по документу и сколько поставлено. Все остальные решения приведут или к пожиранию ресурсов, или к неверным вычислениям.
Я думал над тем, чтобы разделить таблицу. Создал вычисляемую таблицу через FILTER(таблица, тип документа = supply). Правда так до нужного мне результата с расчётом и не дошел. Видимо, мало думал над этим решением.
Но как мне кажется, это не верное все-таки решение - создавать вычисляемы таблицы такого рода.
Такого рода пример надо решать либо через создание виртуальной таблицы и делать в ней расчеты, либо есть функция, через которую можно этот решить.

Честно говоря, очень хочется решить это через меру.)
Топорным способом наплодить таблиц всегда можно воспользоваться. : )
Большое спасибо : ) Еще немного доработал ваше решение и все заработало как надо) Добавил пару аргументов по документам.

Цитата
написал:
Цитата
Антон написал:
Но как мне кажется, это не верное все-таки решение - создавать вычисляемы таблицы такого рода.
Действительно - это НЕ верное решение. Все преобразования над данными необходимо делать ДО загрузки в модель.

Цитата
Антон написал:
Честно говоря, очень хочется решить это через меру.)
Через меру надо считать, когда данные уже готовы для этого, а не городить в них непонятно что. Есть правило: если не получается написать простую меру - значит ваша модель неправильная.
Очень хорошее правило.: )  
Страницы: 1
Наверх