【问题标题】:Replace in Power BI在 Power BI 中替换
【发布时间】:2017-08-05 02:03:40
【问题描述】:

我有以下两个表从 SQL 数据库导入到 power bi:

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

现在,我需要在第二个表中添加一个计算列,其中 ID 被替换为名称。喜欢,

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

我怎样才能以有效的方式实现这一点并避免创建多个列。

提前致谢。

【问题讨论】:

    标签: powerbi powerbi-datasource


    【解决方案1】:

    嗯,可能有更好的方法,但我使用 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"
    

    【讨论】:

      【解决方案2】:

      这不是很漂亮,但是如果你想在 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 函数以检查第三个逗号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        相关资源
        最近更新 更多