Выгрузка в Excel с динамическим количеством столбцов

Подскажите, есть ли какой-то функционал на гриндате, который позволяет делать выгрузку в excel с заранее неизвестным количеством столбцов?
Например, ФИО, Покупка_1, Покупка_2, ..., Покупка_N (количество заранее неизвестно)

Формирование необходимой структуры, возможно, с помощью json, но необходимой функции, которая позволяет далее сделать выгрузку не нашел.

Комментарии

  • Опишите, пожалуйста, примерный сценарий выгрузки данных

  • @Андрей Зонов написал:
    Опишите, пожалуйста, примерный сценарий выгрузки данных

    Пользователь нажимает кнопку "Скачать", происходит скачивание файла с динамической структурой. Пример структуры выгружаемой таблицы выдуманный для понимания. Возможно ли такой сделать на ГД?
    Покупатель_ID | Покупка_1 | Покупка_2 | ... | Покупка_N |

  • Прошу пояснить, что вы подрузумеваете под динамической структурой?
    Каким образом будут формироваться данные, которые пользователю необходимо выгрузить?
    Как один из вариантов, вы можете воспользоваться инструментами ETL

  • отредактировано 29 янв

    Например есть два покупателя №1 и №2. Первый сделал 3 покупки (на суммы 100, 200, 300), а второй - 5 (на суммы 150, 210, 320, 330, 550) рублей. Требуется сделать выгрузку в Excel при нажатии на кнопку в виде:
    Покупатель | Покупка_1 | Покупка_2 | Покупка_3 | Покупка_4 | Покупка_5 |
    №1 | 100 | 200 | 300 | null | null |
    №2 | 150 | 210 | 320 | 330 | 550 |

    Количество покупателей и количество покупок может меняться, соответственно может меняться количество строк и столбцов

  • отредактировано 29 янв

    @Константин Дерендяев написал:
    Требуется сделать выгрузку в Excel при нажатии на кнопку в виде

    Можно создать Источник данных на основе SQL примерно с таким SQL

    WITH PreparedData AS (
        SELECT 
            c.name AS customer_name,
            o.amount,
            ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.created_at) as purchase_num
        FROM customers c
        JOIN orders o ON c.id = o.customer_id
    )
    SELECT 
        customer_name AS "Покупатель",
        MAX(CASE WHEN purchase_num = 1 THEN amount END) AS "Покупка_1",
        MAX(CASE WHEN purchase_num = 2 THEN amount END) AS "Покупка_2",
        MAX(CASE WHEN purchase_num = 3 THEN amount END) AS "Покупка_3",
        MAX(CASE WHEN purchase_num = 4 THEN amount END) AS "Покупка_4",
        MAX(CASE WHEN purchase_num = 5 THEN amount END) AS "Покупка_5",
    -- ...   
    FROM PreparedData
    GROUP BY customer_name;
    

    и выгружать эти результаты в Excel.

    PS Но проще выгрузить сырые данные в Excel, и уже в нём делать такой Pivoting. Или посмотреть на Многомерный куб (OLAP)

Войдите или Зарегистрируйтесь чтобы комментировать.