テーブル参照に関する質問(ラッセルから)
この質問は、「 Re:2022Q1実践セッション-初心者」-そして他の人にもディスカッションに参加してもらいたいので、ディスカッションフォーラムに投稿しました。
今日示したテーブル参照に関する質問:スクリプトの一部として複数のテーブルを順番に処理する場合、テーブル参照を無限に反復しますか(dt1、dt2、dt3、...)、よりスマートなソリューションはありますか?
背景:私は頻繁にテーブルを操作し(結合、連結、分割など)、場合によっては、必要な最終テーブルが得られるまで、同じスクリプト内の次のテーブルに移動する前に、順番に開いたり、処理したり、閉じたりするテーブルがかなりあります。 。
Re:テーブル参照に関する質問(ラッセルから)こんにちは@Ressel 、
それは本当にあなたが最終的に何をしたいかに依存します。 同じ方法で処理して後で閉じる100個のデータテーブルがある場合、100個のテーブルすべてを開いてから1つずつ処理するよりも、ループ(各テーブルを開く、処理する、閉じる)の方がうまくいく可能性があります。もう1つ。 1つの理由は、システム側で別の問題を引き起こす可能性のあるウィンドウハンドルをそれほど多く作成しないことです。
一般に、テーブル変数名についてはもう少しわかりやすいので、それが理にかなっている場合は、それが何であるかをよりよく理解します。 「dt」は主にダーティハック用です;)
また、開いているすべてのデータテーブルを取得し、それらを使用してループすることもできます。
Get Data Table List();
これはおそらく賢明な動きでしょう。
他の人はこれについてどう思いますか?
Re:テーブル参照に関する質問(ラッセルから)私は同意します@martindemel 、ファイルが存在する場所、ファイルを処理する順序、およびファイルで何をしたいかによって異なります。 JSLには、拡張ログの外部に役立つ多くの組み込み関数があります。 例えば、ディレクトリ内のファイルディレクトリ内のすべてのファイルのリストが表示されます。 ファイルを選択ディレクトリから1つ以上のファイルをインタラクティブに選択できます。 拡張ログはインタラクティブな操作をうまくキャプチャしますが、ハードコードされたテーブル名の参照をテーブルへの変数の参照に置き換える必要があります。 @martindemelこれを使用していくつかを示したdt = Open(..。 ほとんどの場合、ファイルを開くJSL操作は、作成されたデータテーブルへのハンドルを返します。 データテーブルハンドルは、テーブルにメッセージを送信したときにも作成されます。テーブルメニュー。 たとえば、サブセットを作成している場合、構文
subsetDT = dt << Subset(...
新しく作成されたテーブルへの参照をキャプチャできます。 他のテーブル操作も同様に機能します。
Re:テーブル参照に関する質問(ラッセルから)返信ありがとうございます。 私が取り組んでいることの背景についてもう少し。
ODBCを介してGoogleCloudPlatform実装からテーブルをロードします。 このテーブルは、最近の製造データで定期的に更新されます。 たとえば、私がロードする最初のテーブル(私はそれを次のように参照しますdt )バッチID、さまざまなQCパラメータのパラメータ名、測定結果、および測定単位が別々の列に表示されます。 QCパラメータ名で分割します(そして出力を次のように参照しますdt2 、 閉鎖dt )。 次に、たとえば、バッチIDと製造場所を相互参照する別のテーブルをロードします(これは、 dt3 )。 その後、私は参加するかもしれませんdt2とdt3 、 作成dt4などなど、分析を進める前に必要と思われるすべての情報を含むテーブルができるまで続きます。 一部のスクリプトでは、10個近くのテーブルを処理していますが、すべて次のように参照されています。 dt(n) 。 これは私の現在のスキルレベルが許すものです。
管理図にこのようなスクリプトを使用する中期的な計画があります。 現時点では、傾向を視覚的に評価し、スクリーンショットまたはhtmlでエクスポートされたチャートをさまざまな利害関係者に送信するだけです。
この会話から私が奪うのは、より説明的なテーブル参照を使用することです。 これらは、ハンドルと呼ばれるものでもありますか?
Re:テーブル参照に関する質問(ラッセルから)わかりやすいハンドル/参照名は、ある時点であなた(またはコードを変更しなければならない他の誰か)に役立ちます。 これにより、Show(dt_batchid_loc);を使用できる場合、デバッグ印刷も簡単になります。たとえば、作成されたテーブル名を確認します。
また、テーブルを作成するときに出力テーブル(「テーブルの名前」)を使用すると便利な場合があります。 これは、(いつ)コードをデバッグする必要がある場合に役立ちます。 これを行わない場合(私はこれをスキップする傾向があり、時々私を悩ませます)、「QCによる無題3041の要約」と比較すると、「BatchID_with_Loc」のような名前からどのテーブルが開いているかを確認する方がはるかに簡単です。 、Loc」など。
Re:テーブル参照に関する質問(ラッセルから)データベースでテーブル操作を行う可能性もあります(たとえば、Query BuilderまたはネイティブSQLによるクエリ定義)。 これは、トラフィックを回避し、サーバーに大きな負荷をかけるため、大規模なデータセットに有利です。 次に、JMPで処理するテーブルも少なくなります。
Re:テーブル参照に関する質問(ラッセルから)以前にクエリビルダーを使用してみました。 それは信じられないほど遅く、絶えずクラッシュし続けました。 そこでSASテクニカルサポートに連絡しましたが、問題を解決できませんでした。 その結果、スクリプトで個々のテーブルを処理することに固執しました。クエリビルダーのパフォーマンスが悪いことを考えると、はるかに便利で効率的です。 これは、ロードしているテーブルに10万以上の行があることが原因である可能性があります。これは、少なくともテクニカルサポートの結論でした。 残念ながら、私はこれらの「大規模な」テーブル以外に頼る場所はほとんどありません。
また、早急にデバッグに精通する必要があると思います。 私は何とかコードのいくつかの有用な行を「まとめる」ことができますが、アーキテクチャ、美学、または;を考慮していません。実際のところ;デバッグ可能なスクリプトを作成する方法。 残念ながら、それは私にとってまだ外国の概念です。