由于我从自动获取的数据源中将前五列更改为适当的年份,所以我希望可以根据前五列中的值将“值”列设置为具有动态名称。
在DAX或Power Query中解决此问题将对您有所帮助。 谢谢
答案 0 :(得分:1)
使用Power Query的一种方法可能是实施一些步骤,例如:
" Value"
结尾)。" Value"
(这应该为您提供5个不同字符串的列表,所有这些都应该是表中列的名称)。下面的代码基本上尝试完成上述操作。
let
someTable = Table.FromRows({
{2018, 2019, 2020, 2021, 2022, 123, 355, 744, 234, 685},
{2018, 2019, 2020, 2021, 2022, 59, 1129, 254, 774, 490}
}, type table [
PFY2 = Int64.Type,
PFY = Int64.Type,
CFY = Int64.Type,
NFY = Int64.Type,
NFY2 = Int64.Type,
PFY2 Value = Int64.Type,
PFY Value = Int64.Type,
CFY Value = Int64.Type,
NFY Value = Int64.Type,
NFY2 Value = Int64.Type
]),
oldNames = List.LastN(Table.ColumnNames(someTable), 5),
columnsContainingNewNames = List.Transform(oldNames, each Text.BeforeDelimiter(_, " Value", {0, RelativePosition.FromEnd})),
newNames = List.Transform(columnsContainingNewNames, each Text.From(Table.Column(someTable, _){0})),
renamed = Table.RenameColumns(someTable, List.Zip({oldNames, newNames}))
in
renamed
一些问题:
为简单起见,我已经对5进行了硬编码,但是如果您的表可以更改(这样,您需要重命名的列可能并不总是最后5个),那么更动态的方法可能类似于:oldNames = List.Select(Table.ColumnNames(someTable), each Text.EndsWith(_, " Value"))
。这将选择所有以" Value"
结尾的列名,包括您可能不想重命名的所有列名,但这只是一个示例,您可以根据需要调整谓词函数。
如果表为空,那么我认为在第一行中查找值时会出错(因为在这种情况下不会出现第一行)。
< / li>答案 1 :(得分:0)
我不认为可以动态地重命名列
但是,您可以采用一种解决方法:
您可以使用当前日期创建5个小节,并找出所有年份
您可以将这些度量添加到表/矩阵并将其覆盖在主表上