如何从表中动态重命名多个列?
例如:我想解析3个日期列并将它们重命名为balanceT1,balanceT2和balanceT3
首先,我解析了日期列:
balanceCols:string (cols balanceData) where ((string cols balanceData) like "*_*")and not (string cols balanceData) like "*Post*"
然后执行功能选择以重命名它们,但不起作用。
balanceData:?[balanceData;();0b;(`parentPort;`portfolio;`currency;`balanceT1;`balanceT2;`balanceT3;`minBalanceTransferUsd;`odSubPort)!(`parentPort;`portfolio;`currency;balanceCol;(^;0f;`minBalanceTransferUsd);`overdraftSubPortId)];
答案 0 :(得分:2)
在尝试创建字典时,您似乎正在创建一个嵌套的值列表,该字典的长度与键列表的长度不同。
例如,假设[Start]
定义为balanceCol
,然后:
`a`b`c
这里有6个值,但有8个键。要解决此问题,您可以将它们加在一起,如下所示:
q)count(`parentPort;`portfolio;`currency;`balanceT1;`balanceT2;`balanceT3;`minBalanceTransferUsd;`odSubPort)
8
q)balanceCol:`a`b`c
q)count(`parentPort;`portfolio;`currency;balanceCol;(^;0f;`minBalanceTransferUsd);`overdraftSubPortId)
6
至于使查询动态化,以下函数将允许您根据任意数量的日期列构建功能选择的字典,同时仍保留上面使用的列顺序。
`parentPort`portfolio`currency,balanceCol,enlist[(^;0f;`minBalanceTransferUsd)],`overdraftSubPortId