Очистить таблицу в Power BI

Я пытаюсь загрузить несколько файлов Excel в Power BI. Эти файлы довольно маленькие (‹= ~ 1k строк). Один из этих источников необходимо очистить. В частности, в одном из его столбцов есть некорректные данные. Правильные данные хранятся в другом файле Excel. Например:

table bad:
ID    col1
1     0
2     0.5
3     2
4     -3

table correct:
ID    colx
2     1
4     5

desired output:
ID    col1
1     0
2     1
3     2
4     5

В SQL или других инструментах визуализации данных я бы оставил присоединение плохой таблицы к чистой таблице, а затем объединял бы плохие значения и правильные значения. Я знаю, что у меня есть несколько вариантов, как реализовать это в Power BI. Я думаю, что один из вариантов - реализовать его в редакторе запросов (т.е. M). Думаю, еще один вариант - реализовать его в модели данных (т.е. DAX). Какой вариант лучше? И как будет выглядеть реализация (например, если M, то как будет выглядеть запрос)?


person skyline01    schedule 30.04.2018    source источник


Ответы (1)


Хотя вы можете сделать это в DAX, я бы посоветовал сделать это в редакторе запросов. Шаги будут выглядеть примерно так:

  1. Объедините таблицу Correct с таблицей Bad, используя левое внешнее соединение для идентификатора columns.

Объединить таблицы

  1. Разверните Correct таблицу, чтобы получить только столбец Colx.

Развернуть столбец

  1. Создайте настраиваемый столбец, чтобы выбрать нужные значения. (Добавить столбец> Пользовательский столбец)

    if [Colx] = null then [Col1] else [Colx]

Пользовательский столбец

  1. Вы можете удалить столбцы Col1 и Colx, если хотите, или просто оставить их. Если вы удалите Col1, вы можете переименовать столбец Col2 в Col1.

Если вы не хотите, чтобы исходные таблицы перемещались, вы можете выполнить все вышеперечисленное в одном запросе, подобном этому:

let
    BadSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTJQitWJVjICsfRMwWxjINsIzDIBsnSNlWJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Col1 = _t]),
    CorrectSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlLSUTJUitWJVjIBskyVYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Colx = _t]),
    Bad = Table.TransformColumnTypes(BadSource,{{"ID", Int64.Type}, {"Col1", type number}}),
    Correct = Table.TransformColumnTypes(CorrectSource,{{"ID", Int64.Type}, {"Colx", type number}}),
    #"Merged Queries" = Table.NestedJoin(Bad,{"ID"},Correct,{"ID"},"Correct",JoinKind.LeftOuter),
    #"Expanded Correct" = Table.ExpandTableColumn(#"Merged Queries", "Correct", {"Colx"}, {"Colx"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Correct", "Col2", each if [Colx] = null then [Col1] else [Colx]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Col1", "Colx"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Col2", "Col1"}})
in
    #"Renamed Columns"
person Alexis Olson    schedule 30.04.2018
comment
Для этого типа работы (т. Е. Очистки данных) я обычно удаляю правильные таблицы после очистки плохих таблиц. Как удалить / обрезать таблицы после очистки? - person skyline01; 01.05.2018
comment
Вы можете загрузить их все в один запрос в расширенном редакторе. Таким образом, у вас не останется лишних столов. Смотрите мою правку. - person Alexis Olson; 01.05.2018