monstr_ork
Дата: Вторник, 25.06.2019, 15:58 |
Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация:
0
±
Замечаний:
0% ±
Excel 2016
Привет форумчане! Подскажите, пожалуйста, можно ли сделать накопительный итог в Power Pivot/ Power Query и как? Суть такая, у у меня есть показатели за каждый час, мне нужен столбец, где они будут складываться с увеличением на каждый час/день/месяц.
Привет форумчане! Подскажите, пожалуйста, можно ли сделать накопительный итог в Power Pivot/ Power Query и как? Суть такая, у у меня есть показатели за каждый час, мне нужен столбец, где они будут складываться с увеличением на каждый час/день/месяц. monstr_ork
Ответить
Сообщение Привет форумчане! Подскажите, пожалуйста, можно ли сделать накопительный итог в Power Pivot/ Power Query и как? Суть такая, у у меня есть показатели за каждый час, мне нужен столбец, где они будут складываться с увеличением на каждый час/день/месяц. Автор - monstr_ork Дата добавления - 25.06.2019 в 15:58
krosav4ig
Дата: Вторник, 25.06.2019, 22:51 |
Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
Добрый вечер [vba]Код
let Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"День", type date},{"Час", type time}}), Filter = Table.SelectRows(Source,each [#"Накопительный Т_1 (час)"]<>null), Filter1 = Table.SelectRows(Source, each [#"Накопительный Т_1 (час)"]=null)[[День],[Час],[T_1],[N_1]], GroupByDate = Table.Group(Filter1, {"День"}, {{"", each _, type table}, {"b", each List.Sum([T_1]), type number},{"c", each List.Count([T_1]), type number}}), fn = (a,b,s) => let a = ((a) => List.Buffer(List.Accumulate(List.Positions(a),{},(b,c)=>b&{(try b{c-1} otherwise 0)+a{c}})))(List.Buffer(a)) in Table.AddColumn(Table.AddIndexColumn(b, "i", 0, 1),s,each a{[i]}), fn1 = (_) => let Record = Record.RenameFields(Cumulatively{[День=[День]{0}]},{{"","a"}}), ForHour = fn(Record[a][T_1],Record[a],"Накопительный Т_1 (час)"), ForDay = Table.AddColumn(ForHour, "Накопительный Т_1 (День)", each if [i]+1=Record[c] then Record[d] else null) in Table.RemoveColumns(ForDay,{"i","День"}), Cumulatively = fn(GroupByDate[b],GroupByDate,"d"), Cumulatively1 = Table.RemoveColumns(Table.TransformColumns(Cumulatively,{"",fn1}), {"b","c","d","i"}), Expand = Table.ExpandTableColumn(Cumulatively1, "", {"Час", "T_1", "N_1", "Накопительный Т_1 (час)", "Накопительный Т_1 (День)"}) in if Table.RowCount(Filter1)>0 then Table.Combine({Filter,Expand}) else Source
[/vba]
Добрый вечер [vba]Код
let Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"День", type date},{"Час", type time}}), Filter = Table.SelectRows(Source,each [#"Накопительный Т_1 (час)"]<>null), Filter1 = Table.SelectRows(Source, each [#"Накопительный Т_1 (час)"]=null)[[День],[Час],[T_1],[N_1]], GroupByDate = Table.Group(Filter1, {"День"}, {{"", each _, type table}, {"b", each List.Sum([T_1]), type number},{"c", each List.Count([T_1]), type number}}), fn = (a,b,s) => let a = ((a) => List.Buffer(List.Accumulate(List.Positions(a),{},(b,c)=>b&{(try b{c-1} otherwise 0)+a{c}})))(List.Buffer(a)) in Table.AddColumn(Table.AddIndexColumn(b, "i", 0, 1),s,each a{[i]}), fn1 = (_) => let Record = Record.RenameFields(Cumulatively{[День=[День]{0}]},{{"","a"}}), ForHour = fn(Record[a][T_1],Record[a],"Накопительный Т_1 (час)"), ForDay = Table.AddColumn(ForHour, "Накопительный Т_1 (День)", each if [i]+1=Record[c] then Record[d] else null) in Table.RemoveColumns(ForDay,{"i","День"}), Cumulatively = fn(GroupByDate[b],GroupByDate,"d"), Cumulatively1 = Table.RemoveColumns(Table.TransformColumns(Cumulatively,{"",fn1}), {"b","c","d","i"}), Expand = Table.ExpandTableColumn(Cumulatively1, "", {"Час", "T_1", "N_1", "Накопительный Т_1 (час)", "Накопительный Т_1 (День)"}) in if Table.RowCount(Filter1)>0 then Table.Combine({Filter,Expand}) else Source
[/vba] krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Ответить
Сообщение Добрый вечер [vba]Код
let Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"День", type date},{"Час", type time}}), Filter = Table.SelectRows(Source,each [#"Накопительный Т_1 (час)"]<>null), Filter1 = Table.SelectRows(Source, each [#"Накопительный Т_1 (час)"]=null)[[День],[Час],[T_1],[N_1]], GroupByDate = Table.Group(Filter1, {"День"}, {{"", each _, type table}, {"b", each List.Sum([T_1]), type number},{"c", each List.Count([T_1]), type number}}), fn = (a,b,s) => let a = ((a) => List.Buffer(List.Accumulate(List.Positions(a),{},(b,c)=>b&{(try b{c-1} otherwise 0)+a{c}})))(List.Buffer(a)) in Table.AddColumn(Table.AddIndexColumn(b, "i", 0, 1),s,each a{[i]}), fn1 = (_) => let Record = Record.RenameFields(Cumulatively{[День=[День]{0}]},{{"","a"}}), ForHour = fn(Record[a][T_1],Record[a],"Накопительный Т_1 (час)"), ForDay = Table.AddColumn(ForHour, "Накопительный Т_1 (День)", each if [i]+1=Record[c] then Record[d] else null) in Table.RemoveColumns(ForDay,{"i","День"}), Cumulatively = fn(GroupByDate[b],GroupByDate,"d"), Cumulatively1 = Table.RemoveColumns(Table.TransformColumns(Cumulatively,{"",fn1}), {"b","c","d","i"}), Expand = Table.ExpandTableColumn(Cumulatively1, "", {"Час", "T_1", "N_1", "Накопительный Т_1 (час)", "Накопительный Т_1 (День)"}) in if Table.RowCount(Filter1)>0 then Table.Combine({Filter,Expand}) else Source
[/vba] Автор - krosav4ig Дата добавления - 25.06.2019 в 22:51
krosav4ig
Дата: Среда, 26.06.2019, 20:20 |
Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
переписал запрос PQ [vba]Код
let Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"День", type date},{"Час", type time}}), Filter = Table.SelectRows(Source,each [#"Накопительный Т_1 (час)"]<>null), Filter1 = Table.SelectRows(Source, each [#"Накопительный Т_1 (час)"]=null)[[День],[Час],[T_1],[N_1]], GroupByDate = Table.Buffer(Table.Group(Filter1, {"День"}, {{"a", each _, type table},{"b",each List.Sum([T_1])}})), f1=(a) =>List.Buffer(List.Generate(()=>[i=0,v=a{0}],each [i] < List.Count(a),each [i=[i]+1,v=[v]+a{i}],each [v])), f2=(t)=>let rec = Cumulatively{[День=t[День]{0}]}, a = f1(List.Buffer(t[T_1])), b = List.Zip(List.Reverse(((a)=>List.Zip({a,{rec[b]}}))(List.Reverse(a)))), c = Table.FromColumns(Table.ToColumns(t)&b,Table.ColumnNames(Source)) in Table.RemoveColumns(c,{"День"}), Cumulatively = Table.FromColumns(List.RemoveLastN(Table.ToColumns(GroupByDate),1)&{f1(GroupByDate[b])},Table.ColumnNames(GroupByDate)), Cumulatively1 = Table.ExpandTableColumn(Table.TransformColumns(Cumulatively,{{"a",f2}}), "a", List.Skip(Table.ColumnNames(Source),1)) in if Table.RowCount(Filter1)>0 then Table.Combine({Filter,Table.RemoveColumns(Cumulatively1,{"b"})}) else Source
[/vba]
переписал запрос PQ [vba]Код
let Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"День", type date},{"Час", type time}}), Filter = Table.SelectRows(Source,each [#"Накопительный Т_1 (час)"]<>null), Filter1 = Table.SelectRows(Source, each [#"Накопительный Т_1 (час)"]=null)[[День],[Час],[T_1],[N_1]], GroupByDate = Table.Buffer(Table.Group(Filter1, {"День"}, {{"a", each _, type table},{"b",each List.Sum([T_1])}})), f1=(a) =>List.Buffer(List.Generate(()=>[i=0,v=a{0}],each [i] < List.Count(a),each [i=[i]+1,v=[v]+a{i}],each [v])), f2=(t)=>let rec = Cumulatively{[День=t[День]{0}]}, a = f1(List.Buffer(t[T_1])), b = List.Zip(List.Reverse(((a)=>List.Zip({a,{rec[b]}}))(List.Reverse(a)))), c = Table.FromColumns(Table.ToColumns(t)&b,Table.ColumnNames(Source)) in Table.RemoveColumns(c,{"День"}), Cumulatively = Table.FromColumns(List.RemoveLastN(Table.ToColumns(GroupByDate),1)&{f1(GroupByDate[b])},Table.ColumnNames(GroupByDate)), Cumulatively1 = Table.ExpandTableColumn(Table.TransformColumns(Cumulatively,{{"a",f2}}), "a", List.Skip(Table.ColumnNames(Source),1)) in if Table.RowCount(Filter1)>0 then Table.Combine({Filter,Table.RemoveColumns(Cumulatively1,{"b"})}) else Source
[/vba] krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Сообщение отредактировал krosav4ig - Среда, 26.06.2019, 20:31
Ответить
Сообщение переписал запрос PQ [vba]Код
let Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"День", type date},{"Час", type time}}), Filter = Table.SelectRows(Source,each [#"Накопительный Т_1 (час)"]<>null), Filter1 = Table.SelectRows(Source, each [#"Накопительный Т_1 (час)"]=null)[[День],[Час],[T_1],[N_1]], GroupByDate = Table.Buffer(Table.Group(Filter1, {"День"}, {{"a", each _, type table},{"b",each List.Sum([T_1])}})), f1=(a) =>List.Buffer(List.Generate(()=>[i=0,v=a{0}],each [i] < List.Count(a),each [i=[i]+1,v=[v]+a{i}],each [v])), f2=(t)=>let rec = Cumulatively{[День=t[День]{0}]}, a = f1(List.Buffer(t[T_1])), b = List.Zip(List.Reverse(((a)=>List.Zip({a,{rec[b]}}))(List.Reverse(a)))), c = Table.FromColumns(Table.ToColumns(t)&b,Table.ColumnNames(Source)) in Table.RemoveColumns(c,{"День"}), Cumulatively = Table.FromColumns(List.RemoveLastN(Table.ToColumns(GroupByDate),1)&{f1(GroupByDate[b])},Table.ColumnNames(GroupByDate)), Cumulatively1 = Table.ExpandTableColumn(Table.TransformColumns(Cumulatively,{{"a",f2}}), "a", List.Skip(Table.ColumnNames(Source),1)) in if Table.RowCount(Filter1)>0 then Table.Combine({Filter,Table.RemoveColumns(Cumulatively1,{"b"})}) else Source
[/vba] Автор - krosav4ig Дата добавления - 26.06.2019 в 20:20