Глитч-эффект с искажёнными символами и знаками на тёмном фоне.

Разделение чисел и текста в одном столбце с помощью Power Query

Электронная таблица Excel со столбцом, содержащим числа и текст? Какой беспорядок!

Делиться

a5b2ebc452f21f7637610870fb88db14

Введение

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

Несколько дней назад клиент задал мне следующий вопрос:

У меня есть электронная таблица Excel, в одном столбце которой находятся числа и текст. Я хочу импортировать эту таблицу в Power BI и выполнить анализ чисел в этом столбце.

Как отделить цифры от текста в этом столбце?

Помните, что мне нужен и текст в этом столбце.

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

Я создал фиктивный файл Excel с той же проблемой, который выглядит следующим образом:

73ec3382a92d52fe329c9be67bee669e

Для создания прототипа я сначала загрузил эти данные в базу данных SQL Server, чтобы посмотреть, как решить эту задачу там.

Решение проблемы с помощью SQL

В T-SQL есть две функции, которые полезны в подобных сценариях:

  • TRY_CONVERT()
    • Эта функция пытается преобразовать значение в целевой тип данных. Если это не удаётся, она возвращает NULL.
  • ISNUMERIC()
    • Проверяет, является ли значение числовым. Если да, возвращает 1. В противном случае — 0.

Исходя из этих знаний, я написал запрос для разделения значений на два столбца. Один с числами, а другой с текстом:

SELECT [Values] ,TRY_CONVERT(decimal(18, 5), [Values]) AS [Number] ,IIF(ISNUMERIC([Values]) = 0, [Values], NULL) AS [Text] FROM [dbo].[MixedValues];

В результате получилась следующая таблица:

541c59692a5f7450ff5a8d7ec82c95d6

Если присмотреться, то видно, что строка 17 распознана как текст.

Это происходит потому, что число содержит пробел.

Я вернусь к этому позже.

Переход на Power Query – попытка использовать IsNaN()

Теперь я загрузил файл Excel в Power Query.

Я определил столбец как «Текст» и приступил к решению этой задачи.

В первой попытке используется функция Number.IsNaN().

Эта функция возвращает true, если значение равно NaN. «NaN» — это заполнитель, указывающий на неприменимость значения, например, из-за деления на ноль.

Я попытался определить, эквивалентен ли текст значению NaN.

Это M-код для вычисляемого столбца:

if Number.IsNaN([Value]) = true then [Value] else null

Результат меня удивил:

3f9b8ad30d2aa594fa66edc5748e2045

Как ни странно, в результате программа не может преобразовать число в число.

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

Затем я попытался преобразовать столбец в число и применить к результату функцию IsNaN():

Если Number.IsNaN(Number.From([Value])) = false, то Number.From([Value]) иначе null

Теперь числа преобразуются в числа, но текстовые значения приводят к ошибке:

8ba287f1437782fd4aa2e8d68c8813f4

Теперь эта логика применима и к числам.

Однако преобразование не удается для строк, содержащих текст. Это приводит к появлению строк с ошибками.

Попытка использования Value.Is() в Power Query

Давайте попробуем другую функцию: Value.Is()

Эта функция проверяет, совместимо ли значение с заданным типом данных.

Это должно быть эквивалентно функции ISNUMERIC(), показанной выше:

if Value.Is([Value], Number.Type) = true then Number.From([Value]) else null

К сожалению, эта функция также не вернула ожидаемый результат:

5cb24c365e86c8197ccf657f773da466

Когда я попробовал тот же подход, что и выше, предварительно преобразовав значение в число, я получил тот же результат, что и раньше:

36570060596b72993b3cfeeec579b270

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

На тот момент у меня не было времени на более глубокие исследования, так как его было очень мало.

Пришло время изменить подход.

Концепция переключения

Теперь я изучил, как выявлять ошибки в Power Query.

Моя идея заключалась в следующем: что если бы я мог перехватить ошибку преобразования и использовать эту информацию?

Я нашел эту страницу с полезной информацией: Ошибки – PowerQuery M | Microsoft Learn

Исходя из этого, я вывел следующее выражение:

try Number.From([Value]))

После добавления вычисляемого столбца с этим выражением я получил следующий результат:

e1c0b9d1f66733c9f72de09e0d489aa7

Я был полон оптимизма, так как ошибки не возникло.

Следующим шагом было расширение архива:

f0402520b9a4301aa9b19d5b983f86e6

Мне не нужны были столбцы «Ошибки» — только столбец «Значение».

Вот результат после расширения:

9eb5268eb5f3bd37a0cfa735c070ee1a

Обратите внимание, что я переименовал столбцы непосредственно в функции ExpandRecordColumn().
В противном случае у меня получился бы столбец с названием [Значение.1].

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

Теперь я добавил вычисляемый столбец, чтобы проверить, пуст ли новый столбец. Если да, то исходный столбец «Значение» содержал текст:

если [Числовое значение] = null тогда [Значение] иначе null

Вот результат:

5d39ea5b6cbcd0bd23f503cac047974c

После установки правильных типов данных и удаления исходного столбца «Значение» я получил следующую таблицу:

b380ca8bdad9369701b7e43812c80926

Обработайте число с помощью пропусков.

Но у нас всё ещё есть 17-я строка, в которой содержалось число с пробелом.

Как я с этим справился?

Самым простым решением было удалить все пустые значения из столбца «Значение»:

4bd22cb95d0205dff0a2b314168742ed

Но мне пришлось добавить этот шаг, прежде чем приступать к разделению двух типов значений:

ad5e13aca5355e59bb913e6c3a390413

После добавления этого шага строка 17 распознается как число и сохраняется корректно.

Вот данные после загрузки в Power BI:

5ac505fe796e3f85d996df055c6c81ef

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

Заключение

Это было увлекательное знакомство с тем, как Power Query, или язык M, работает с типами данных.

Я до сих пор не уверен в причинах ошибок.

Но я научился обрабатывать ошибки, или использовать вызов конструкции try и обрабатывать вывод.

Это было очень полезно.

В любом случае, как вы видите на примере исходного значения в строке 17, качество данных имеет первостепенное значение.

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

Это настоящий кошмар, потому что Excel очень терпим к типам данных. Он принимает всё, даже если столбец отформатирован как число.

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

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

И будьте уверены, пользователи всегда найдут способ испортить цифры в Excel.

Ссылки

Данные создаются с помощью случайных чисел и слов.

Вот справочная информация по языку M: Справочник по языку формул Power Query M – PowerQuery M | Microsoft Learn

Источник: towardsdatascience.com

✅ Найденные теги: Power Query, новости, Разделение, Столбец, текст, Числа

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

dummy-img
Силуэт лица с диаграммой связи на голове, символизирующий думы и идеи.
ideipro logotyp
Руки режут свежий хлеб на деревянной доске.
Женщина с красными волосами смотрит через металлическую сферу на фоне кирпичной стены.
Мужчина заряжает электромобиль на зимней стоянке, снег, дальний план - деревья и горы.
Человек спит в кровати под красным пледом, солнечный свет падает на подушку.
Человек в смокинге держит планеты Земля и Марс, символизируя космические достижения.
Твердотельный аккумулятор Donut на выставке, показывает замещающий литий-ион стоимость.
Image Not Found
dummy-img

Спрос на хранилища для ИИ привёл к 24% росту прибыли производителей памяти NAND

Умные люди из аналитического агентства TrendForce провели анализ текущей ситуации производителей микросхем памяти NAND и пришли к выводу, что за последний квартал 2025 года их выручка прилично увеличилась, а показатели некоторых компаний прилично выделяются на фоне остальных.…

Мар 5, 2026
ideipro logotyp

Bitget Wallet интегрирует DT One для пополнения мобильной связи в более чем 170 странах

Bitget Wallet, приложение для повседневных финансов, объявил о партнерстве с DT One, которое позволит осуществлять пополнение мобильной связи напрямую внутри кошелька с использованием стейблкоинов, связывая ончейн-балансы с повседневными телеком-сервисами. Благодаря инфраструктуре DT One пользователи Bitget Wallet получают…

Мар 5, 2026
Человек в смокинге держит планеты Земля и Марс, символизируя космические достижения.

Почему SpaceX может выйти на биржу и с чем это может быть связано

Мы ведь явно не воспринимаем всерьез центры обработки данных в космосе? Элизабет Лопатто, старший репортер. Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего сайта. Все…

Мар 5, 2026
Твердотельный аккумулятор Donut на выставке, показывает замещающий литий-ион стоимость.

Согласно результатам испытаний, твердотельная батарея Donut Lab способна выдерживать (экстремальные) температуры.

Разработанная финским стартапом батарея не только выдержала экстремальные условия высокой температуры, но и фактически увеличила свою емкость. Эндрю Дж. Хокинс, редактор раздела «Транспорт». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в…

Мар 5, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых