You can't have a dimension based upon a call to a table calc function (such as index()), nor an aggregate function (such as sum()).
You can however convert a measure to discrete, which will allow you to use it to create headers in your view.
There is a good reason for this restriction. Dimensions are used early in the order of operations to partition data rows into blocks. They are effectively the group by clause in a SQL statement. Aggregate functions such as sum() are then applied to each partition, and table calcs are applied even later to the aggregated query results. So you can't use those results to go back in time and generate a different partition of your data rows -- which is why Tableau won't allow you to make those fields into dimensions.
Luckily, once you understand the order of operations, you can usually find other ways to get effect you need.
As a footnote, you can create a dimension based on a FIXED LOD calculated field that includes calls to an aggregate function -- such as { FIXED [Region] : CountD([Customer]) }.