В каком порядке оптимальнее обрабатывать данные.
1️⃣ Удаляем ненужные столбцы.
2️⃣ Обрабатываем не исходный массив с разбивкой по датам и другим атрибутам, а в новом запросе ссылаемся на этот массив, получаем список уникальных значений из нужного столбца.
3️⃣ Обрабатываем уникальные значения в новом столбце.
4️⃣ Если эти данные нужны на следующих этапах — объединяем исходный массив с этим запросом по общему полю.
5️⃣ Если эти данные нужны в таком виде в конечной визуализации данных:
а) Выгружаем второй запрос в модель данных.
б) Объединяем две таблицы по ключевому полю в модели данных, т.к. это работает быстрее.
✅ Нет необходимости понимать код. Достаточно понимать, как попросить нейронку:
✅ Если группировать, фильтровать, сортировать таблицу нужно по списку полей, названия и количество которых могут меняться от проекта к проекту, для возможности использования кода в других проектах, список этих полей нужно получить динамически:
😶 Либо обратившись к умной таблице в Excel, куда вводить вручную эти значения, и передавать их дальше в код просто как название списка (количество элементов в списке и их значения при этом будут не важны).
😶 Либо вычленив общие текстовые паттерны в заголовках этих полей и отфильтровав:
1. Значение: {"Текст"}.
2. Хардкод списка (так делать не нужно): {"Текст1", "Текст2", "Текст3"}.
3. Имя списка, который динамически получает список текстовых значений.
Примеры, как их отфильтровать (список неполный, ибо способов — уйма) по:
— Содержанию: List.Contains
— Отсутствию: not List.Contains
— Началу: Text.StartsWith
— Не началу: not Text.StartsWith
— Окончанию: Text.EndsWith
— Не окончанию: not Text.EndsWith
😶 Либо обратив внимание на расположение в таблице самих полей и если они находятся:
— Или всегда в начале;
— Или всегда в конце;
— Или идут подряд;
— Или стоят до, после или между полями с заведомо известными значениями;
То получить функцией Table.ColumnNames список полей таблицы, а дальше отфильтровать их:
— Взяв N элементов с начала списка: List.FirstN
— Взяв N элементов с конца списка: List.LastN
— Удалив N элементов в конце списка: List.RemoveLastN
— Получив диапазон значений между N и M позициями списка: List.Range
— Пропустив N элементов с начала списка: List.Skip
✅ Преобразуем список уникальных значений:
😶 Удаляем дубликаты, пустоты, null.
😶 В начале следующего запроса буферизуем его: List.Buffer.
В следующем посте — о смерти производительности кода в Power Query.
via @ppc_bigbrain
Предыдущие посты серии:
1. Документация по промптам.
2. Выбор нейронок.
3. Подготовка к разработке.
4. Оптимизация кода.
5. Если код не "летает".
6. Минимизируем вычисления.
7. Фатальный пример вычислений.
1️⃣ Удаляем ненужные столбцы.
2️⃣ Обрабатываем не исходный массив с разбивкой по датам и другим атрибутам, а в новом запросе ссылаемся на этот массив, получаем список уникальных значений из нужного столбца.
3️⃣ Обрабатываем уникальные значения в новом столбце.
4️⃣ Если эти данные нужны на следующих этапах — объединяем исходный массив с этим запросом по общему полю.
5️⃣ Если эти данные нужны в таком виде в конечной визуализации данных:
а) Выгружаем второй запрос в модель данных.
б) Объединяем две таблицы по ключевому полю в модели данных, т.к. это работает быстрее.
✅ Нет необходимости понимать код. Достаточно понимать, как попросить нейронку:
1. Обратиться к нужным таблицам и столбцам.
2. Какие операции нужно сделать.
3. Что должно получиться в результате.
4. Какие вычисления безопасны: O(1), O(log n), O(n), O(n + m).
5. А какие — смерть для производительности: O(n log n), O(n × m), O(n²), O(nᵏ), O(2ⁿ), O(n!).
✅ Если группировать, фильтровать, сортировать таблицу нужно по списку полей, названия и количество которых могут меняться от проекта к проекту, для возможности использования кода в других проектах, список этих полей нужно получить динамически:
😶 Либо обратившись к умной таблице в Excel, куда вводить вручную эти значения, и передавать их дальше в код просто как название списка (количество элементов в списке и их значения при этом будут не важны).
😶 Либо вычленив общие текстовые паттерны в заголовках этих полей и отфильтровав:
1. Значение: {"Текст"}.
2. Хардкод списка (так делать не нужно): {"Текст1", "Текст2", "Текст3"}.
3. Имя списка, который динамически получает список текстовых значений.
Примеры, как их отфильтровать (список неполный, ибо способов — уйма) по:
— Содержанию: List.Contains
— Отсутствию: not List.Contains
— Началу: Text.StartsWith
— Не началу: not Text.StartsWith
— Окончанию: Text.EndsWith
— Не окончанию: not Text.EndsWith
😶 Либо обратив внимание на расположение в таблице самих полей и если они находятся:
— Или всегда в начале;
— Или всегда в конце;
— Или идут подряд;
— Или стоят до, после или между полями с заведомо известными значениями;
То получить функцией Table.ColumnNames список полей таблицы, а дальше отфильтровать их:
— Взяв N элементов с начала списка: List.FirstN
— Взяв N элементов с конца списка: List.LastN
— Удалив N элементов в конце списка: List.RemoveLastN
— Получив диапазон значений между N и M позициями списка: List.Range
— Пропустив N элементов с начала списка: List.Skip
✅ Преобразуем список уникальных значений:
😶 Удаляем дубликаты, пустоты, null.
😶 В начале следующего запроса буферизуем его: List.Buffer.
В следующем посте — о смерти производительности кода в Power Query.
via @ppc_bigbrain