Привет, у меня есть следующие данные
И хотите получить следующий результат
Эти данные в настоящее время хранятся в динамически генерируемом диапазоне и имеют 2414 строк и 27 столбцов. Каждое значение представляет собой срез номеров дел, которые получают ретро-платежи в данном месяце. Дело номер 122207 получает ретро-платеж в декабре, дела номер 116282 и 122207 получают ретро-платеж в феврале.
Я генерирую диапазон по следующей формуле:
=LET(a, RetroTable[Case Number],
b, RetroTable[Retro Units],
c, CHOOSECOLS(RetroTable, XMATCH(Analysis!A2#, RetroTable[#Headers])),
a*ABS(b*c))
При этом A2# представляет собой массив месяцев 27x1 (2 года и 3 месяца отслеживания ретро-единиц).
По сути, происходит следующее: если в столбце ретро-единиц ретро-таблицы есть число, отличное от 0, и ненулевое число в конкретном столбце месяца в таблице, то это считается случаем старения, и я хочу задокументировать его как таковое. . Затем умножив его на фактическое число, я получу фактический номер дела.
Но мне нужен массив, содержащий только ненулевые числа. Я попытался добавить условие фильтра, например:
=LET(a, RetroTable[Case Number],
b, RetroTable[Retro Units],
c, CHOOSECOLS(RetroTable, XMATCH(Analysis!A2#, RetroTable[#Headers])),
filter(a*ABS(b*c), a*ABS(b*c)<>0))
Но это приводит к ошибке #VALUE.
Я попробовал небольшую формулу
=LET(a, RetroTable[Case Number],
b, RetroTable[Retro Units],
c, CHOOSECOLS(RetroTable, XMATCH(Analysis!A2#, RetroTable[#Headers])),
SMALL(IF(a*ABS(b*c)=0, "", a*ABS(b*c)), SEQUENCE(ROWS(RetroTable))))
Но поскольку данные необходимы ежемесячно, эта формула не работает, поскольку теряет целостность столбца/строки. Это превращает все в один столбец, и мне нужно, чтобы каждый месяц был разделен, но связан.
Я хочу удалить все нули, свернуть каждый ежемесячный столбец только в его значения и иметь переменную длину списка для каждого месяца в зависимости от того, сколько ненулевых чисел отображается в исходном отчете.
да @nkalvi, это смежный квартал
Пожалуйста, опубликуйте ожидаемый результат в ОП, отредактировав то же самое, чтобы другие пользователи могли визуализировать то, что вам нужно.
Обновлено 8 июля 2024 г.
=LET(
comment_1, "Set this to = a*ABS(b*c)",
case_unit_month, A1:E14,
header, TAKE(case_unit_month, 1),
numbers, DROP(case_unit_month, 1),
aging_case_numbers, BYCOL(
numbers,
LAMBDA(col, ARRAYTOTEXT(TOCOL(IF(col, col, NA()), 3)))
),
TRANSPOSE(VSTACK(header, aging_case_numbers))
)
привет @nkalvi! Для февраля значение должно быть 116282 и 122207, так как появляются оба числа.
Извините, забыл завернуть колонку :)
позволь мне попробовать кое-что
О да. Позвольте мне подключить его :)
ОК, проблема — ретро-таблица, это исходные данные, имеет 49 столбцов, в которых содержится много другой информации о случаях. Я показал вам диапазон анализа, который получает информацию, строго относящуюся к количеству случаев старения. Формулы, которые я вставил, я поместил их в диапазон и попытался заменить ссылки на таблицы именованным диапазоном, но продолжаю получать ошибки #value. Проблема проявляется во внутренней индексной функции, поскольку она пытается сослаться на именованный диапазон, который я заменил.
Кроме того, я видел ошибки #value из-за CHOOSECOLS. В любом случае, через пару часов я еще раз посмотрю.
Пожалуйста, взгляните на обновление, когда у вас будет возможность. Хотелось бы знать, понял ли я проблему :)
да, ты понял.
Попробуйте что-нибудь в этом роде, используя MAKEARRAY()
:
=LET(
_Body, RetroTable,
_Rows, MAX(MMULT(SEQUENCE(,ROWS(_Body))^0,N(_Body>0))),
_Output, IFERROR(MAKEARRAY(_Rows,COLUMNS(_Body),
LAMBDA(r,c, INDEX(FILTER(INDEX(_Body,,c),INDEX(_Body,,c),""),r))),""),
VSTACK(RetroTable[#Headers],_Output))
Обновленная формула в соответствии с ожидаемым выходным изменением OP:
=TRANSPOSE(VSTACK(RetroTable[#Headers],
BYCOL(RetroTable,LAMBDA(α,TEXTJOIN(",",1,IF(α,α,""))))))
Эй, а результат XMATCH(Anaанализ!A2#, RetroTable[#Headers]) представляет собой непрерывный блок?