Как получить начальный баланс по первой записи с учетом накопленного баланса в силовом запросе - PullRequest
0 голосов
/ 19 февраля 2020

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

  • Компонент | Тип | Дата | AccumulateBalance
  • A | ПО | 31 января | 240
  • A | ПО | 1 февраля | 240
  • B | ПО | 28 января | 300
  • B | ПО | 29 января | 300
  • A | SO | 31 января | 100
  • A | SO | 1 февраля | 100

Мне нужно рассчитать первый начальный баланс, учитывая только накопленный баланс, и он сбрасывается по Компонент + Тип

  • Компонент | Тип | Дата | OpenBalance
  • A | ПО | 31 января | 240
  • A | ПО | 1 февраля | 0
  • B | ПО | 28 января | 300
  • B | ПО | 29 января | 0
  • A | SO | 31 января | 100
  • A | SO | 1 февраля | 0

Буду очень признателен за любую помощь или совет!

Спасибо, Андреа

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете использовать немного пользовательского кода PowerQuery, вставленного в home ... расширенный редактор ...

Если данные загружены в Table1, в третьей строке будет добавлен столбец, который является минимальной датой для всех строки с соответствующими Компонентом и Типом. Затем четвертая строка проверяет, совпадает ли дата текущей строки с минимальной; если это так, он показывает баланс, в противном случае ноль

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Component", type text}, {"Type", type text}, {"Date", type date}, {"AccumulateBalance", Int64.Type}}),
AddMinDateColumn = Table.AddColumn(#"Changed Type", "Earliest Date", (thisrow) => List.Min(Table.SelectRows(#"Changed Type", each [Component] = thisrow[Component] and [Type] = thisrow[Type])[Date]), type date),
#"Added Custom" = Table.AddColumn(AddMinDateColumn, "OpenBalance", each if [Date]=[Earliest Date] then [AccumulateBalance] else 0)
in #"Added Custom"

. Другой способ состоит в том, чтобы выбрать столбцы Компонент и Тип и сгруппировать их, используя минимум столбца Date и AllRows. Если вы развернете столбец AccumulateBalance и удалите дубликаты, это даст вам таблицу минимальных дат и их значений. Затем вы можете объединить его обратно в исходное сопоставление таблиц по Компоненту, Типу и Дате и развернуть поле Баланс. Пример ниже, который можно вставить в Home ... расширенный редактор ... Предполагается, что данные загружаются в Table1

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Component", type text}, {"Type", type text}, {"Date", type date}, {"AccumulateBalance", Int64.Type}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Component", "Type"}, {{"MinDate", each List.Min([Date]), type date}, {"Data", each _, type table}}),
#"Expanded Data" = Table.ExpandTableColumn(#"Grouped Rows", "Data", {"AccumulateBalance"}, {"Data.AccumulateBalance"}),
Table2= Table.Distinct(#"Expanded Data"),
#"Merged Queries" = Table.NestedJoin(#"Changed Type",{"Component", "Type", "Date"},Table2,{"Component", "Type", "MinDate"},"Table2",JoinKind.LeftOuter),
#"Expanded Table2" = Table.ExpandTableColumn(#"Merged Queries", "Table2", {"Data.AccumulateBalance"}, {"OpeningBalance"})
in #"Expanded Table2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...