Auswahl einschränken und nur eine Auswahl im DB-Abfragefilter zulassenIch möchte einen Abfragefilter, der nur einen Teil der Einträge in der Datenbank anzeigt. Ich möchte die Benutzer auch auf eine Auswahl beschränken. Hier ist Beispielcode, den ich in einem früheren Beitrag verwendet habe.
New SQL Query(
Version( 130 ), Connection( "JMP" ),
JMP Tables(
["SAT" => "$SAMPLE_DATA\SAT.jmp",<BR /> "SATByYear" => "$SAMPLE_DATA\SATByYear.jmp"]
),
QueryName( "SATQuery" ),
Select( Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table( "SAT", Alias( "t2" ),
Join( Type( Left Outer ),
EQ( Column( "State", "t1" ), Column( "State", "t2" ) ) &
EQ( Column( "% Taking (2004)", "t1" ),
Column( "% Taking (2004)", "t2" ) )
& EQ( Column( "X", "t1" ), Column( "X", "t2" ) )
& EQ( Column( "Y", "t1" ), Column( "Y", "t2" ) )
& EQ( Column( "Population", "t1" ), Column( "Population", "t2" ) )
& EQ( Column( "Latitude", "t1" ), Column( "Latitude", "t2" ) )
& EQ( Column( "Longitude", "t1" ), Column( "Longitude", "t2" ) )
)
)
),
Where(
In List( Column( "State", "t1" ),
_AllRows_,
UI( SelectListFilter(
ListBox,
Base( "Categorical",
Prompt( "State:", Character, PromptName( "t1.State_1" ),
ValueSource( Column( "State", Alias( "State" ), Table( "SATByYear" ) ) )
)
)
)
)
)
)
) << Run;Was ist zum Beispiel, wenn ich den Benutzern nur Alaska, Kalifornien, Hawaii, Oregon und Washington zeigen möchte?
Ich kann _AllRows_ durch {"Alaska", "California", "Hawaii", "Oregon", "Washington"} ersetzen. Das zeigt jedoch immer noch alle Zustände an. Es wählt nur die 5 Staaten in der Liste vor.
Meine eigentliche Anwendung ist eine große DB mit mehreren Filtern, daher möchte ich keine Zwischentabellen verwenden.
Außerdem möchte ich Benutzern erlauben, nur einen Zustand auszuwählen. Ist es möglich? Ich kann den Filtertyp ändern.
Betreff: Auswahl einschränken und nur eine Auswahl im DB-Abfragefilter zulassenEine Option besteht darin, eine Eingabeaufforderung für die Benutzerauswahl zu erzeugen, um diese ausgewählten Werte zur Ausführung an eine SQL-Anweisung zu übergeben.Das Skript kann die verwenden Datenbankverbindung erstellen () Und Führen Sie SQL aus () um mit Ihrer Datenbank zu interagieren. Das folgende ist ein einfacheres Beispiel, das zum Erstellen eines robusteren Skripts verwendet werden kann, sodass mehr Arbeit erforderlich ist, damit dies für Ihren Anwendungsfall funktioniert. Hoffentlich hilft Ihnen dies dabei, die gewünschten Ergebnisse zu erzielen.
//clearing all symbols.
Delete Symbols ();
//defining an empty value for selection so it can handle when nothing is selected.
selection = {};
//Prompt providing values available for said user
nwp = New Window( "States",
<<MODAL></MODAL>Betreff: Auswahl einschränken und nur eine Auswahl im DB-Abfragefilter zulassenVielen Dank für die Verwaltung meiner Erwartungen. Eine Korrektur ist, dass ich nicht darum gebeten habe, alles zu tun. Das Zurückgeben leerer Listen ist so einfach wie das Zurückgeben vollständiger Listen, wenn nichts ausgewählt ist. Die Beschränkung der Benutzer auf eine Auswahl ist für viele Sprachen und APIs üblich. Die Offenlegung nur einer Teilmenge möglicher Auswahlmöglichkeiten könnte die anspruchsvollste Anforderung sein. Entwickler könnten daran interessiert sein zu wissen, dass Interesse an diesen speziellen Funktionen besteht.
Ich verstehe, dass die Dinge Zeit brauchen, und erwarte keine dieser Funktionen sehr bald. In der Zwischenzeit waren die vorgeschlagenen Problemumgehungen meistens hilfreich. Dieses Forum wird geschätzt.
Wenn jemand Ressourcen zum Erstellen benutzerdefinierter DB-Abfragefilterschnittstellen in JMP empfehlen kann, bin ich sehr interessiert.
Ich untersuche auch andere Optionen wie JavaScript, Rails, R usw. Leute zu anderen Sprachen zu drängen, scheint jedoch keine angemessene Verwendung eines JMP-Diskussionsforums zu sein. Wenn ich also etwas anderes entwerfe, werde ich es hier nicht posten.
Betreff: Auswahl einschränken und nur eine Auswahl im DB-Abfragefilter zulassenFür ein allgemeines Tool wie den Query Builder von JMP kann es schwierig sein, alles zu erledigen.Haben Sie darüber nachgedacht, eine eigene benutzerdefinierte Oberfläche für die Abfrage zu erstellen?Es wird am Anfang mehr Arbeit sein, aber dann haben Sie genau die Funktionen, die Sie wollen.
Betreff: Auswahl einschränken und nur eine Auswahl im DB-Abfragefilter zulassenDanke, gzmorgan0 , Ihre Bemühungen sind hilfreich und werden geschätzt. Es passt nicht zu meiner Hoffnung, Zwischentabellen zu vermeiden, aber ich kann sehen, wie die Verwendung von Invisible und Set Dirty es für meinen Fall mit mehreren Filtern funktionieren lässt. Diese Lösung war mir nicht bekannt. Ich werde Ihre Antwort als Lösung markieren und hoffen, dass jemand eine Verbesserung postet.
Ich habe versucht, Dinge in Where und In List zu machen, vor allem mit ValueSource. Soweit ich das beurteilen kann, macht ValueSource nichts in meinen Skripten. Ich sehe es nicht im Scripting-Index.
Vielleicht bin ich von Online-Formularen verwöhnt. Dennoch möchte ich alle JMP-Entwickler bitten, die lesen, können Sie die folgenden Funktionen zu DB-Abfragefiltern hinzufügen.
- Gibt eine leere Liste zurück, wenn nichts ausgewählt ist (mein vorheriger Beitrag)
- Posten einer Teilmenge einer Spalte in einem ListBox-Filterfeld zulassen, möglicherweise mithilfe einer Liste irgendwo in Where oder In List
- Erlauben Sie Situationen, Benutzer auf die Auswahl nur eines Elements zu beschränken.
Betreff: Auswahl einschränken und nur eine Auswahl im DB-Abfragefilter zulassenIch habe 3 Möglichkeiten ausprobiert:
- Eine einfache Änderung an Ihrem Skript würde alle Staaten auflisten, aber die Liste der pazifischen Staaten vorab auswählen. Der Benutzer sieht die hervorgehobene Liste, muss jedoch STRG-Klick verwenden, um eine Auswahl zu treffen oder die Auswahl aufzuheben.
- Der gelöschte Beitrag enthielt ein Skript, das eine manuelle Liste verwendete. Es würde mit einer Liste der pazifischen Staaten auffordern. Es wurde jedoch nicht basierend auf der Benutzerauswahl gefiltert. Ich habe Ands und andere Syntax ausprobiert, aber die Abfrage hat immer den vollständigen Satz der pazifischen Staaten zurückgegeben.
- Die einzige Möglichkeit, die kleinere Liste zu erhalten, bestand darin, SATByYear zu öffnen, eine Teilmenge mithilfe einer Abfrage zu erstellen und dann diese Teiltabelle in New SQL Query zu verwenden. Hinweis << Set Dirty(0) setzt die Tabelle als unbearbeitet und die SQL-Abfrage schließt sie, sobald die Abfrage ausgeführt wird.
Names Default to Here(1);
dt0 = Open("$Sample_Data\SATByYear.jmp", "Invisible");
satby_dt = query(Table(dt0, "t1"),"Invisible", "SELECT DISTINCT * FROM t1
WHERE t1.State IN ( 'Alaska' , 'California' , 'Hawaii' , 'Oregon' , 'Washington' ) ");
close(dt0,NoSave);
satby_dt << Set Name("SATByYear");
satby_dt << set dirty(0);
wait(1);
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
[ "SATByYear" => "Source(satby_dt)", "SAT" => "$Sample_Data\SAT.jmp" ]
),
QueryName( "SQLQuery" ),
Select(
Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table(
"SAT",
Alias( "t2" ),
Join(
Type( Left Outer ),
EQ( Column( "State", "t2" ), Column( "State", "t1" ) ) &
EQ(
Column( "% Taking (2004)", "t2" ),
Column( "% Taking (2004)", "t1" )
) & EQ( Column( "X", "t2" ), Column( "X", "t1" ) ) &
EQ( Column( "Y", "t2" ), Column( "Y", "t1" ) ) &
EQ( Column( "Population", "t2" ), Column( "Population", "t1" ) ) &
EQ( Column( "Latitude", "t2" ), Column( "Latitude", "t1" ) ) &
EQ( Column( "Longitude", "t2" ), Column( "Longitude", "t1" ) )
)
)
),
Where(
In List(
Column( "State", "t1" ),
_AllRows_,
UI(
SelectListFilter(
ListBox,
Base(
"Categorical",
Prompt(
"State:",
Character,
PromptName( "t1.State_1" ),
ValueSource(
Column(
"State",
Alias( "State" ),
Table( "SATByYear" )
)
)
)
)
)
)
)
)
) << Run;
Betreff: Auswahl einschränken und nur eine Auswahl im DB-Abfragefilter zulassenIch habe meine erste Antwort gelöscht. Die manuelle Liste lieferte die erwarteten Eingabeaufforderungen, filterte jedoch nicht basierend auf der Benutzerauswahl.
Suchen Sie bald nach einem Update.