Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Накопительный итог в Power Pivot/ Power Query - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Накопительный итог в Power Pivot/ Power Query (Формулы/Formulas)
Накопительный итог в Power Pivot/ Power Query
monstr_ork Дата: Вторник, 25.06.2019, 15:58 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Привет форумчане!
Подскажите, пожалуйста, можно ли сделать накопительный итог в Power Pivot/ Power Query и как?
Суть такая, у у меня есть показатели за каждый час, мне нужен столбец, где они будут складываться с увеличением на каждый час/день/месяц.
К сообщению приложен файл: Primer.xlsx (12.2 Kb)
 
Ответить
СообщениеПривет форумчане!
Подскажите, пожалуйста, можно ли сделать накопительный итог в 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]
К сообщению приложен файл: 8485152.xlsx (21.6 Kb)


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, 01:38 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
DAX
К сообщению приложен файл: Primer.zip (74.9 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеDAX

Автор - krosav4ig
Дата добавления - 26.06.2019 в 01:38
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]


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
monstr_ork Дата: Среда, 26.06.2019, 22:02 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig, большое спасибо за помощь, если не сложно можете перезалить файл с DAX формулами, а то он поврежден?
И так же будет одна просьба, если можно оставить комментарии к запросу PQ.
 
Ответить
Сообщениеkrosav4ig, большое спасибо за помощь, если не сложно можете перезалить файл с DAX формулами, а то он поврежден?
И так же будет одна просьба, если можно оставить комментарии к запросу PQ.

Автор - monstr_ork
Дата добавления - 26.06.2019 в 22:02
krosav4ig Дата: Среда, 26.06.2019, 23:45 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
monstr_ork, скачал, проверил, файл из архива нормально открывается. Паковал в LZMA, видимо у вас архиватор нужно обновить.
Перепаковал в Deflate
К сообщению приложен файл: Primer1.zip (78.7 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеmonstr_ork, скачал, проверил, файл из архива нормально открывается. Паковал в LZMA, видимо у вас архиватор нужно обновить.
Перепаковал в Deflate

Автор - krosav4ig
Дата добавления - 26.06.2019 в 23:45
monstr_ork Дата: Четверг, 27.06.2019, 05:51 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 133
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
krosav4ig, да, теперь открылось.
Вопрос решен.
 
Ответить
Сообщениеkrosav4ig, да, теперь открылось.
Вопрос решен.

Автор - monstr_ork
Дата добавления - 27.06.2019 в 05:51
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Накопительный итог в Power Pivot/ Power Query (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!