Forum Discussion

smann's avatar
smann
Helper I
8 years ago
Solved

Can I refer to Table using String?

Here's what I tried to do that didn't work.

 

Replace this:

 

NewTable=#"MyTable"

 

With this:

 

TableName = "MyTable"

 

NewTable = #TableName

 

Is there something I can do along these lines? Thanks!

  • What I had in mind is to create a record for all tables you want to reference.

     

    Query MyTables:

     

    = [My Table = #"My Table", table1 = table1, table2 = table2]

    The function that returns the table based on the name of the table:

     

     

    = (table as text) as table => Expression.Evaluate(table,MyTables)

     

    But why don't you just reference the tables as table? It's quit rare to reference a table by the name of the table.,

5 Replies

  • MarcelBeug's avatar
    MarcelBeug
    Community Champion

    As far as I know this can't be done directly.

     

    A workaround is to create a record with the table(s) you want to reference.

    This record can then be used as so called "Environment" wit function Expression.Evaluate.

     

    Query MyTables creates a record:

     

    = [My Table = #"My Table"]

     

    Query in which the table is referenced:

     

    let
        Source = "#""My Table""",
        NewTable = Expression.Evaluate(Source, MyTables)
    in
        NewTable
    • smann's avatar
      smann
      Helper I

      thanks for the reply MarcelBeug

       

      I didn't quite follow what you said (very new to power query and rusty on this stuff in general), but I think I got the gist. I made a function that takes a string and returns a table based on a bunch of if statements (e.g. if string="table1" then #"table1" else if string="table2" then #"table2" etc).

       

      let me know if that's what you had in mind. it's working so far as a workaround

      • MarcelBeug's avatar
        MarcelBeug
        Community Champion

        What I had in mind is to create a record for all tables you want to reference.

         

        Query MyTables:

         

        = [My Table = #"My Table", table1 = table1, table2 = table2]

        The function that returns the table based on the name of the table:

         

         

        = (table as text) as table => Expression.Evaluate(table,MyTables)

         

        But why don't you just reference the tables as table? It's quit rare to reference a table by the name of the table.,