Я не могу найти хорошего способа решения этой проблемы. Я попытаюсь суммировать проблему как можно лучше:
Я использую Hyperion Essbase Excel ad-in для навигации внутри кубов OLAP. Здесь я пытаюсь сопоставить определенные метки со значениями измерения. Внутри этого измерения есть несколько уровней группировки данных, поэтому у одного дочернего узла может быть несколько уровней родителей. Я могу заранее знать, какие будут члены, но они могут меняться каждый месяц, и поиск отсутствующих членов может быть утомительным, поэтому мы используем родительские элементы и увеличиваем их. Однако внутри одного родителя может быть несколько разных меток. Я добился части этого с помощью VLOOKUP(), и если текущая строка не найдена в моей таблице, то я ищу одну строку вниз и перетаскиваю эту формулу, это имеет следующий нежелательный эффект:
Я пронумеровал то, что идет вместе. Как вы можете видеть в моем примере, элемент "24566" также находится в родительском "FD120465". Результатом является то, что все элементы, найденные до него в той же группе, отображаются на "Expense B", но целевой результат заключается в том, что все дочерние элементы должны отображаться на "Expense D", но на "24566". Вот формула, которую я использовал в этом примере:
=IFERROR(VLOOKUP(C11,$C$3:$D$8,2,0), D12)
Есть несколько способов справиться с этим, которые я придумал, но ни один из них мне не нравится. Я мог бы сделать две разные формулы, одну, которая будет смотреть только на дочерние элементы, и другую, которая будет смотреть только на родительские элементы. Если дочерние элементы будут помещены первыми, неважно, что в группе будет размещена неправильная метка («24566» будет помечено как «Расход D» в оранжевой части). Это также имеет недостаток, заключающийся в необходимости дополнительной работы (определение областей, где использовать формулу 1 и формулу 2, и либо выполнение работы вручную, либо перебор с VBA...)
Другой способ — просто вынуть каждый дочерний элемент и поместить его в таблицу с его правильным отображением. Проблема в том, что у родителей может быть больше или меньше элементов каждый месяц, и отображение может меняться (хотя это должно происходить не так часто), поэтому управление каждым дочерним элементом станет утомительным. Пример, который я предоставил, крошечный по сравнению с тем, что есть у меня (15-20 дочерних элементов в родителе).
Это своего рода последний шанс, который я даю этой задаче, прежде чем мы остановимся на решении, которое имеет наименьшие недостатки. Есть ли очевидный (или даже не столь очевидный) способ решить эту проблемучисто?
Спасибо !
решение1
Это работает, ЕСЛИ вы хотите того, чего, как я подозреваю, вы хотите, и начинаете с того места, где, как я подозреваю, вы находитесь. (Это не обязательно лучший способ добиться результата, который он дает на основе данных, но, по крайней мере, может помочь прояснить, что требуется.)
Добавьте вспомогательный столбец, чтобы у всех дочерних элементов был родительский элемент (при условии, что он у них есть):
B11=IF(LEFT(C11,2)="FD",C11,B12) (скопировано вниз по мере необходимости)
=IFERROR(VLOOKUP(C11,$C$3:$D$8,2,FALSE),VLOOKUP(B11,$C$3:$D$8,2,FALSE))
(в D11 скопировано до необходимого уровня).
Я предположил, что две нижние записи в таблице содержат опечатки.