2017-05-08 1 views
1

J'ai une situation où j'ai une liste d'ID de transaction contenant plusieurs combinaisons de produits. J'essaie d'écrire une requête qui me montrera les combinaisons de produits les plus courantes. Dans cet exemple de données, j'ai l'ID de transaction dans A, qui relie les produits ensemble, et le nom du produit dans B. Ce que je veux est une sortie qui me donne l'information en D et E - il n'a pas à ressembler cela, mais a besoin de donner la même information. J'aimerais partager mon travail actuel, mais je n'ai absolument aucune idée de comment commencer à s'attaquer à celui-ci, donc toutes les idées seraient chaleureusement accueillies.Comment écrire une requête qui génère les combinaisons les plus courantes avec google query

https://docs.google.com/spreadsheets/d/1flJ4yM-E8v7A2nRMjjR1J27oqVa-eE5-8wH7TFd6UQg/edit#gid=1452792924

enter image description here

Répondre

2

essayer. En C4 mis:

=unique(A4:A25) 

En D4 mettre et copier vers le bas:

=join(", ",query(FILTER(A4:B25,A4:A25=C4),"Select Col2")) 

Dans E4 mettre et copier vers le bas:

=JOIN(", ",SORT(TRANSPOSE(SPLIT(D4,", ",FALSE)))) 

Dans F4 mis:

=QUERY({E:E,E:E},"select Col1, count(Col2) where Col1 != '' group by Col1 order by count(Col2) desc label count(Col2) ''",1) 

Vous pouvez masquer Col C, D, & E.

+0

Génial! Le seul problème est que cette solution repose sur les produits achetés dans le même ordre, par exemple. un pantalon, une chemise, des chaussures - ce que montrent mes données de test - mais ce que j'ai trouvé c'est que si la transaction a les mêmes produits mais dans un ordre différent, par exemple. chaussures, chemise, pantalon la solution voit cela comme une combinaison différente car je suppose qu'il cherche la même chaîne –

+0

Essayez la réponse révisée. Il trie les mots dans les cellules jointes. –

0

S'il vous plaît essayer cette formule:

=QUERY( {UNIQUE(FILTER(A4:A,A4:A>0)),TRANSPOSE(SPLIT(JOIN("",FILTER(B4:B&", "&if(A4:A<>OFFSET(A4:A,1,0),"|",""),A4:A<>0)),", |",0))}, "select Col2, count(Col1) group by Col2 order by count(Col1) desc label count(Col1) ''")


La formule suppose la liste des Ids est triée. Sinon, je suggère de trier les données en premier.