This article will discuss about the ability to add a dynamic ColumnId to a calculated table into a tabular model.
In order to do add the dynamic ColumnId we will use a DAX expression. For the purpose of this article, we will use a simple model. This simple model contains a table called DimProduct:

First, we add a new calculated table in our existing model. This calculated table gets the existing value from the column, DimProduct[ColorName]. For that, we write the DAX expression to insert our new calculated table into our model:
=UNION(
ALL(DimProduct[ColorName]);
DATATABLE(
"Color"; STRING;
{
{"*custom*"};
{"Cyan"};
{"Magenta"};
{"Lime"};
{"Maroon"}
}
)
)
This DAX expression gets all the distinct value from DimProduct[ColorName] and adds new custom values. As you can see, in the resulting data, all the value from "*custom*" are not present in the existing DimProduct Table:

Secondly, we have to get the ColorId corresponding to the ColorName in the existing DimProduct table. To do this, we add a new column ColordId2 by using a DAX expression again. This new column will be our intermediate column to calculate our dynamic ColumnId:
=VALUE(LOOKUPVALUE(
DimProduct[ColorID];
DimProduct[ColorName];
DimColor[ColorName])
)
As we can see, we have all the id values corresponding to the DimProduct[ColorId], except those new values from our calculated table DimColor.
Third, we write a DAX expression to complete the sequence of id automatically if the value of ColorId2 is blank :
=IF(
ISBLANK(DimColor[ColorId2]);
MAX(DimColor[ColorId2]) + RANKX( FILTER(DimColor; ISBLANK(DimColor[ColorId2])); DimColor[ColorName]; DimColor[ColorName]; ASC; Skip);
DimColor[ColorId2]
)
Now, all the missing id values are completed by the DAX expression.
This technique is useful by adding new value from existing table while keeping existing id values.