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

Вход

Регистрация

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

 

= Мир MS Excel/Аналог FORECAST в Power Query - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Аналог FORECAST в Power Query (Microsoft Query)
Аналог FORECAST в Power Query
semenizer87 Дата: Среда, 03.02.2021, 21:09 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Добрый день, уважаемые форумчане. Подскажите, а то нигде не нашел на просторах интернета, есть ли аналог функции FORECAST (ПРЕДСКАЗ) для Power Query?


Сообщение отредактировал Serge_007 - Четверг, 04.02.2021, 09:35
 
Ответить
СообщениеДобрый день, уважаемые форумчане. Подскажите, а то нигде не нашел на просторах интернета, есть ли аналог функции FORECAST (ПРЕДСКАЗ) для Power Query?

Автор - semenizer87
Дата добавления - 03.02.2021 в 21:09
semenizer87 Дата: Среда, 03.02.2021, 21:12 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Если бы формула была в Excel, то имела бы следующий вид:
Код
=FORECAST(H39,$O$1:$O$1000,H1:H1000)
. При этом, учитывая несколько сегментов, итоговый поиск бы был в массиве
Код
=FORECAST(H39,$O$39:$O$45,H39:H45)


Сообщение отредактировал semenizer87 - Четверг, 04.02.2021, 11:16
 
Ответить
СообщениеЕсли бы формула была в Excel, то имела бы следующий вид:
Код
=FORECAST(H39,$O$1:$O$1000,H1:H1000)
. При этом, учитывая несколько сегментов, итоговый поиск бы был в массиве
Код
=FORECAST(H39,$O$39:$O$45,H39:H45)

Автор - semenizer87
Дата добавления - 03.02.2021 в 21:12
прохожий2019 Дата: Среда, 03.02.2021, 22:51 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
есть ли аналог функции
штатного нет, можно написать, линейный случай несложный, просто на формулах делается (в лоб и без оптимизации):
[vba]
Код
(z,y,x)=>
let
    a = List.Zip({x,y}),
    b = List.Accumulate(a,
                        [   n=0,
                            x=0,
                            x2=0,
                            y=0,
                            xy=0],
                        (s,c)=>[    n=s[n]+1,
                    x=s[x]+c{0},
                    x2=s[x2]+c{0}*c{0},
                    y=s[y]+c{1},
                    xy=s[xy]+c{0}*c{1}
                    ]
                        ),
    c = [   
            i = (b[n]*b[xy]-b[x]*b[y])/(b[n]*b[x2]-b[x]*b[x]),
            j = (b[y]-i*b[x])/b[n]
        ],
    d = c[j]+c[i]*z
in
    d
[/vba]


Сообщение отредактировал прохожий2019 - Среда, 03.02.2021, 23:18
 
Ответить
Сообщение
есть ли аналог функции
штатного нет, можно написать, линейный случай несложный, просто на формулах делается (в лоб и без оптимизации):
[vba]
Код
(z,y,x)=>
let
    a = List.Zip({x,y}),
    b = List.Accumulate(a,
                        [   n=0,
                            x=0,
                            x2=0,
                            y=0,
                            xy=0],
                        (s,c)=>[    n=s[n]+1,
                    x=s[x]+c{0},
                    x2=s[x2]+c{0}*c{0},
                    y=s[y]+c{1},
                    xy=s[xy]+c{0}*c{1}
                    ]
                        ),
    c = [   
            i = (b[n]*b[xy]-b[x]*b[y])/(b[n]*b[x2]-b[x]*b[x]),
            j = (b[y]-i*b[x])/b[n]
        ],
    d = c[j]+c[i]*z
in
    d
[/vba]

Автор - прохожий2019
Дата добавления - 03.02.2021 в 22:51
semenizer87 Дата: Среда, 03.02.2021, 23:26 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Цитата прохожий2019, 03.02.2021 в 22:51, в сообщении № 3 ()
случай несложный

особенно для человека, никогда не сталкивающегося с программированием))) спасибо за подсказку, попробую ее теперь применить.
 
Ответить
Сообщение
Цитата прохожий2019, 03.02.2021 в 22:51, в сообщении № 3 ()
случай несложный

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

Автор - semenizer87
Дата добавления - 03.02.2021 в 23:26
прохожий2019 Дата: Среда, 03.02.2021, 23:28 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
никогда не сталкивающегося с программированием
программирование тут причём? это математика первого курса
 
