JMP Live ist eine leistungsstarke Plattform für die Analyse und Visualisierung ständig wachsender Datensätze, insbesondere dank der Möglichkeit, Tabellen aus verbundenen Data Warehouses zu aktualisieren. Bei der Entwicklung neuer Produkte sind diese Pipelines jedoch oft unvollständig – und die Datenerfassung über mehrere Benutzer oder Standorte hinweg wird zu einer logistischen Herausforderung.
Hallo zusammen! Willkommen zu meiner Präsentation. Mein Name ist Timothy Whetstone, und ich bin hier mit meinem Co-Moderator Sage Darling. Wir arbeiten beide bei IDEXX Laboratories, und in dieser Präsentation geht es um die Nutzung von JMP Live als Data Warehouse.
Wir haben JMP Live im letzten Jahr sehr häufig genutzt. Wir finden es großartig, dass wir automatisch aktualisierte Tabellen für unsere verschiedenen, bereits vorhandenen Data Warehouses einrichten können, wenn wir über robuste Pipelines von der Datenerfassungsquelle zum Warehouse und dann zu JMP Live verfügen. Für diesen Anwendungsfall ist es wirklich großartig.
Durch die zunehmende Nutzung haben wir einige potenzielle Anwendungsfälle gefunden, die JMP Live unserer Meinung nach abdecken sollte, für die es aber nicht die nötige Funktionalität bietet. Dies gilt vor allem für Datenquellen oder Datengenerierungsquellen, die nicht in Cloud-Dienste oder große Data Warehouses eingebunden sind, sondern nur Dateien und Daten abrufen, die im Grunde nur lokal verfügbar sind. Dies gilt insbesondere dann, wenn Sie immer wieder Daten abrufen, die eigentlich zum eigentlichen Datensatz gehören, der Ihnen angezeigt werden soll, aber nur vorübergehend. Wir haben dabei an viele Längsschnittstudien gedacht.
Wir verfügen über diese manuellen Dateien. Wir möchten, dass sie grundsätzlich alle an einem Ort zusammengeführt werden. JMP Live ist hierfür normalerweise ein guter Ort, aber wir benötigen einen automatisierteren Weg, um die Dateien dorthin zu bringen, anstatt Tabellen ständig manuell herunterzuladen, zu verknüpfen und wieder hochzuladen.
Im Gespräch mit den Mitarbeitern von JMP haben sie mir diesen Code hier gegeben. Er war für unsere Arbeit von entscheidender Bedeutung. Er beschreibt, wie man mit einem Skript eine Tabelle aus JMP Live herunterladen und öffnen kann. Nachdem wir diesen Code erhalten hatten, kamen uns viele Ideen, wie wir ihn nutzen könnten. Es handelt sich im Grunde nur um eine HTTP-Anfrage. Sie existiert bereits und wird verwendet, um Daten von anderen Websites abzurufen. Der eigentliche Schlüssel zum Erfolg liegt jedoch darin, wie man die URL für die JMP Live-Tabellen erstellt. Darauf werden wir gleich noch näher eingehen. Sage, ich übergebe kurz an dich.
Ich habe das von Timothy gerade beschriebene Beispiel zum Herunterladen von Dateien aus JMP übernommen und war bereit, es in meinem Anwendungsfall direkt umzusetzen. Ich beschloss, zunächst eine Möglichkeit zu entwickeln, Tabellen aus JMP Live in einem eigenen Ordner zu speichern, lokal zu verknüpfen und anschließend an einen bestimmten Speicherort zurückzuladen. Dazu müssen einige Dinge geklärt werden, um eine Verbindung zu JMP Live herzustellen und die Informationen von JMP Live abzurufen. Hierfür habe ich mit meinem Code ein assoziatives Array erstellt, das ich bei der Initialisierung verwende.
Dies ist ein Beispiel für den Code, den wir im Add-In gefunden haben, das diese Informationen abruft. Mein Skript macht etwas Ähnliches. Es prüft, worauf der Benutzer in JMP Live Zugriff hat, und ruft die Ordner ab, auf die er Zugriff hat. Anschließend suchen wir nach Ordnern in Ordnern, um diesen Ordnern die von JMP als untergeordnet bezeichneten Elemente hinzuzufügen.
In diesem Fall erstellen wir mit diesem Code dynamisch das assoziative Array. Wenn ich mir also die Ordner ansehe, auf die Sie Zugriff haben, um den Upload durchzuführen, sucht dieser Code am Anfang des Skripts nach diesen Informationen. So sehen Sie alles, worauf Sie Zugriff haben, und können Dateien aus beliebigen Ordnern ziehen, verketten und an einem beliebigen Ort ablegen.
Dies ist nur ein kleiner Teil. Dieses assoziative Array wird auf diese Weise erstellt. Was wir letztendlich erreichen, ist, dass Sie mit diesem Add-In im Wesentlichen drei Optionen haben, die ich erstellt habe.
Die erste Option besteht darin, dass Sie einen JMP Live-Ordner zum Verketten auswählen können. Hierfür rufe ich beim Starten des assoziativen Arrays alle Ordner ab, auf die Sie Zugriff haben. Dadurch erhalten Sie eine Liste aller Ordner, auf die Sie Zugriff haben. So können Sie den Ordner zum Verketten und anschließend einen Ordner zum Speichern auswählen, der aus derselben assoziativen Array-Liste stammt. Als Nächstes können Sie eine zu aktualisierende Tabelle auswählen.
Basierend auf den hier eingegebenen Informationen werden alle Dateien im Live-Ordner, aus dem die Verkettung erfolgen soll, verkettet und anschließend in diesem Ordner (dem „Speichern in Ordner“) gespeichert. Anschließend werden sie als die ausgewählte Tabelle in diesem Ordner gespeichert. Diese werden alle den assoziativen Arrays zugeordnet, die ich Ihnen gerade im vorherigen Bildschirm für den Code gezeigt habe, der diese Informationen aus JMP Live basierend auf der für Sie eindeutigen JMP Live-Verbindung abruft.
Dies ist nur ein Teil der grundlegenden Arbeit. Das assoziative Array ruft die Daten ab, auf die Sie Zugriff haben. Sie müssen die Informationen jedoch herunterladen und wieder hochladen können. Ein wirklich praktischer Vorteil von JMP Live ist die Möglichkeit, eine URL zu erstellen, die Sie basierend auf dieser HTTP-Anfrage abrufen können. Dies ist ein Beispiel dafür, wie wir diese URL erstellen, die die Dateien im Wesentlichen lokal herunterlädt.
Ein Beispiel hierfür ist eine Basis-URL, die wir letztendlich für JMP Live verwenden. Hier sehen Sie ein Beispiel für den HTTPS-Firmennamen von JMP Live. In unserem Fall ist es IDEXX. Wir dürfen diese URL verwenden, um auf unser JMP Live zu verlinken. Von dort aus gibt es dann noch weitere Bereiche, die Sie bearbeiten müssen. Wie die API-Pakete ist dies ein statischer Teil der URL, der sich auf JMP Live bezieht.
Dann wissen wir, dass wir eine Live-ID haben. Eines der Elemente, die aus dem assoziativen Array, über das ich gerade gesprochen habe, abgerufen werden, ist die Live-ID, die auf die Ordner und dann auf die Datentabellen verweist. Auf diese Weise kann diese URL dynamisch basierend auf diesem assoziativen Array erstellt werden. Anschließend folgt ein weiteres statisches Element, „Daten“, gefolgt vom Namen der JMP Live-Datentabelle, die Sie dann aus dieser URL abrufen und anschließend den Inhalt herunterladen (die Datei „.JMPLive/contents“).
Auch hier ist dies nur ein Teil der Magie. Als Nächstes müssen Sie die JMP Live-Tabelle ersetzen. Sobald Sie alle Dateien in Ihrem Ordner gesammelt und in Ihrer lokalen JMP-Instanz verknüpft haben, müssen Sie sie irgendwo ablegen. Dies ist das Beispiel des Codes, den wir zum Ersetzen der JMP Live-Tabelle verwenden.
Wir erstellen eine neue Verbindung und stellen dann basierend auf diesem assoziativen Array die Informationen bereit, die Sie für die Tabelle ausgewählt haben, in die Sie hochladen möchten. Diese werden dann als neuer JMP Live-Inhalt bereitgestellt und zur Aktualisierung der Daten wieder an JMP Live gesendet. Auf diese Weise können Sie basierend auf den verknüpften Tabellen in Ihrem Ordner dynamische Aktualisierungen durchführen.
Was war mein Anwendungsfall? Das war etwas, bei dem wir beim Herumspielen dachten, das wäre cool für unsere lokalen Sachen. Wir konnten es unter anderem für die Stabilitätstrendanalyse verwenden. Hier ist ein Beispiel für den Code, den ich geschrieben habe und was er macht. Sie können von Anfang an das Startfenster dieses Codes sehen, das drei Eingaben zeigt, die ich Ihnen gerade ein paar Folien zuvor gezeigt habe. Sie müssen den Ordner auswählen. Im nächsten Schritt wählen Sie den Ordner aus, aus dem Sie die Daten ziehen möchten. In diesem Fall habe ich Stabilitäts-Rohdaten. Immer wenn meine Techniker weitere Daten ausführen, werden diese an diesem speziellen Ort in diesem Rohdatenordner abgelegt. Das ist der Ordner, der als Startordner für die Verkettung ausgewählt wird.
Anschließend weiß ich, dass ich es zu meinen Trenddaten hinzufügen möchte, da ich die Daten weiterhin mit dieser Datei verknüpfen möchte. Das ist meine nächste Auswahl, bei der ich einen JMP Live-Ordner zum Speichern auswähle. In diesem Fall wird es zu meinem Stabilitätstrend.
Da meine Stabilitätstrend-Datentabelle nur eine Tabelle enthält, wähle ich als Nächstes die Stabilitätstrend-Datentabelle aus. Dies ist jedoch die Tabelle, mit der ich begonnen habe. Sie kann beliebig benannt werden. Das assoziative Array zieht sie jedoch an diesen Speicherort. In diesem Fall habe ich zuerst die Tabelle erstellt. Bisher habe ich verwendet, dass die Tabelle bereits in JMP Live vorhanden sein muss, aber das wäre in Zukunft eine großartige Funktion, um … das ist schwer zu sagen, eine großartige Funktion in Zukunft. Es wäre großartig, diese Funktion weiterhin dynamisch hinzuzufügen, sodass Sie tatsächlich neue Datentabellen erstellen und diese verketten können, um sie an Speicherorten zu speichern, da sich Daten ändern können.
Wie sieht das in JMP Live aus? In JMP Live sehen Sie den Startordner. Dort sehen Sie die Zeitpunkte, die andere hochgeladen haben. In diesem Fall bin ich das. Techniker können ebenfalls von hier hochladen, sofern sie Zugriff haben. Dies sind die Tabellen, die verknüpft werden. Unten sehen Sie ein Beispiel in meinem Ordner mit Stabilitätstrends, der sich von meinen Rohdaten unterscheidet. Dort sehen Sie auch die Datentabelle, aus der ich Daten ändere.
Wie sieht das im Backend aus, wenn es tatsächlich passiert? Wenn Sie die Verkettung beobachten, geschieht etwas Magisches. Sie können JMP Live direkt sehen, wenn Sie diesen Code ausführen, da die Aktualisierung der Datentabelle in Echtzeit erfolgt. Im linken Fall sehen Sie, dass meine Ausgangsdatentabelle nur die Zeitpunkte 0 und 1 enthält. Wie Sie in der vorherigen Tabelle gesehen haben, gab es auch Zeitpunkte bis Nummer 3. Nachdem Sie den Code ausgeführt haben, sehen Sie, dass nun ein dritter Zeitpunkt mit diesen Tabellen verkettet wird.
Nachdem ich das abgeschlossen hatte und die Daten weiterhin nutzen wollte, arbeitete ich mit Timothy zusammen und sagte: „Hey, ich habe diesen Code. Er könnte für Sie nützlich sein, wenn Sie an das denken, was Sie hier in diesem Vortrag tun.“ Daraufhin nahm Timothy ihn und drehte ihn auf 11.
Vielen Dank, Sage. Ich habe mir dann einen Großteil der Arbeit von Sage zunutze gemacht und fand es wirklich toll, mehrere Dateien aus JMP Live zu einer neuen Tabelle zusammenfügen und diese dann wieder in JMP Live übertragen zu können. In meinem Anwendungsfall, bei dem ich Daten habe, die eigentlich nur lokal vorhanden sind, brauche ich eine gute Möglichkeit, diese in JMP Live zu übertragen und sie gleichzeitig mit den bereits vorhandenen Daten zu verknüpfen. Das wollte ich mit anderen teilen und mit ihnen zusammenarbeiten, nicht unbedingt am selben Ort, sodass wir beide unabhängig voneinander Daten zum selben Datensatz hinzufügen können. Ich wollte wirklich nicht, dass die Leute viel manuelle Arbeit leisten müssen.
Ich dachte: Was wäre, wenn ich ein Tool hätte, mit dem ich im Grunde nur eine Verbindung zu bestimmten Tabellen herstellen könnte? Darüber hinaus möchte ich auch die Möglichkeit haben, beliebige Daten-ETLs auszuführen. Wenn ich neue Spalten hinzufügen oder Übersichtstabellen erstellen und diese hochladen möchte, möchte ich unbedingt ein JMP-Workflow-Skript erstellen und es dann an bestimmte Tabellen und Projekte anhängen und es dann mit anderen teilen können, damit wir alle dasselbe ausführen, dieselben Tabellen aktualisieren und die Ergebnisse in Echtzeit sehen können.
Dies ist nur der Anfang eines Tool-Fensters. Wir werden in wenigen Sekunden einen Live-Walkthrough durchführen. Ich möchte zunächst noch etwas mehr vom Code durchgehen. Was die Skripte betrifft, so hat Sage alles zusammengeführt. Dabei verwende ich auch viele assoziative Arrays. So speichere ich viele projektspezifische Informationen und spezielle Skripte.
Sie haben vielleicht im vorherigen Fenster ein Skriptbearbeitungsfenster gesehen. Der Trick dabei ist die Verwendung der Funktion „Eval Parse“, die ich in eine ansonsten leere Funktion einbinde. So können Benutzer Skripte einfach in dieses Fenster einfügen. Beim Ausführen funktioniert alles perfekt: Tabellen werden analysiert, verknüpft und mit den Daten von JMP Live verknüpft. Wir unterbrechen die Präsentation kurz, um einige kurze Beispiele zu zeigen.
Hier ist zunächst ein JMP Live-Bereich und hier ist mein Tool, das gerade läuft. So sieht das Tool aus, wenn Sie es öffnen. Ganz oben finden Sie hier die Einstellungen. Diese können Sie speichern. Bei jedem Ausführen des Add-Ins werden die hier vorgenommenen Einstellungen übernommen. Sie enthalten den Namen Ihrer JMP Live-Verbindung, die Basis-URL für Ihr JMP Live und ob eine Tabellenliste in das Tool voreingestellt werden soll. Diese Tabellenliste finden Sie hier unten.
So entscheiden wir, welche Tabellen ich verfolgen und mit welchen Skripten ich sie verknüpfen möchte. Hier habe ich einige der Sage-Funktionen zum Hinzufügen neuer Tabellen übernommen (wir werden gleich dazu kommen). Ein wichtiger Aspekt für die Zusammenarbeit ist die Möglichkeit, Projektlisten zu laden. Wenn Sie Projektlisten mit anderen teilen, können diese diese laden.
Wenn ich einfach weitermache und eine zuvor erstellte Projektliste lade, sehen wir, dass ich diese Projektliste habe und sie zwei Tabellen enthält. Sie enthält die Tabelle „Not my Cat“ und die Tabelle „Weekly Weather Data“. Sie werden im Skriptteil feststellen, dass diese Tabellen etwas unterschiedliche Größen haben. Für diese Tabelle „Not my Cat“ habe ich nur ein einfaches Skript, das den Benutzer bei der Ausführung auffordert, eine zu öffnende Datei auszuwählen. Nach dem Öffnen gibt es diese Datei zurück. Das Beste daran ist, dass diese Datei, sobald sie zurückgegeben wird, mit der hier aufgeführten Tabelle verknüpft wird.
In diesem anderen Beispiel ist nicht nur die Datei geöffnet, sondern ich füge auch eine Spalte hinzu, die den Mittelwert zweier anderer Spalten berechnet. Ein Beispiel dafür: Ich kann weitermachen und die Tabelle mit den wöchentlichen Wetterdaten finden, die ich hier habe. Sie ist schon ziemlich umfangreich. Ich habe 124 Zeilen und gehe über verschiedene Wochen. Ich glaube, das sind die Wochen 1 bis 10. Ich kann durch die Tabelle scrollen.
Wenn ich dieses Tool ausführe, werde ich aufgefordert, eine Tabelle auszuwählen. Ich habe hier zufällig einen Ordner mit einigen dieser Tabellen. Ich kann die neue Tabelle nehmen, indem ich auf die Schaltfläche „Öffnen“ klicke. Dann warten wir einen Moment. Sie sehen, wie einige Tabellen auftauchen und wieder verschwinden. Dann sehen Sie in JMP Live, dass diese Daten aktualisiert wurden. Ich kann die Tabelle neu laden und bin jetzt bei 393 Zeilen.
Um noch eine weitere Tabelle hinzuzufügen: Wie Sie in JMP Live sehen, habe ich eine zweite Tabelle namens „Klassenmessungen“ und einen dazugehörigen Bericht. Ich klicke auf den Bericht. In diesem Bericht sehe ich, dass ich Messungen über drei Zeitpunkte für verschiedene Personen verfolge. Diese Tabelle ist noch nicht in meiner Liste, kann aber hinzugefügt werden. Mit demselben Skript, das Sage für die Suche in JMP Live entwickelt hat, bzw. dem, worauf Sie Zugriff haben, wird hier ein sehr ähnliches Popup-Fenster angezeigt. Ich gehe hier hinein, suche nach meinem Beispielordner, wähle meine Tabelle „Klassenmessungen“ aus und füge sie der Projektliste hinzu.
Wenn ich dies zur Projektliste hinzufüge, sehen Sie, dass ich weiterhin zwischen diesen anderen Elementen wechseln kann. Außerdem wird das sehr einfache Skript im Fenster vorab ausgefüllt, sodass ich es einfach ausführen und eine zu verkettende Datei auswählen kann. Das werde ich jetzt gleich tun. Ich gehe zu Zeitpunkt 3 in dieser Tabelle und habe zufällig die Datei für Zeitpunkt 4. Wenn ich auf die Schaltfläche „Öffnen“ klicke, wird die Datei angezeigt und verschwindet dann wieder. Wir können in JMP Live sehen, dass dieser Bericht neu generiert wird und Zeitpunkt 4 hinzugefügt wurde. Jeder, der Zugriff auf diese Tabelle hat, kann dieses Tool verwenden, um diese JMP Live-Tabellen mit den Daten zu aktualisieren, die er für dieses Projekt hat, solange ich ihm in JMP Live Zugriff darauf gewähre.
Wir können zurückgehen. Wir sehen, dass die Tabelle „Klassenmessungen“ ebenfalls aktualisiert wurde, da sie mit diesem Bericht verknüpft ist. Außerdem sind die Daten zum vierten Zeitpunkt vorhanden. Ich habe Daten zu einem fünften Zeitpunkt. Ich kann dies auch noch einmal ausführen, um sie hinzuzufügen. Wieder erscheint ein Schweif, verschwindet wieder und eine aktualisierte Version dieser Tabelle steht bereit. Ich klicke auf „Neu laden“ und sehe, dass die zusätzlichen Daten der Tabelle hinzugefügt wurden. Ich kann erneut zurückgehen und sehe, dass mein Diagramm ebenfalls aktualisiert wurde.
Das war für uns sehr spannend, was die Zusammenarbeit bei bestimmten Projekten angeht. Wir haben den Leuten einen etwas standardisierteren Workflow ermöglicht und ihnen die Möglichkeit gegeben, Skripte zu teilen, insbesondere für Leute, die noch lernen, wie man Workflows erstellt und einige dieser Abläufe automatisiert. Es kann wirklich hilfreich sein, ihnen solche Tools zur Verfügung zu stellen, um bestimmte Probleme bei unseren Multi-Site-Projekten zu vermeiden.