Я создал селектор таблиц, который может создавать множество таблиц из главной таблицы путем фильтрации по определенному столбцу, который мне нужен, с необходимыми значениями.
Я бы хотел, чтобы столбцы таблицы, то есть 'requests'deals'users
, были динамическими в зависимости от значения, введенного в функцию через переменную fltr
. Итак, если я запустил следующую строку:
fn[tabl;enlist 'Method;enlist 'Electronic];
Тогда это отфильтрует главную таблицу и вернет таблицу с тремя столбцами со следующими именами: 'requestsElectronic'dealsElectronic'usersElectronic
.
Я пробовал разные варианты string
и sv
с итераторами и постоянно получаю ошибку mismatched types
.
Любая помощь будет принята с благодарностью!
Вы можете фильтровать имена столбцов таблицы, используя like
(https://code.kx.com/q/ref/like):
q)tabl:flip`col1`col2`requestsElectronic`dealsElectronic`usersElectronic!(`a`b;1 2;01b;01b;01b)
q)fltr:`Electronic
q){x where x like "*",string[y],"*"}[cols tabl;fltr]
`requestsElectronic`dealsElectronic`usersElectronic
Затем вы можете либо заменить жестко запрограммированный список столбцов в предложенииwhere этим результатом, либо выбрать эти столбцы из таблицы с помощью команды take (#
):
q)#[;tabl]{x where x like "*",string[y],"*"}[cols tabl;fltr]
requestsElectronic dealsElectronic usersElectronic
--------------------------------------------------
0 0 0
1 1 1
Надеюсь это поможет
Вы можете заменить жестко закодированный список имен столбцов, которые у вас есть в качестве ключей вашего словаря, на результат из первого блока кода. Эту фильтрацию можно выполнить внутри вашей функции.
Есть ли способ напрямую включить это в функцию? То есть отредактировать
c
так, чтобы ключевые значения словаря имели это динамическое изменение, и это не отдельная функция, которую мне нужно было бы надстраивать сверху?