Ответить
Сообщение
никогда не сталкивающегося с программированием
программирование тут причём? это математика первого курса

Автор - прохожий2019
Дата добавления - 03.02.2021 в 23:28
semenizer87 Дата: Среда, 03.02.2021, 23:43 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Что такое регрессия, я представляю, непонятно только куда такие коды вставлять. В PQ я все выполняю пошагово, и все более-менее интуитивно понятно. Когда же залезаю в расширенный редактор, то увы-увы... Можете подсказать, куда нужно вставить Ваш скрипт, если необходимо в моем скрипте соотнести колонку "EBITDA маржа’21" с колонкой "Average Шкала".

[vba]
Код
let
Source = Excel.CurrentWorkbook(){[Name="Issuers"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Name", type text}, {"[b]EBITDA маржа’21[/b]", type any}, {"EBITDA маржа’22", type any}, {"EBITDA маржа’23", type any}, {"Чистый долг/ EBITDA’21", type any}, {"Чистый долг/ EBITDA’22", type any}, {"Чистый долг/ EBITDA’23", type any}, {"Дох-ть СДП’21", type any}, {"Дох-ть СДП’22", type any}, {"Дох-ть СДП’23", type any}, {"Страна", type text}, {"Sub-industry", type text}, {"Z spread", type any}, {"S&P", type any}, {"Moody`s", type any}, {"Fitch", type any}}),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type", {{"EBITDA маржа’21", 0}, {"EBITDA маржа’22", 0}, {"EBITDA маржа’23", 0}, {"Дох-ть СДП’21", 0}, {"Дох-ть СДП’22", 0}, {"Дох-ть СДП’23", 0}, {"Чистый долг/ EBITDA’21", 10000}, {"Чистый долг/ EBITDA’22", 10000}, {"Чистый долг/ EBITDA’23", 10000}, {"Z spread", null}, {"S&P", null}, {"Moody`s", null}, {"Fitch", null}}),
#"Merged Queries" = Table.NestedJoin(#"Replaced Errors",{"ID"},Segment,{"ID"},"Segment",JoinKind.LeftOuter),
#"Expanded Segment" = Table.ExpandTableColumn(#"Merged Queries", "Segment", {"Segment"}, {"Segment"}),
#"Merged Queries1" = Table.NestedJoin(#"Expanded Segment",{"S&P"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
#"Expanded Rating" = Table.ExpandTableColumn(#"Merged Queries1", "Rating", {"Шкала"}, {"Шкала S"}),
#"Merged Queries2" = Table.NestedJoin(#"Expanded Rating",{"Moody`s"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
#"Expanded Rating1" = Table.ExpandTableColumn(#"Merged Queries2", "Rating", {"Шкала"}, {"Шкала M"}),
#"Merged Queries3" = Table.NestedJoin(#"Expanded Rating1",{"Fitch"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
#"Expanded Rating2" = Table.ExpandTableColumn(#"Merged Queries3", "Rating", {"Шкала"}, {"Шкала F"}),
#"Inserted Average" = Table.AddColumn(#"Expanded Rating2", "Average Шкала", each List.Average({[Шкала S], [Шкала M], [Шкала F]})),
#"Changed Type1" = Table.TransformColumnTypes(#"Inserted Average",{{"[b]Average Шкала[/b]", Int64.Type}})
in
#"Changed Type1"
[/vba]


Сообщение отредактировал semenizer87 - Четверг, 04.02.2021, 11:18
 
Ответить
СообщениеЧто такое регрессия, я представляю, непонятно только куда такие коды вставлять. В PQ я все выполняю пошагово, и все более-менее интуитивно понятно. Когда же залезаю в расширенный редактор, то увы-увы... Можете подсказать, куда нужно вставить Ваш скрипт, если необходимо в моем скрипте соотнести колонку "EBITDA маржа’21" с колонкой "Average Шкала".

[vba]
Код
let
Source = Excel.CurrentWorkbook(){[Name="Issuers"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Name", type text}, {"[b]EBITDA маржа’21[/b]", type any}, {"EBITDA маржа’22", type any}, {"EBITDA маржа’23", type any}, {"Чистый долг/ EBITDA’21", type any}, {"Чистый долг/ EBITDA’22", type any}, {"Чистый долг/ EBITDA’23", type any}, {"Дох-ть СДП’21", type any}, {"Дох-ть СДП’22", type any}, {"Дох-ть СДП’23", type any}, {"Страна", type text}, {"Sub-industry", type text}, {"Z spread", type any}, {"S&P", type any}, {"Moody`s", type any}, {"Fitch", type any}}),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type", {{"EBITDA маржа’21", 0}, {"EBITDA маржа’22", 0}, {"EBITDA маржа’23", 0}, {"Дох-ть СДП’21", 0}, {"Дох-ть СДП’22", 0}, {"Дох-ть СДП’23", 0}, {"Чистый долг/ EBITDA’21", 10000}, {"Чистый долг/ EBITDA’22", 10000}, {"Чистый долг/ EBITDA’23", 10000}, {"Z spread", null}, {"S&P", null}, {"Moody`s", null}, {"Fitch", null}}),
#"Merged Queries" = Table.NestedJoin(#"Replaced Errors",{"ID"},Segment,{"ID"},"Segment",JoinKind.LeftOuter),
#"Expanded Segment" = Table.ExpandTableColumn(#"Merged Queries", "Segment", {"Segment"}, {"Segment"}),
#"Merged Queries1" = Table.NestedJoin(#"Expanded Segment",{"S&P"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
#"Expanded Rating" = Table.ExpandTableColumn(#"Merged Queries1", "Rating", {"Шкала"}, {"Шкала S"}),
#"Merged Queries2" = Table.NestedJoin(#"Expanded Rating",{"Moody`s"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
#"Expanded Rating1" = Table.ExpandTableColumn(#"Merged Queries2", "Rating", {"Шкала"}, {"Шкала M"}),
#"Merged Queries3" = Table.NestedJoin(#"Expanded Rating1",{"Fitch"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
#"Expanded Rating2" = Table.ExpandTableColumn(#"Merged Queries3", "Rating", {"Шкала"}, {"Шкала F"}),
#"Inserted Average" = Table.AddColumn(#"Expanded Rating2", "Average Шкала", each List.Average({[Шкала S], [Шкала M], [Шкала F]})),
#"Changed Type1" = Table.TransformColumnTypes(#"Inserted Average",{{"[b]Average Шкала[/b]", Int64.Type}})
in
#"Changed Type1"
[/vba]

Автор - semenizer87
Дата добавления - 03.02.2021 в 23:43
прохожий2019 Дата: Среда, 03.02.2021, 23:49 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
непонятно только куда такие коды вставлять
вставляют их в файл, который вы не показали
 
Ответить
Сообщение
непонятно только куда такие коды вставлять
вставляют их в файл, который вы не показали

Автор - прохожий2019
Дата добавления - 03.02.2021 в 23:49
semenizer87 Дата: Четверг, 04.02.2021, 00:13 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Файл прилагается
К сообщению приложен файл: Comps.xls (231.5 Kb)
 
Ответить
СообщениеФайл прилагается

Автор - semenizer87
Дата добавления - 04.02.2021 в 00:13
прохожий2019 Дата: Четверг, 04.02.2021, 09:35 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
Файл прилагается
в файле куча запросов и совершенно не понятно что на основании чего вы хотите посчитать
 
Ответить
Сообщение
Файл прилагается
в файле куча запросов и совершенно не понятно что на основании чего вы хотите посчитать

Автор - прохожий2019
Дата добавления - 04.02.2021 в 09:35
semenizer87 Дата: Четверг, 04.02.2021, 11:15 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
В файле запрос Issuers, в котором хочу воспользоваться вашим скриптом, соотнеся колонку "EBITDA маржа’21" с колонкой "Average Шкала". Таким образом, новая колонка будет иметь значения от 1 до 21.
 
Ответить
СообщениеВ файле запрос Issuers, в котором хочу воспользоваться вашим скриптом, соотнеся колонку "EBITDA маржа’21" с колонкой "Average Шкала". Таким образом, новая колонка будет иметь значения от 1 до 21.

Автор - semenizer87
Дата добавления - 04.02.2021 в 11:15
прохожий2019 Дата: Четверг, 04.02.2021, 12:04 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
В PQ я все выполняю пошагово
завязывайте с этим, это как минимум неинтересно, а как максимум неэффективно
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Issuers"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Name", type text}, {"EBITDA маржа’21", type any}, {"EBITDA маржа’22", type any}, {"EBITDA маржа’23", type any}, {"Чистый долг/ EBITDA’21", type any}, {"Чистый долг/ EBITDA’22", type any}, {"Чистый долг/ EBITDA’23", type any}, {"Дох-ть СДП’21", type any}, {"Дох-ть СДП’22", type any}, {"Дох-ть СДП’23", type any}, {"Страна", type text}, {"Sub-industry", type text}, {"Z spread", type any}, {"S&P", type any}, {"Moody`s", type any}, {"Fitch", type any}}),
    #"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type", {{"EBITDA маржа’21", 0}, {"EBITDA маржа’22", 0}, {"EBITDA маржа’23", 0}, {"Дох-ть СДП’21", 0}, {"Дох-ть СДП’22", 0}, {"Дох-ть СДП’23", 0}, {"Чистый долг/ EBITDA’21", 10000}, {"Чистый долг/ EBITDA’22", 10000}, {"Чистый долг/ EBITDA’23", 10000}, {"Z spread", null}, {"S&P", null}, {"Moody`s", null}, {"Fitch", null}}),
    #"Merged Queries" = Table.NestedJoin(#"Replaced Errors",{"ID"},Segment,{"ID"},"Segment",JoinKind.LeftOuter),
    #"Expanded Segment" = Table.ExpandTableColumn(#"Merged Queries", "Segment", {"Segment"}, {"Segment"}),
    #"Merged Queries1" = Table.NestedJoin(#"Expanded Segment",{"S&P"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
    #"Expanded Rating" = Table.ExpandTableColumn(#"Merged Queries1", "Rating", {"Шкала"}, {"Шкала S"}),
    #"Merged Queries2" = Table.NestedJoin(#"Expanded Rating",{"Moody`s"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
    #"Expanded Rating1" = Table.ExpandTableColumn(#"Merged Queries2", "Rating", {"Шкала"}, {"Шкала M"}),
    #"Merged Queries3" = Table.NestedJoin(#"Expanded Rating1",{"Fitch"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
    #"Expanded Rating2" = Table.ExpandTableColumn(#"Merged Queries3", "Rating", {"Шкала"}, {"Шкала F"}),
    #"Inserted Average" = Table.AddColumn(#"Expanded Rating2", "Average Шкала", each List.Average({[Шкала S], [Шкала M], [Шкала F]})),
    ch = Table.TransformColumnTypes(#"Inserted Average",{{"Average Шкала", Int64.Type}}),
    a = List.Zip({ch[#"EBITDA маржа’21"],ch[#"Average Шкала"]}),
    b = List.Accumulate(a,[n=0,x=0,x2=0,y=0,xy=0],(s,c)=>[n=s[n]+1,x=s[x]+c{0},x2=s[x2]+c{0}*c{0},y=s[y]+c{1},xy=s[xy]+c{0}*c{1}]),
    c = [i=(b[n]*b[xy]-b[x]*b[y])/(b[n]*b[x2]-b[x]*b[x]),j=(b[y]-i*b[x])/b[n]],
    d = List.Buffer({c[j],c[i]}),
    f=(x)=> d{0}+d{1}*x,
    to = Table.AddColumn(ch,"Forecast",each f([#"EBITDA маржа’21"]))
in
    to
[/vba]
К сообщению приложен файл: 8476851.xls (244.5 Kb)
 
Ответить
Сообщение
В PQ я все выполняю пошагово
завязывайте с этим, это как минимум неинтересно, а как максимум неэффективно
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Issuers"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Name", type text}, {"EBITDA маржа’21", type any}, {"EBITDA маржа’22", type any}, {"EBITDA маржа’23", type any}, {"Чистый долг/ EBITDA’21", type any}, {"Чистый долг/ EBITDA’22", type any}, {"Чистый долг/ EBITDA’23", type any}, {"Дох-ть СДП’21", type any}, {"Дох-ть СДП’22", type any}, {"Дох-ть СДП’23", type any}, {"Страна", type text}, {"Sub-industry", type text}, {"Z spread", type any}, {"S&P", type any}, {"Moody`s", type any}, {"Fitch", type any}}),
    #"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type", {{"EBITDA маржа’21", 0}, {"EBITDA маржа’22", 0}, {"EBITDA маржа’23", 0}, {"Дох-ть СДП’21", 0}, {"Дох-ть СДП’22", 0}, {"Дох-ть СДП’23", 0}, {"Чистый долг/ EBITDA’21", 10000}, {"Чистый долг/ EBITDA’22", 10000}, {"Чистый долг/ EBITDA’23", 10000}, {"Z spread", null}, {"S&P", null}, {"Moody`s", null}, {"Fitch", null}}),
    #"Merged Queries" = Table.NestedJoin(#"Replaced Errors",{"ID"},Segment,{"ID"},"Segment",JoinKind.LeftOuter),
    #"Expanded Segment" = Table.ExpandTableColumn(#"Merged Queries", "Segment", {"Segment"}, {"Segment"}),
    #"Merged Queries1" = Table.NestedJoin(#"Expanded Segment",{"S&P"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
    #"Expanded Rating" = Table.ExpandTableColumn(#"Merged Queries1", "Rating", {"Шкала"}, {"Шкала S"}),
    #"Merged Queries2" = Table.NestedJoin(#"Expanded Rating",{"Moody`s"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
    #"Expanded Rating1" = Table.ExpandTableColumn(#"Merged Queries2", "Rating", {"Шкала"}, {"Шкала M"}),
    #"Merged Queries3" = Table.NestedJoin(#"Expanded Rating1",{"Fitch"},Rating,{"Rating"},"Rating",JoinKind.LeftOuter),
    #"Expanded Rating2" = Table.ExpandTableColumn(#"Merged Queries3", "Rating", {"Шкала"}, {"Шкала F"}),
    #"Inserted Average" = Table.AddColumn(#"Expanded Rating2", "Average Шкала", each List.Average({[Шкала S], [Шкала M], [Шкала F]})),
    ch = Table.TransformColumnTypes(#"Inserted Average",{{"Average Шкала", Int64.Type}}),
    a = List.Zip({ch[#"EBITDA маржа’21"],ch[#"Average Шкала"]}),
    b = List.Accumulate(a,[n=0,x=0,x2=0,y=0,xy=0],(s,c)=>[n=s[n]+1,x=s[x]+c{0},x2=s[x2]+c{0}*c{0},y=s[y]+c{1},xy=s[xy]+c{0}*c{1}]),
    c = [i=(b[n]*b[xy]-b[x]*b[y])/(b[n]*b[x2]-b[x]*b[x]),j=(b[y]-i*b[x])/b[n]],
    d = List.Buffer({c[j],c[i]}),
    f=(x)=> d{0}+d{1}*x,
    to = Table.AddColumn(ch,"Forecast",each f([#"EBITDA маржа’21"]))
in
    to
[/vba]

Автор - прохожий2019
Дата добавления - 04.02.2021 в 12:04
semenizer87 Дата: Четверг, 04.02.2021, 12:27 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Ваще крутяк!!! Спасибо огромное. А можно как-то модифицировать скрипт, чтобы Forecast выдавал значения на основании Segment? Имеется в виду аналог формулы Excel (см 2-ое сообщение).
Цитата прохожий2019, 04.02.2021 в 12:04, в сообщении № 11 ()
завязывайте с этим, это как минимум неинтересно, а как максимум неэффективно
да уж, это точно!
 
Ответить
СообщениеВаще крутяк!!! Спасибо огромное. А можно как-то модифицировать скрипт, чтобы Forecast выдавал значения на основании Segment? Имеется в виду аналог формулы Excel (см 2-ое сообщение).
Цитата прохожий2019, 04.02.2021 в 12:04, в сообщении № 11 ()
завязывайте с этим, это как минимум неинтересно, а как максимум неэффективно
да уж, это точно!

Автор - semenizer87
Дата добавления - 04.02.2021 в 12:27
прохожий2019 Дата: Четверг, 04.02.2021, 12:40 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
чтобы Forecast выдавал значения на основании Segment?
у вас большинству сегментов соответствует ОДНА строка - не нужно быть великим математиком, чтобы понять, что через одну точку можно провести бесконечное число прямых :)
а так да - группируете по сегменту и в каждой таблице отдельно добавляете столбец
 
Ответить
Сообщение
чтобы Forecast выдавал значения на основании Segment?
у вас большинству сегментов соответствует ОДНА строка - не нужно быть великим математиком, чтобы понять, что через одну точку можно провести бесконечное число прямых :)
а так да - группируете по сегменту и в каждой таблице отдельно добавляете столбец

Автор - прохожий2019
Дата добавления - 04.02.2021 в 12:40
semenizer87 Дата: Четверг, 04.02.2021, 12:44 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Понял, спасибо!
 
Ответить
СообщениеПонял, спасибо!

Автор - semenizer87
Дата добавления - 04.02.2021 в 12:44
semenizer87 Дата: Четверг, 04.02.2021, 14:17 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Небольшое уточнение. Я хочу сделать FORECAST для остальных 8 столбцов. Нужно ли для этого делать отдельные формулы (как у вас в несколько строк ch, a, b, c, d, f, to) или можно в них как-то зашить колонки начиная с EBITDA маржа`21 по чистый долг/EBITDA`23?
 
Ответить
СообщениеНебольшое уточнение. Я хочу сделать FORECAST для остальных 8 столбцов. Нужно ли для этого делать отдельные формулы (как у вас в несколько строк ch, a, b, c, d, f, to) или можно в них как-то зашить колонки начиная с EBITDA маржа`21 по чистый долг/EBITDA`23?

Автор - semenizer87
Дата добавления - 04.02.2021 в 14:17
прохожий2019 Дата: Четверг, 04.02.2021, 15:32 | Сообщение № 16
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
я бы вот так писал: [vba]
Код
let
    f=(x,y)=> y{0}+y{1}*x,
    g=(x,y)=>[  a = Table.NestedJoin(x,{y{0}},Segment,{"ID"},"tmp",JoinKind.LeftOuter),
                b = Table.ExpandTableColumn(a, "tmp", {"Segment"}, {y{1}})][b],
    h=(x,y)=>[  a = Table.NestedJoin(x,{y{0}},Rating,{"Rating"},"tmp",JoinKind.LeftOuter),
                b = Table.ExpandTableColumn(a, "tmp", {"Шкала"}, {y{1}})][b],
    j=(x)=>[    a = List.Zip({x[#"EBITDA маржа’21"],x[#"Average Шкала"]}),
                b = List.Accumulate(a,[n=0,x=0,x2=0,y=0,xy=0],(s,c)=>[n=s[n]+1,x=s[x]+c{0},x2=s[x2]+c{0}*c{0},y=s[y]+c{1},xy=s[xy]+c{0}*c{1}]),
                c = [i=(b[n]*b[xy]-b[x]*b[y])/(b[n]*b[x2]-b[x]*b[x]),j=(b[y]-i*b[x])/b[n]],
                d = {c[j],c[i]}][d],
    k=(x)=>if Text.Contains(x,"маржа") or Text.Contains(x,"Дох-ть") then {x,0} else if Text.Contains(x,"долг") then {x,10000} else {x,null},

    from = Excel.CurrentWorkbook(){[Name="Issuers"]}[Content],
    nms = List.Transform(Table.ColumnNames(from),k),
    rep = Table.ReplaceErrorValues(from, nms),
    seg = g(rep,{"ID","Segment"}),
    lst = {{"S&P","Шкала S"},{"Moody`s","Шкала M"},{"Fitch","Шкала F"}},
    rtg = List.Accumulate(lst,seg,h),
    add = Table.AddColumn(rtg, "Average Шкала", each List.Average({[Шкала S], [Шкала M], [Шкала F]})),
    dict = List.Buffer(j(add)),
    to = Table.AddColumn(add,"Forecast",each f([#"EBITDA маржа’21"],dict))
in
    to
[/vba]
К сообщению приложен файл: 4941584.xls (243.0 Kb)
 
Ответить
Сообщениея бы вот так писал: [vba]
Код
let
    f=(x,y)=> y{0}+y{1}*x,
    g=(x,y)=>[  a = Table.NestedJoin(x,{y{0}},Segment,{"ID"},"tmp",JoinKind.LeftOuter),
                b = Table.ExpandTableColumn(a, "tmp", {"Segment"}, {y{1}})][b],
    h=(x,y)=>[  a = Table.NestedJoin(x,{y{0}},Rating,{"Rating"},"tmp",JoinKind.LeftOuter),
                b = Table.ExpandTableColumn(a, "tmp", {"Шкала"}, {y{1}})][b],
    j=(x)=>[    a = List.Zip({x[#"EBITDA маржа’21"],x[#"Average Шкала"]}),
                b = List.Accumulate(a,[n=0,x=0,x2=0,y=0,xy=0],(s,c)=>[n=s[n]+1,x=s[x]+c{0},x2=s[x2]+c{0}*c{0},y=s[y]+c{1},xy=s[xy]+c{0}*c{1}]),
                c = [i=(b[n]*b[xy]-b[x]*b[y])/(b[n]*b[x2]-b[x]*b[x]),j=(b[y]-i*b[x])/b[n]],
                d = {c[j],c[i]}][d],
    k=(x)=>if Text.Contains(x,"маржа") or Text.Contains(x,"Дох-ть") then {x,0} else if Text.Contains(x,"долг") then {x,10000} else {x,null},

    from = Excel.CurrentWorkbook(){[Name="Issuers"]}[Content],
    nms = List.Transform(Table.ColumnNames(from),k),
    rep = Table.ReplaceErrorValues(from, nms),
    seg = g(rep,{"ID","Segment"}),
    lst = {{"S&P","Шкала S"},{"Moody`s","Шкала M"},{"Fitch","Шкала F"}},
    rtg = List.Accumulate(lst,seg,h),
    add = Table.AddColumn(rtg, "Average Шкала", each List.Average({[Шкала S], [Шкала M], [Шкала F]})),
    dict = List.Buffer(j(add)),
    to = Table.AddColumn(add,"Forecast",each f([#"EBITDA маржа’21"],dict))
in
    to
[/vba]

Автор - прохожий2019
Дата добавления - 04.02.2021 в 15:32
semenizer87 Дата: Четверг, 04.02.2021, 17:45 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Спасибо большое! Буду разьираться)
 
Ответить
СообщениеСпасибо большое! Буду разьираться)

Автор - semenizer87
Дата добавления - 04.02.2021 в 17:45
semenizer87 Дата: Четверг, 04.02.2021, 19:44 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Что-то я не могу понять синтаксис скрипта. Добавив перед in дополнительную строку tod = Table.AddColumn(add,"Forecast Чистый долг/ EBITDA’22",each f([#"Чистый долг/ EBITDA’22"],dict)) и изменив in to на in tod, последняя строка вашего скрипта (to = Table.AddColumn(add,"Forecast",each f([#"EBITDA маржа’21"],dict))) куда-то подевалась.
 
Ответить
СообщениеЧто-то я не могу понять синтаксис скрипта. Добавив перед in дополнительную строку tod = Table.AddColumn(add,"Forecast Чистый долг/ EBITDA’22",each f([#"Чистый долг/ EBITDA’22"],dict)) и изменив in to на in tod, последняя строка вашего скрипта (to = Table.AddColumn(add,"Forecast",each f([#"EBITDA маржа’21"],dict))) куда-то подевалась.

Автор - semenizer87
Дата добавления - 04.02.2021 в 19:44
прохожий2019 Дата: Четверг, 04.02.2021, 19:56 | Сообщение № 19
Группа: Проверенные
Ранг: Старожил
Сообщений: 1244
Репутация: 317 ±
Замечаний: 0% ±

365 Beta Channel
Небольшое уточнение
пост выше написан под изначальную задачу, по восьми столбцам - надо немного переписать, чуть позже зайду

последняя строка вашего скрипта (to = Table.AddColumn(add,"Forecast",each f([#"EBITDA маржа’21"],dict))) куда-то подевалась
она не может сама куда-то подеваться, значит стерли
 
Ответить
Сообщение
Небольшое уточнение
пост выше написан под изначальную задачу, по восьми столбцам - надо немного переписать, чуть позже зайду

последняя строка вашего скрипта (to = Table.AddColumn(add,"Forecast",each f([#"EBITDA маржа’21"],dict))) куда-то подевалась
она не может сама куда-то подеваться, значит стерли

Автор - прохожий2019
Дата добавления - 04.02.2021 в 19:56
semenizer87 Дата: Четверг, 04.02.2021, 20:25 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 32
Репутация: 0 ±
Замечаний: 0% ±

Excel 365
Супер! И если совсем обнаглеть, то можно относительно колонки Segment, а то всю голову сломал, но так и не понял куда вставлять группировку)
 
Ответить
СообщениеСупер! И если совсем обнаглеть, то можно относительно колонки Segment, а то всю голову сломал, но так и не понял куда вставлять группировку)

Автор - semenizer87
Дата добавления - 04.02.2021 в 20:25
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Аналог FORECAST в Power Query (Microsoft Query)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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