CUSTNAME DATE SALES
AAAA 2022-12-31 30
BBBB 2022-12-31 40
AAAA 2023-01-31 50
BBBB 2023-01-31 60
AAAA 2023-02-28 70
BBBB 2023-02-28 80
выше моя примерная таблица, и теперь я хочу создать один вычисляемый столбец, который будет иметь данные за предыдущий месяц на основе столбца CUSTNAME. Мне нужно получить результат ниже желаемого.
CUSTNAME DATE SALES PERMDATA
AAAA 2022-12-31 30 NULL
BBBB 2022-12-31 40 NULL
AAAA 2023-01-31 50 30
BBBB 2023-01-31 60 40
AAAA 2023-02-28 70 50
BBBB 2023-02-28 80 60
Пожалуйста помоги мне с этим.
Если вы ищете решение на базе DAX:
PreviousMonthSales = CALCULATE(SUM(YourTableName[Sales]),PREVIOUSMONTH(YourTableName[Date]))
Вот пара способов в M
Слияние поверх себя. Вероятно, самый быстрый для большого набора данных:
let Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
#"Changed Type" = Table.TransformColumnTypes(#"Added Index",{{"CUSTNAME", type text}, {"DATE", type date}, {"SALES", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "LASTDATE", each Date.AddDays(Date.StartOfMonth([DATE]),-1)),
#"Merged Queries" = Table.NestedJoin(#"Added Custom", {"CUSTNAME", "LASTDATE"}, #"Added Custom", {"CUSTNAME", "DATE"}, "Added Custom", JoinKind.LeftOuter),
#"Expanded Added Custom" = Table.ExpandTableColumn(#"Merged Queries", "Added Custom", {"SALES"}, {"PERMDATA"}),
#"Sorted Rows" = Table.Sort(#"Expanded Added Custom",{{"Index", Order.Ascending}}),
#"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index", "LASTDATE"})
in #"Removed Columns"
Пользовательский столбец, вытягивающий совпадение для каждой строки. Самый маленький. Самый медленный:
let Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"CUSTNAME", type text}, {"DATE", type date}, {"SALES", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type","PERMDATA",(x)=>try Table.SelectRows(#"Changed Type", each [CUSTNAME]=x[CUSTNAME] and [DATE]=Date.AddDays(Date.StartOfMonth(x[DATE]),-1)) [SALES]{0} otherwise null ,type number)
in #"Added Custom"
Группировать и сдвигать ряд. Вероятно, между ними по скорости:
let Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"DATE", type date}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
#"Grouped Rows" = Table.Group(#"Added Index", {"CUSTNAME"}, {{"data", each
let a = Table.Sort(_,{{"DATE", Order.Ascending}}),
shiftedList = {null} & List.RemoveLastN(a[SALES],1),
custom1 = Table.ToColumns(a) & {shiftedList}
in Table.FromColumns(custom1,Table.ColumnNames(a) & {"PERMDATA"})
, type table }}),
#"Expanded data" = Table.ExpandTableColumn(#"Grouped Rows", "data", {"DATE", "SALES", "PERMDATA","Index"}, {"DATE", "SALES", "PERMDATA","Index"}),
#"Sorted Rows" = Table.Sort(#"Expanded data",{{"Index", Order.Ascending}}),
#"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"})
in #"Removed Columns"
В соответствии с общими правилами этого форума отредактируйте свой вопрос, чтобы показать, что вы пробовали, и где именно вам нужна помощь. Кроме того, уточните, ищете ли вы решение в Power BI (DAX) или Power Query, поскольку вы пометили оба.