Страницы: 1
RSS
Power Query – перемножение двух статей из одной таблицы
 

Добрый день. Подскажите пожалуйста, можно ли решить такую задачу – в самом начале на листе имеем сводную таблицу, которая на листе не одна, очищается, транспонируется и т.д. и в итоге имеем плоскую таблицу, которая в приложении. Далее хотел сделать из запроса функцию, потому что планировал обрабатывать несколько файлов из папки.

Все бы хорошо, если бы не один нюанс – переменные затраты в таблице отображаются не как общая сума, а как затраты на 1 рубль продаж, т.е. чтобы получить их суму необходимо значение умножить на суму продаж по каждому периоду, как по плану, так и по факту. Все другие статьи отображаются корректно. Задача – сделать чтобы все статьи отображались по суме в каждом периоде, т.е. необходимо только переменные затраты перемножить на продажи.

В целом задачу то можно решить, сделав отдельный запрос, где выбрать только продажи и переменные затраты, перемножить их и потом добавить вниз запроса, но очень хотелось бы узнать есть ли возможность более элегантно решить данную задачу.

Я понимаю, что как говориться вопрос со звездочкой, можно сделать все тупо и просто, но опять же было бы приятнее и для общего развития очень полезно решить задачу красиво.

Прошу знатоков Power Query помощи, буду очень признателен.
 
del
Изменено: buchlotnik - 23.08.2021 17:37:02
Соблюдение правил форума не освобождает от модераторского произвола
 
В файле не указывал информацию по запросу, потому что там относительно много фильтров, транспонирования, заполнения вниз, unpivot и тд. Думал чтобы не смущало.
Что касается того что должно быть - все другие данные должны оставаться такими как и были, кроме переменных затрат - они должны быть перемножены на продажи по кажному месяцу, соответсвенно план и факт и (если не брать в учет другие статьи, их отфильтровал) результат по переменным должен быть следующим:

Уровень1Уровень2Уровень3Уровень4ТочкаМесяцПлан/ФактЗначение
Переменные затратыПеременные затратыЗакупкиЗакупки товараТочка101.07.2020План5961,5
Переменные   затратыПеременные затратыЗакупкиЗакупки товараТочка101.07.2020Факт6692,22
Переменные затратыПеременные затратыЗакупкиЗакупки товараТочка201.07.2020План6964,64
Переменные   затратыПеременные затратыЗакупкиЗакупки товараТочка201.07.2020Факт15596,48
Переменные затратыПеременные затратыЗакупкиЗакупки товараТочка301.07.2020План9867,96
Переменные   затратыПеременные затратыЗакупкиЗакупки товараТочка301.07.2020Факт15189,16
Переменные затратыПеременные затратыЗакупкиЗакупки товараТочка101.08.2020План5961,5
Переменные   затратыПеременные затратыЗакупкиЗакупки товараТочка101.08.2020Факт6045,06
Переменные затратыПеременные затратыЗакупкиЗакупки товараТочка201.08.2020План6781,36
Переменные   затратыПеременные затратыЗакупкиЗакупки товараТочка201.08.2020Факт12309,96
Переменные затратыПеременные затратыЗакупкиЗакупки товараТочка301.08.2020План9867,96
Переменные   затратыПеременные затратыЗакупкиЗакупки товараТочка301.08.2020Факт7402,98
Сейчас просмотрю Ваш результат, buchlotnik, заранее спасибо!
 
del
Изменено: buchlotnik - 23.08.2021 17:36:50
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, скажите пожалуйста, Вы перемножаете продажи со всеми статьями, а можно ли перемножать только Продажи и Переменные затраты?
 
Цитата
jelaris8 написал:
а можно ли
Цитата
buchlotnik написал:
тогда так
Изменено: buchlotnik - 13.02.2021 22:13:42
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, я прошу прощения, Вы забыли вложить файл / код.
 
Цитата
jelaris8 написал:
Вы забыли вложить файл
??? однако... сообщение №4 видимо содержит эфемерную сущность, а не файл...
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, извините просмотрел.
Да, все получилось. Спасибо Вам большое! Очень круто!
 
buchlotnik, подскажите пожалуйста еще по одному моменту - если нужно будет "Переменные затраты" перемножать на столбец продажи только тогда когда значение столбца "План/Факт" будет равно "Факт"?

Я пробовал поменять функцию и добавить выделенное:

b=Table.AddColumn(x,"Значение_",each if [Уровень1]="Переменные затраты" and [План/Факт]="Факт" then a*[Значение] else [Значение]),

но визникает ошибка - Неприпустимый идентификатор.

Как это исправить?
 
if [Уровень1]="Переменные затраты" and [#"План/Факт"]
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,  если я добавляю # то я буду обращаться к одному из пунктов запроса а мне нужно проверять значение другого столбца.
 
 
Цитата
jelaris8 написал:
если я добавляю # то я буду обращаться к одному из пунктов запроса
8-0  это как, если у Вас четко обозначено скобками, что обращение к полю? А если не добавите - то вообще к этому полю не обратитесь. Потому что этот знак означает, что в кавычках после него идет обращение к полю или запросу со спец.символами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, получилось, спасибо большое. Смутило то что когда ввел # в выпадающем списке появлялись только имена пунктов запроса (полей не было) и то что в начале столбец "Уровень1" был указан без  #, просто [Уровень1].
 
Цитата
jelaris8 написал:
то что в начале столбец "Уровень1" был указан без  #, просто [Уровень1]
ну тут как бы...матчасть :) Уровень1 - не содержит каких-то спец.символов(вроде пробела, слеша, точек с запятыми и т.п.). А если бы содержал - то и его надо было бы заключать в кавычки и добавлять решетку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, спасибо!
 
Уважаемый buchlotnik, можете объяснить чайнику некоторые хитрости вашего кода?

в начале, в описании функции,когда появляется переменная "С" -  не понял это что?
и в конце где GroupKind.Local,(s,c) - синтаксис этого оператора, или это функция?


Код
let
    f=(x)=>[    a=x{0}[Значение],
                b=Table.AddColumn(x,"Значение_",each if [Уровень1]="Переменные затраты" then a*[Значение] else [Значение]),
                c=Table.RemoveColumns(b,"Значение")][c],
     
    from = Excel.CurrentWorkbook(){[Name="Таблиця1"]}[Content],
    group = Table.Group(from, "Уровень1", {"tmp", f},GroupKind.Local,(s,c)=>Number.From(c="Продажи")),
    to = Table.Combine(group[tmp])
in
    to
 
del
Изменено: buchlotnik - 23.08.2021 15:30:26
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх