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

Разделение чисел и текста в одном столбце с помощью 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
Руки режут свежий хлеб на деревянной доске.
Женщина с красными волосами смотрит через металлическую сферу на фоне кирпичной стены.
Image Not Found
Молот перед логотипом технологической компании с цветными квадратами.

Microsoft заблокировала слово «Микрослоп» на своём Discord-сервере и ввела ограничения

Изображение, созданное нейросетью Похоже, Microsoft не очень нравится, когда её инвестиции в искусственный интеллект и активное использование нейросетей называют «слопом» — это стало понятно из-за одного запрета, введённого в официальном Discord-сервере сервиса Copilot. Участники указанного сервера обратили…

Мар 5, 2026
Четыре символа: золото, стилизованная эмблема, каменное кольцо и змей, кусающий свой хвост.

Есть здесь люди, которые искренне считают, что установив макс, они увеличили суверенитет страны?

«В виртуальных дискуссиях уже давно затрагивают тему мессенджера MAX, представляя его как просто еще одну платформу для коммуникации. Однако, как нам кажется, мало кто уделил должное внимание его корням, уровню безопасности и непонятным причинам, по которым он…

Мар 5, 2026
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

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