2D условный расчет - PullRequest
       21

2D условный расчет

1 голос
/ 18 февраля 2020

У меня есть электронная таблица со списком проданных товаров со временем , где у каждого товара есть свой класс (я бы предпочел, чтобы уроки были неограниченными, но я также мог бы жить с предопределенными классами) и статус активен /неактивный. Мне нужна формула массива для H5, чтобы заполнить желтую область (только активные продукты). Я пытался с комбинацией MMULT и Arrayformula, но не повезло, может быть, кто-то может мне помочь.

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

Класс A:

=ARRAYFORMULA(MMULT(IF(($C2:$F2="Class A")*($C3:$F3=TRUE); 
 INDIRECT("C5:F"&COUNTA($A5:$A)+4)*1; 0); TRANSPOSE(SIGN($C5:$F5))))

Класс B:

=ARRAYFORMULA(MMULT(IF(($C2:$F2="Class B")*($C3:$F3=TRUE); 
 INDIRECT("C5:F"&COUNTA($A5:$A)+4)*1; 0); TRANSPOSE(SIGN($C5:$F5))))

0

, чтобы включить его неограниченно, удалите F:

0

0 голосов
/ 19 февраля 2020

Вот еще один подход, который пытается решить проблему «бесконечных столбцов». Трудность с этим вопросом связана с двумерной природой данных, поэтому один из подходов состоит в нормализации или обратном повороте данных, чтобы на одну единицу данных приходилась одна строка. Есть несколько способов сделать это см. Предыдущий вопрос , но я решил использовать метод vlookup:

=ArrayFormula({sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A)),
vlookup(roundup(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A))/counta(Sheet10!C3:3),0),{sequence(counta(Sheet10!A5:A)),filter(Sheet10!A5:A,Sheet10!A5:A<>"")},2,false),
hlookup(mod(sequence(counta(Sheet10!C2:2)*counta(Sheet10!A5:A),1,0),counta(Sheet10!C2:2)),{sequence(1,counta(Sheet10!C2:2),0);filter(Sheet10!C2:2,Sheet10!C2:2<>"")},2,false),
hlookup(mod(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A),1,0),counta(Sheet10!C3:3)),{sequence(1,counta(Sheet10!C3:3),0);filter(Sheet10!C3:3,Sheet10!C3:3<>"")},2,false),
vlookup(roundup(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A))/counta(Sheet10!C3:3),0),{sequence(counta(Sheet10!A5:A)),Sheet10!C5:index(Sheet10!C5:Z1000,counta(Sheet10!A5:A),counta(Sheet10!C3:3))},mod(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A),1,0),counta(Sheet10!C3:3))+2)
})

Это дает вам:

enter image description here

Как только вы получили это, довольно просто заключить его в сводный запрос, чтобы получить необходимые итоговые значения:

=ArrayFormula(query({sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A)),
vlookup(roundup(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A))/counta(Sheet10!C3:3),0),{sequence(counta(Sheet10!A5:A)),filter(Sheet10!A5:A,Sheet10!A5:A<>"")},2,false),
hlookup(mod(sequence(counta(Sheet10!C2:2)*counta(Sheet10!A5:A),1,0),counta(Sheet10!C2:2)),{sequence(1,counta(Sheet10!C2:2),0);filter(Sheet10!C2:2,Sheet10!C2:2<>"")},2,false),
hlookup(mod(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A),1,0),counta(Sheet10!C3:3)),{sequence(1,counta(Sheet10!C3:3),0);filter(Sheet10!C3:3,Sheet10!C3:3<>"")},2,false),
vlookup(roundup(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A))/counta(Sheet10!C3:3),0),{sequence(counta(Sheet10!A5:A)),Sheet10!C5:index(Sheet10!C5:Z1000,counta(Sheet10!A5:A),counta(Sheet10!C3:3))},mod(sequence(counta(Sheet10!C3:3)*counta(Sheet10!A5:A),1,0),counta(Sheet10!C3:3))+2)
},"select Col2,sum(Col5) where Col4=TRUE group by Col2 pivot Col3 label Col2 'Date' format Col2 'dd-mmm-yyyy'"))

, который дает вам

enter image description here

0 голосов
/ 18 февраля 2020

Вам понадобится

  • формула массива, чтобы применить критерии ко всем строкам
  • if, чтобы проверить, установлены ли флажки
  • для суммирования по нескольким столбцам с одним и тем же классом

Вот как вы можете это сделать:

Введите H5

=ARRAYFORMULA(if(AND(C$3=true; C$2="Class A");C5:C8;0)+if(AND(D$3=true; D$2="Class A");D5:D8;0)+if(AND(E$3=true; E$2="Class A");E5:E8;0)+if(AND(F$3=true; F$2="Class A");F5:F8;0))

и в I5

=ARRAYFORMULA(if(AND(C$3=true; C$2="Class B");C5:C8;0)+if(AND(D$3=true; D$2="Class B");D5:D8;0)+if(AND(E$3=true; E$2="Class B");E5:E8;0)+if(AND(F$3=true; F$2="Class B");F5:F8;0))

...