Очистка таблицы в Power BI - PullRequest
       33

Очистка таблицы в Power BI

0 голосов
/ 30 апреля 2018

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

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, то как будет выглядеть запрос)?

1 Ответ

0 голосов
/ 30 апреля 2018

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

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

Merge Tables

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

Expand Column

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

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

Custom Column

  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"
...