Страницы: 1
RSS
Вычисления для отдельных уровней иерархии в Power BI, Необходимо получить сумму значений нижней иерархии в верхнюю
 
Доброго времени суток!
Стоит задача:
Есть план по установке цены в зависимости от доступного количества номенклатуры к продаже. Нужно вывести по каждой номенклатуре эту плановую цену в зависимости от фактического остатка номенклатуры. (см. вложение). (Цена здесь рассчитывается как Стоимость делить на Площадь) Т.е. просто сравниваем кол-во по факту с кол-ом из таблицы плана по установке цены и выводим нужную цену. Но есть одно но, в таблице визуализации присутствует иерархия по этим номенклатурам. Соответственно при простом сравнивании на уровнях иерархии выше будет уже не средняя цена, а ее сумма. Чтобы этого избежать сначала в мере считаем условие по площади и отдельно по стоимости, а потом делим одно на другое и получаем среднюю цену. Но и после этого формула на уровне иерархии выше работает не правильно, т.к. она начинает сравнивать остаток товара в целом по иерархии с остатком из таблицы плана, а нужно, чтобы сравнивала отдельно по каждому товара (т.к. для каждого товара разное условие). Эту проблему я решил через SWITCH и ISINSCOPE, сложил каждое условие по площади с отбором по конкретному товару и это выражение вложил на верхние уровни иерархии:

ПлощадьПовышИерарх = var S = CALCULATE([ПП_Площадь повышения], 'Таблица1'[Товар] = "A1") + CALCULATE([ПП_Площадь повышения], 'Таблица1'[Товар] = "A2")+ CALCULATE([ПП_Площадь повышения], 'Таблица1'[Товар] = "В1") +CALCULATE([ПП_Площадь повышения], 'Таблица1'[Товар] = "В2")+CALCULATE([ПП_Площадь повышения], 'Таблица1'[Товар] = "С1")+CALCULATE([ПП_Площадь повышения], 'Таблица1'[Товар] = "С2")

return

SWITCH(TRUE(),
ISINSCOPE('Таблица1[Товар]), [ПП_Площадь повышения],
ISINSCOPE('СвязаннаяТаблица'[Группы товаров1]), S,
ISINSCOPE('СвязаннаяТаблица'[Группы товаров Итого]), S,
S)

?И точно также для стоимости, а потом делением друг на друга получил среднюю цену.
?
В этом случае все вычисления происходят корректно, но в опубликованном файле визуализация не воспроизводится, т.к. не хватает памяти для вычисления (видимо потому-что товаров очень много и вот таких выражений CALCULATE([ПП_Площадь повышения], 'Таблица1'[Товар] = "A1") суммируется порядка 60 штук).
?
?Может кто знает как реализовать расчет средней цены на уровнях иерархий по другому, более просто в вычислении. Может как-то можно сложить вычисления на нижнем уровне? Т.е. вычислить выражения на нижнем уровне получить из них константу и подставить их сумму в верхний уровень...
 
Александр Неугодников,
Создайте нормальный пример с моделью данных. В "визуализации" товар А1, Б1 ..., а в таблице Товар1.1, Товар1.2, Товар1.3. Что такое площадь я вообще не понял :)
И самое главное. Допустим у Вас 1000 товаров по 1 шт. Цена при наличии 1 шт - 10000р. При наличии от 500 - 8000р. То есть в строке для каждого товара должно быть 10000р. А в группировке всех товаров что?
P.S. мое мнение - цена в группировке может быть либо просто средним арифметическим цен отдельных товаров либо средним взвешенным цен отдельных товаров по количеству. Вычислять какую-то цену по описанной вами логике - какой-то непонятный показатель :)
Изменено: surkenny - 21.01.2022 16:11:43
 
Под товаром здесь понимается тип квартиры. Т.е. это даже не единица квартиры, а планировка. Остаток квартир по каждой планировке и есть условие по изменению цены. Средняя цена - это цена за квадратный метр. Т.е. нужно получить среднюю цену за м2 по каждой планировке в зависимости от свободного остатка, а также корректное значение средней цены по уровням иерархии. (пример переделал)
 
Александр Неугодников, вы бы пример модели прикладывали в PBIX. Со связями, иерархией и всей остальной фигней. Ибо  ISISCOPE в экселе как-то не фурычит. Или нам за вас еще и пример собирать?
Вот горшок пустой, он предмет простой...
 
PooHkrd, что-то мне кажется, что там данных вообще немного и ISINSCOPE вообще не нужна будет :) VALUES обойдёмся.
А вот что посчитать в группировке по квартирам, ТС так и не ответил. Для каждого типа и остатка цену посчитали, а дальше? Что такое средняя цена двух типов квартир с разными остатками? Как мы ее считаем? Сумму произведений рассчитанных цен каждого типа на  суммарную площадь этого типа делить на суммарную площадь всех типов в группировке?
Изменено: surkenny - 21.01.2022 17:56:10
 
В общем, решено. Но это не помощь, а полностью сделанная модель :)
Для группы считается так: сумма стоимостей квартир каждого типа (сумма произведений цены метра каждого типа на площадь на количество) делится на суммарную площадь всех квартир.
Изменено: surkenny - 21.01.2022 22:10:00
 
Я извиняюсь, что не корректно высказываю свои мысли... Приложил модель в pbix. Собственно задачу-то я решил как и написал выше, на верхней иерархии я сложил все стоимости и площади по каждой планировке отдельно, а потом поделил стоимость на площадь, таким образом получив цену. Но проблема в том что планировок в реале у меня более 60 (еще и объектов куча) и для отображения визуализации не хватает памяти. Поэтому я интересуюсь, есть ли способ решить данную задачу более оптимизированно, не складывая все планировки по отдельности...
 
Цитата
Александр Неугодников написал:
Но проблема в том что планировок в реале у меня более 60 (еще и объектов куча)
Это очень мало :)
В pbi какая-то жесть :) Мне лень переделывать все.
В вложении вариант, как должно быть организовано. В первом примере цена зависит от суммы количества квартир в таблице остатков. К примеру, повторяются строки с одинаковыми квартирами от разных продавцов.
Одна мера для расчета:
Скрытый текст

Если в остатках варианты квартир не повторяются в разных строках, то еще проще (второй вариант во вложении)
Мера:
Скрытый текст

файлы удалены: превышение допустимого размера вложения [МОДЕРАТОР]
upd: загрузил архивы файлов. С моделью данных файлы всегда жирнеют :)
Изменено: surkenny - 22.01.2022 13:03:34
 
Александр Неугодников, Вам не подошло что ли? :)
 
Спасибо вам за идею! Немного изменил меру под себя и на маленьком простом примере все работает идеально! Но на реальной модели, не отрабатывает как надо, все время берет цену самую последнюю по списку... В реальной модели у меня остаток по факту получается их другой таблицы с фильтрами еще из других связанных таблиц, может в этом дело, буду разбираться...
Страницы: 1
Наверх