Проблема сортировки при консолидировании месячных данных в файл с итогами за год. Используя запрос, сортировка по дню, времени и букве.

Вопрос или проблема

Я собираю данные о измеряемых частях за каждый месяц в один файл на весь год. При использовании “запроса из папки” мне удается собрать все данные вместе, отформатировать и отсортировать с одним исключением. Каждая деталь имеет версии “A” и “B”. К сожалению, из-за производственного заказа иногда деталь “B” измеряется раньше детали “A”. В этом случае я не хочу сортировать по времени, так как порядок будет, например, A,B,A,B,B,A,A,B,A,B. Я хочу, чтобы “A” деталь всегда располагалась перед “B” деталью. Части измеряются дважды в день, поэтому я не могу сортировать по дню, а затем по букве детали, потому что это приведет к тому, что будет, например, A,A,B,B,A,A,B,B. Как я могу отсортировать данные так, чтобы сначала шёл день, затем время, затем перезаписывалось время для поддержания порядка A,B,A,B?

Чтобы усложнить ситуацию, иногда сборщик данных ошибается и неверно помечает одну из деталей. В этом случае она отсортируется как, например, A,B,A,B,A,A,A,B,A,B. Как я могу найти эту ошибку и автоматически исправить её перед вставкой свернутых данных в таблицу?

(Данные были сильно упрощены по соображениям конфиденциальности)

Вы можете увидеть, что 2 мая утром A/B перепутаны, потому что данные B были собраны до данных A. Сортировка данных по времени испортила порядок.

Вы можете увидеть, что 2 апреля утром (1PM – это утренняя смена) есть две детали A, когда одна из них должна быть B (для этой ошибки мы можем предположить, что они были собраны в порядке “A” перед “B”, так что время сбора данных имеет значение).

Я новичок в использовании запросов и, честно говоря, сильно затрудняюсь с этой задачей. Пожалуйста, помогите мне не только решить эту проблему, но и понять её.

Вот текстовые версии данных:

Апр

Дата    Время    Буква  Данные
4/1/2024    7:25:08 AM  A   0.7
4/1/2024    7:30:56 AM  B   0.5
4/1/2024    8:32:51 PM  A   0.6
4/1/2024    8:36:44 PM  B   0.5
4/2/2024    1:32:59 PM  A   1
4/2/2024    1:38:36 PM  A   0.5
4/2/2024    8:46:11 PM  A   0.7
4/2/2024    8:51:31 PM  B   0.7

Май

Дата    Время    Буква  Данные
5/1/2024    1:35:12 PM  A   0.6
5/1/2024    1:39:05 PM  B   0.4
5/1/2024    6:07:11 PM  A   0.8
5/1/2024    6:10:43 PM  B   0.5
5/2/2024    10:59:32 AM A   0.8
5/2/2024    8:42:16 AM  B   0.1
5/2/2024    6:15:07 PM  A   0.4
5/2/2024    6:18:40 PM  B   0.2

YTD

Дата    Время    Буква  Данные
4/1/2024    7:25:08 AM  A   0.7 
4/1/2024    7:30:56 AM  B   0.5 
4/1/2024    8:32:51 PM  A   0.6 
4/1/2024    8:36:44 PM  B   0.5 
4/2/2024    1:32:59 PM  A   1   
4/2/2024    1:38:36 PM  A   0.5 
4/2/2024    8:46:11 PM  A   0.7 
4/2/2024    8:51:31 PM  B   0.7 
5/1/2024    1:35:12 PM  A   0.6 
5/1/2024    1:39:05 PM  B   0.4 
5/1/2024    6:07:11 PM  A   0.8 
5/1/2024    6:10:43 PM  B   0.5 
5/2/2024    8:42:16 AM  B   0.1 
5/2/2024    10:59:32 AM A   0.8 
5/2/2024    6:15:07 PM  A   0.4 
5/2/2024    6:18:40 PM  B   0.2 

