The other day I had a fun challenge from my co-worker – Søren Faurum – that wanted to change the refence to a column name from one table to another table with the same column name.
OBS – The solution is not supported in the Power BI Service.
In his case it was
Let
x= List.Distinct(tableName1[StoreKey])
in
x
And he wanted TableName1 to be a value of a parameter.
Here is an example (data is from AdventureWorks) – in my model I have two tables – DimReseller and DimCustomer – both have a GeographyKey

A parameter called TableName should now be used in a query to retrieve either the unique list of values of the key from either DimReseller or DimCustomer.
If we just use
List.Distinct(TableName[GeographyKey])

We do get an expression error as the parameter is a text value and not a table that has fields.
Then I thought we could the function Expression.Evaluate() – link to documentation –

But no – apparently, we can’t reference a Table name like this.
#shared to the rescue 🆘
Then I thought why not use the #shared function – as I knew that #shared will list all the functions, tables, parameters etc. that are available in the current pbix file – including all loaded or not loaded tables.

Then we can turn the record into a table and filter it based on a parameter

This will give us a table with one record.

Where the Value column will contain the table we want to be dynamic

Then by adding the following to the formula
- {0} to get the first row/record
- [Value] to retrieve the Table in the record
- And [GeographyKey]

We can get all the Geography Keys in the table
And by putting all of this into the argument of the List.Distinct function
= List.Distinct(Table.SelectRows(#"Converted to Table", each [Name] = TableName){0}[Value][GeographyKey])

Which returns 510 rows.

And now I can change the parameter to DimCustomer

And see it returns 336 rows

However if we publish the model to the Power BI Service it won’t work if you want to schedule refresh as #shared is not supported in the service.

So we can only use it in the desktop
Pingback: Power BI Insights: Referencing tables; Vertical layouts; Route maps; App display problems | MSDynamicsWorld.com
Pingback: Power BI Insights: Referencing tables; Vertical layouts; Route maps; App display problems ERP for Hong Kong SME
Brilliant trick! Exactly what I needed. Thanks 👍
You could simplify by eliminating steps:
Record.ToTable(…
Table.SelectRows(…{0}[Value][GeographyKey]
and replace by
List.Distinct(
Record.Field(#shared, TableName)[GeographyKey]
)