Аудит гранулярности: исходный ключ — Product ID + Region; целевой ключ — Product ID + Region + Quarter. Owner и Notes — описательные атрибуты, повторяемые намеренно. Annual Total — производные метаданные, исключённые из отмены свёртки. Ожидаемый результат — ровно 480 строк, включая строки с Target=null.
Шаги Power Query: загрузить QuarterlyTargets через «Данные > Из таблицы/диапазона». Задать Product ID, Region, Owner, Notes как текст; Q1–Q4 Target — как допускающее null целое число. Выбрать Product ID, Region, Owner, Annual Total, Notes, затем «Отменить свёртку других столбцов» только после подтверждения, что «другими» являются ровно четыре квартальных столбца; более безопасный при обновлении подход — явно выбрать Q1 Target–Q4 Target и выполнить «Отменить свёртку столбцов». Переименовать Attribute в Quarter Source, Value — в Target. Сопоставить четыре разрешённых значения заголовка с Q1–Q4; при появлении любого другого значения вернуть ошибку, а не произвольно обрезать текст. Удалить Annual Total после использования только для сверки, затем упорядочить целевые столбцы. Не фильтровать строки с Target=null.
Проверка: сгруппировать по Product ID, Region, Quarter и остановиться, если какое-либо количество отличается от 1. Сгруппировать по исходному ключу и потребовать четыре строки. Потребовать 480 строк, множество Quarter только Q1–Q4 и Target как целое число или null. Пересчитать сумму непустых кварталов и сравнить с исходным Annual Total, рассматривая null как пропуск, а не автоматически как ноль; длинные строки для P-01: Q1=100, Q2=null, Q3=0, Q4=140, с повторяющимися Owner Ana и Notes. Для обратного преобразования сворачивать Quarter по Target только после проверки уникальности и при доступной операции «Не агрегировать»; пересчитать Annual Total по одобренному правилу null.