Я использовал простой запрос, как показано ниже, и дополнительно, по порядку, изменил все типы данных на правильные, отсортировал по дате, отсортировал по времени, удалил имя источника и удалил дубликаты.

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

Ответ или решение

Чтобы решить вашу проблему с сортировкой данных при консолидации месячных данных в файл за весь год, необходимо учесть несколько ключевых аспектов. Мы рассмотрим последовательность сортировки данных, учтём правила для факторов "A" и "B", а также автоматизацию проверки на ошибки в метках данных.

Определение структуры данных

Прежде всего, необходимо организовать структуру ваших данных. Имеется три основных поля: "Дата", "Время", "Буква", и "Данные". Эти поля должны быть в правильном формате, чтобы обеспечить корректную обработку.

Сортировка данных

Сортировка данных должна следовать строго определённой последовательности: по дате, затем по времени и, наконец, с учётом специального правила для "A" и "B". Чтобы реализовать это в Power Query, выполните следующие шаги:

  1. Импорт данных: Используйте функцию "Запрос из папки" для объединения данных из всех файлов. Убедитесь, что все файлы имеют одинаковую структуру.

  2. Изменение типов данных: Убедитесь, что столбцы "Дата" и "Время" имеют соответствующие типы данных. Преобразуйте поле "Буква" в текстовый формат.

  3. Сортировка: Следующий шаг — сортировка.

    • Сначала отсортируйте данные по "Дата".
    • Затем отсортируйте по "Время".
    • После этого добавьте ещё один шаг для сортировки, который будет давать приоритет строкам с буквой "A" перед строками с буквой "B".

В Power Query вы можете использовать следующий код для обработки логики сортировки:

let
    Source = Folder.Files("<путь к вашей папке>"),
    // Получаем таблицу из файлов
    Data = ... , // Здесь должен быть ваш код для извлечения данных
    ChangedType = Table.TransformColumnTypes(Data, {{"Date", type date}, {"Time", type time}, {"Letter", type text}, {"Data", type number}}),
    // Первоначальная сортировка по Дате и Времени
    Sorted = Table.Sort(ChangedType, {{"Date", Order.Ascending}, {"Time", Order.Ascending}}),
    // Логика для сортировки по "Letter"
    Adjusted = Table.AddColumn(Sorted, "SortOrder", each if [Letter] = "A" then 0 else 1),
    FinalSorted = Table.Sort(Adjusted, {{"Date", Order.Ascending}, {"Time", Order.Ascending}, {"SortOrder", Order.Ascending}})
in
    FinalSorted

Коррекция ошибок меток

Чтобы автоматизировать проверку ошибок меток, можно использовать следующий подход:

  1. Группировка данных: Создайте таблицы группировки по "Дата" и "Время" и проверьте, что каждая группа содержит ровно одну "A" и одну "B".
  2. Автоматическая проверка: Если в группе обнаруживается больше одной "A" или "B", выдайте предупреждение или отметьте ошибку в отдельном столбце.

Пример кода для проверки ошибок:

let
    GroupedData = Table.Group(FinalSorted, {"Date", "Time"}, {{"AllData", each _, type table [Date=nullable date, Time=nullable time, Letter=nullable text, Data=nullable number]}}),
    ErrorsDetected = Table.AddColumn(GroupedData, "Error", each if List.Count(List.Select([AllData][Letter], (x) => x = "A")) > 1 then "Multiple A's" else if List.Count(List.Select([AllData][Letter], (x) => x = "B")) > 1 then "Multiple B's" else null),
    FinalTable = Table.SelectRows(ErrorsDetected, each [Error] = null)
in
    FinalTable

Заключение

Эти шаги помогут вам не только правильно отсортировать ваши данные, но и найти ошибки в метках перед их вставкой в итоговую таблицу. Несмотря на то, что программные операции могут показаться сложными, понимание логики и структуры ваших данных поможет устранить любую путаницу. При последующем использовании Power Query для обработки данных попробуйте детально проанализировать каждый шаг и логику работы функций, чтобы развивать навыки их применения.

Оцените материал
Добавить комментарий

Капча загружается...