Страницы: 1
RSS
Подсчет подряд повторяющихся значений
 
Всех приветствую!

Не могу решить задачу.

Задача: подсчет подряд повторяющихся нечисловых значений (максимум исходов подряд)
Дополнительно: тоже самое, только с ограничением за последние 5 исходов

Данные и пример визуального решения задачи хорошо приведены в прикрепленном файле на примере хоккейных игр.

Заранее признателен за помощь!
Изменено: Сергей Шестаков - 28.11.2022 18:24:09
 
Цитата
:  приведены в прикрепленном файле
Файл в студию.
 
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица13"]}[Content],
    tableCombine =
        Table.Combine( {
            Table.FromColumns( { Source[Дата], Source[команда_1], Source[#"в/п_1"] } ),
            Table.FromColumns( { Source[Дата], Source[команда_2], Source[#"в/п_2"] } )
        } ),

    tableRenameColumns =
        Table.RenameColumns(
            tableCombine, {
                {"Column1", "Дата"},
                {"Column2", "Команда"},
                {"Column3", "Исход"}
            }
        ),

    tableSelectRows =
        Table.SelectRows(
            tableRenameColumns,
            (x) => x[Команда] <> null
        ),

    tableGroup =
        Table.Group(
            tableSelectRows,
            {"Команда"},
            {
                {
                    "temp",
                    (x) => [
                        tableSort = Table.Sort(x, {"Дата", Order.Ascending}),
                        tableAddIndexColumn = Table.AddIndexColumn( tableSort, "Index", -1 ),

                        list_Исход = List.Buffer( tableAddIndexColumn[Исход] ),
                        list_Count = List.Count( list_Исход ),

                        fResult = ( count, result, prev_result, last_result ) => [
                            condition = 
                                if result = last_result
                                then count + 1
                                else
                                    if prev_result <> last_result
                                    then 0
                                    else count
                        ][ condition ],

                        listGenerate =
                            List.Generate(
                                () => [
                                    id = 0,
                                    winner_count = fResult( 0, "В", 0, list_Исход{ id } ),
                                    lose_count = fResult( 0, "П", 0, list_Исход{ id } )
                                ],
                                each [ id ] < list_Count,
                                each [
                                    id = [ id ] + 1,
                                    winner_count = fResult( [ winner_count ], "В", list_Исход{ id - 1 }, list_Исход{ id } ),
                                    lose_count = fResult( [ lose_count ], "П", list_Исход{ id - 1 }, list_Исход{ id } )
                                ],
                                each [
                                    [ id ], [ winner_count ], [ lose_count ]
                                ]
                            ),
                        tableFromRecords = Table.FromRecords( listGenerate ),
                        tableAddColumn_Последовательность =
                            Table.AddColumn(
                                tableFromRecords,
                                "Последовательность",
                                (x) => if x[winner_count] <> 0 then Text.From(x[winner_count]) & "В" else Text.From(x[lose_count]) & "П"
                            ),
                        tableJoin =
                            Table.Join(
                                tableAddIndexColumn, "Index",
                                tableAddColumn_Последовательность, "id"
                            ),
                        tableAddColumn_Ключ =
                            Table.AddColumn(
                                tableJoin,
                                "Ключ",
                                (y) => Text.From(Date.From(y[Дата])) & "_" & y[Команда]
                            ),
                        tableSelectColumns =
                            Table.SelectColumns(
                                tableAddColumn_Ключ, {
                                    "Ключ", "Последовательность"
                                }
                            )
                    ][ tableSelectColumns ]
                }
            }
        ),
    tableRemoveColumns = Table.RemoveColumns( tableGroup, {"Команда"} ),
    tableExpandTableColumn =
        Table.ExpandTableColumn(
            tableRemoveColumns,
            "temp",
            {"Ключ", "Последовательность"},
            {"Ключ", "Последовательность"}
        )
in
    tableExpandTableColumn
upd. + Последние 5 учитываются
Изменено: te1n - 29.11.2022 01:29:18
Страницы: 1
Наверх