Заменить в Power BI

У меня есть две таблицы, импортированные в power bi из базы данных SQL:

<table border="1">
<tr><th>Id</th><th>Name</th></tr>
<tr><td>1</td><td>One</td></tr>
<tr><td>2</td><td>Two</td></tr>
<tr><td>3</td><td>Three</td></tr>
<tr><td>4</td><td>Four</td></tr>
<tr><td>5</td><td>Five</td></tr>
</table>
<br>
<br>
<table border="1">
<tr><th>Selected Ids</th></tr>
<tr><td>1,2,3</td></tr>
<tr><td>1,3</td></tr>
<tr><td>1</td></tr>
<tr><td>3</td></tr>
<tr><td>1</td></tr>
<tr><td>BLANK</td></tr>
<tr><td>BLANK</td></tr>
</table>

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

<table border="1">
<tr><th>Selected Ids</th><th>Names</th></tr>
<tr><td>1,2,3</td><td>One,Two,Three</td></tr>
<tr><td>1,3</td><td>One,Three</td></tr>
<tr><td>1</td><td>One</td></tr>
<tr><td>3</td><td>Three</td></tr>
<tr><td>1</td><td>One</td></tr>
<tr><td>BLANK</td><td>BLANK</td></tr>
<tr><td>BLANK</td><td>BLANK</td></tr>
</table>

Как я могу добиться этого эффективным образом и избежать создания нескольких столбцов.

Заранее спасибо.


person yogesh puttaswamy    schedule 03.08.2017    source источник


Ответы (2)


Что ж, может быть способ получше, но я использовал Power Query, чтобы получить это:

введите здесь описание изображения

Я начал с этого как Table1:

введите здесь описание изображения

и это как Таблица2:

введите здесь описание изображения

Затем я работал с запросом Table2.

Вот M-код:

let
Source = Excel.Workbook(File.Contents("C:\Users\mpincince\Desktop\SelectedIds.xlsx"), null, true),
Table2_Table = Source{[Item="Table2",Kind="Table"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(Table2_Table,{{"SelectedIds", type text}}),

//The lines above established Table2. The following lines address your question...

#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Added Table1Copy" = Table.AddColumn(#"Added Index", "Table1Copy", each Table1),
#"Expanded Table1Copy" = Table.ExpandTableColumn(#"Added Table1Copy", "Table1Copy", {"Id", "Name"}, {"Id", "Name"}),
#"Added IdComparison" = Table.AddColumn(#"Expanded Table1Copy", "NameOfMatchedId", each if [SelectedIds]<> "" then (if Text.Contains([SelectedIds],[Id]) then [Name] else false) else null),
#"Filtered Rows" = Table.SelectRows(#"Added IdComparison", each ([NameOfMatchedId] <> false)),
#"Grouped Rows" = Table.Group(#"Filtered Rows", {"Index", "SelectedIds"}, {{"Names", each ([NameOfMatchedId])}}),
#"Extracted Values2" = Table.TransformColumns(#"Grouped Rows", {"Names", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
#"Removed Columns" = Table.RemoveColumns(#"Extracted Values2",{"Index"})
in
#"Removed Columns"
person Marc Pincince    schedule 04.08.2017

Это некрасиво, но если вы хотите сделать это в DAX, а не в редакторе запросов, вы можете использовать эту формулу; просто замените «Table2» и «Names» на имена ваших таблиц.

Names = IF(Table2[Selected Ids] = "BLANK", "BLANK",
IF(
    SEARCH(",", Table2[Selected Ids], 1, -1) = -1,
    LOOKUPVALUE(Names[Name], Names[Id], Table2[Selected Ids]),

    CONCATENATE(
        CONCATENATE(LOOKUPVALUE(Names[Name], Names[Id],
            MID(Table2[Selected Ids], 1, SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids])) - 1)
            ), ","),

        IF(
            SEARCH(",", Table2[Selected Ids],
                SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids])) + 1,
                -1) = -1,

            LOOKUPVALUE(Names[Name], Names[Id],
                MID(Table2[Selected Ids], 
                    SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids])) + 1, 
                    LEN(Table2[Selected Ids]) - SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids]))
                    )
                ),

            CONCATENATE(
                CONCATENATE(LOOKUPVALUE(Names[Name], Names[Id],
                    MID(Table2[Selected Ids], 
                        SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids])) + 1, 
                        SEARCH(",", Table2[Selected Ids], SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids])) + 1, LEN(Table2[Selected Ids])) - SEARCH(",", Table2[Selected Ids], 1, 0) - 1
                        )
                    ), ","),

                LOOKUPVALUE(Names[Name], Names[Id],
                    MID(Table2[Selected Ids], 
                    SEARCH(",", Table2[Selected Ids], SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids])) + 1, LEN(Table2[Selected Ids])) + 1, 
                    LEN(Table2[Selected Ids]) - SEARCH(",", Table2[Selected Ids], SEARCH(",", Table2[Selected Ids], 1, LEN(Table2[Selected Ids])) + 1, LEN(Table2[Selected Ids]))
                    )
                )
            )
        )
    )
)

Результаты

Эта формула обрабатывает не более двух запятых. Если вы хотите расширить его, чтобы обрабатывать больше, замените последний LOOKUPVALUE другим IF, расширяя каждую из SEARCH функций, чтобы проверить наличие третьей запятой.

person Joe Gravelyn    schedule 04.08.2017