2016-07-12 4 views
1

Manchmal habe ich eine verschachtelte Tabelle (Tabelle in einer Tabellenzelle) und möchte einen Filter auf die innere Tabelle anwenden, indem ich Schematiq-Funktionen verwende. Der allgemeine Funktionsaufruf ist mir klar, aber das Problem tritt auf, wenn es darum geht, die richtigen Anführungszeichen auf die verschiedenen Argumente anzuwenden. Ich möchte nach einer bestimmten Zeichenfolge filtern, aber da ich bereits doppelte Anführungszeichen für das äußere Funktions-Snippet und einfache Anführungszeichen für das innere Funktions-Snippet verwende, weiß ich nicht, was ich verwenden soll, um die Zeichenfolge zu zitieren, nach der ich suche. Ich habe mehrere Optionen versucht, die letzte istFiltern in der inneren Tabelle in verschachtelten Tabellen

=tbl.CalculateColumn(C23,"Result","r =>tbl.Filter(r,'tier_info2','=SPOT2')") 

Können Sie mir bitte helfen, wie diese zu lösen?

Antwort

0

Sie sind eigentlich sehr nah an der richtigen Lösung hier, in dem tbl.CalculateColumn() können Sie tun, was Sie möchten, um die Werte in einer Spalte, so in diesem Fall eine Tabellenfunktion wie tbl.Filter() auf eine Spalte von Tabellen ist genau das richtige tun. Die Schwierigkeit besteht darin, die verschachtelten Anführungszeichen direkt im Snippet zu finden.

Schematiq können Sie entweder einfache oder doppelte Anführungszeichen in Schnipsel verwenden, was Sie tun, aber die innere Schnipsel Sie 'tbl.Filter()' Bedürfnisse vorbei sind Anführungszeichen um SPOT2 sonst haben (in einer Excel-Formel) SPOT2 wird behandelt, als ein benannter Bereich anstatt als Text. Um eine wörtliche Zitat in einem Zitat zu schreiben, haben Sie es verdoppeln, so sollte die folgende für Sie arbeiten:

=tbl.CalculateColumn(C23,"Result","r =>tbl.Filter(r,'tier_info2','=''SPOT2''')") 

(beachten Sie, dass ich zwei Apostrophe auf jeder Seite SPOT2 hinzugefügt haben)

All diese Verschachtelung von Anführungszeichen ist jedoch etwas umständlich, so dass eine Alternative darin besteht, das Snippet in eine eigene Zelle zu verschieben. Dies macht auch wahrscheinlich Ihr Blatt ein wenig leichter zu lesen:

C24: r => tbl.Filter(r, "tier_info2", "='SPOT2'") 
C25: =tbl.CalculateColumn(C23, "Result", C24) 

Durch die Schnipsel in ihre eigenen Zelle zu bewegen, gibt es keine Notwendigkeit, die ganze Sache in doppelten Anführungszeichen zu wickeln, so dass Sie doppelte Anführungszeichen um den Code-Schnipsel verwenden kann und einfache Anführungszeichen um den Textwert.

Eine weitere Alternative ist es, den inneren Filter Schnipsel in einen Eingang zu der Funktion zu machen, und verwendet fn.FixInput() seinen Wert für die Berechnung zur Verfügung zu stellen: immer in C24

C24: (fn, tbl) => tbl.Filter(tbl, 'tier_info2', fn) 
C25: '='SPOT2' 
C26: =tbl.CalculateColumn(C23, "Result", fn.FixInput(C24, C25)) 

fn.FixInput() fixen den fn Eingang mit dem Schnipsel das Snippet von C25 sein, dann tbl.CalculateColumn() wendet die Funktion an, indem es die Spaltenwerte als den verbleibenden tbl-Eingang übergibt. Indem Sie die beiden Snippets voneinander trennen, können Sie die Filterlogik bei Bedarf leichter sehen und später ändern. Natürlich könnte dieser Ansatz auch in einer Zelle kombiniert werden, und das würde ich insgesamt empfehlen, wenn Sie Ihre Formel in nur einer Zelle behalten möchten:

Verwandte Themen