Forum Discussion

Blevels's avatar
Blevels
Frequent Visitor
3 years ago
Solved

Power Query CASE to SELECT from another Table

Hello,

How does one recreate the following in Power Query:

SELECT 
COLUMN1, ..., COLUMNX,
(CASE WHEN COLUMNX = '' THEN "DNE"
ELSE (SELECT [VALUE] FROM [CODES_TABLE] WHERE [POSITION] = 1
         AND [LOOKUPVALUE] = SUBSTRING([CODES_TABLE], 1,1)
         ) END) as CUSTOMERTYPE,
.... COLUMNY, COLUMNZ
FROM [CUSTOMERS]

 

Doing the above where the assumption is that the [CODES_TABLE] is another query and the CUSTOMERTYPE 

column needs to select from the query in a CASE statement? 

 

Thank you for your response(s) in advance.

  • Hello - this will return the expected result.

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Vcw5DsAgDETRu7imsCFkKbNvSk9kcf9rZKCI5MLF+xpZlYQcjTgvnvmm7JQ8OJWUAvNTUwDnsnyFOdXUgItNEVxtasGt/Ip/6sDdrnrwsGkAT5uE4QtHOX8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, ColumnX = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"ColumnX", type text}}),
        Result = Table.AddColumn ( 
            #"Changed Type", "CUSTOMERTYPE", each if [ColumnX] = "" then "DNE" else Table.SelectRows(
            Codes, 
            (x)=> 
                x[LookupValue]=Text.Start([ColumnX], 1)
            ){0}[Value], type text 
        )
    in
        Result

     

     

     

3 Replies

  • Blevels's avatar
    Blevels
    Frequent Visitor

    CUSTOMERS TABLE:

    Column1Column2ColumnXCUSTOMERTYPE

    1A21200K 
    2B2X300M 
    3CAY100X 
    4DAY100X 
    5EAY100X 
    6F25100X 
    7GAY100X 
    8HAY100X 
    9IAY100X 

     

    CODES_TABLE:

    IDPositionLookupValueAttributeValue

    111Customer TypeHEALTH CARE
    212Customer TypeAUTOMOTIVE
    313Customer TypeMANUFACTURING
    414Customer TypeTECHNOLOGY
    515Customer TypePRODUCTION
    616Customer TypeCONSTRUCTION
    717Customer TypeTRADE
    818Customer TypeFINANCE
    919Customer TypeEDUCATION
    101ACustomer TypeMILITARY

     

    EXPECTED OUTCOME:

    Column1Column2ColumnXCUSTOMERTYPE

    1A21200KAUTOMOTIVE
    2B2X300MAUTOMOTIVE
    3CAY100XMILITARY
    4DAY100XMILITARY
    5EAY100XMILITARY
    6F25100XAUTOMOTIVE
    7GAY100XMILITARY
    8HAY100XMILITARY
    9IAY100XMILITARY
    • jennratten's avatar
      jennratten
      Super User

      Hello - this will return the expected result.

      let
          Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Vcw5DsAgDETRu7imsCFkKbNvSk9kcf9rZKCI5MLF+xpZlYQcjTgvnvmm7JQ8OJWUAvNTUwDnsnyFOdXUgItNEVxtasGt/Ip/6sDdrnrwsGkAT5uE4QtHOX8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, ColumnX = _t]),
          #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"ColumnX", type text}}),
          Result = Table.AddColumn ( 
              #"Changed Type", "CUSTOMERTYPE", each if [ColumnX] = "" then "DNE" else Table.SelectRows(
              Codes, 
              (x)=> 
                  x[LookupValue]=Text.Start([ColumnX], 1)
              ){0}[Value], type text 
          )
      in
          Result