複数のデータ テーブルを持つアプリケーションで、ローカル データ フィルターが正しく作成されないこんにちは、複数のデータ テーブルを参照するアプリケーションを作成しようとしています。そのアプリケーション内には、各データ テーブルのグラフに適用されるデータ フィルターがあります。 ローカル データ フィルタを挿入すると、列オプションは正しくなります。 ただし、アプリケーションを実行すると、すべてのローカル データ フィルターが最後に開いたデータ テーブルを参照します。 どちらもアプリケーションビルダーで正しいデータテーブルを参照していると言っていますが、これはアプリケーションの起動中に何らかの形で変更されます.
たとえば、次の 2 つのサンプル データセットを使用します。
JMP App(
Set Name( "Application" ),
Set Description(
"An empty workspace for creating custom applications with one or more windows and scripts"
),
Auto Launch( 1 ),
Snap To Grid( 1 ),
Show Grid( 1 ),
Show Properties( 1 ),
Show Sources( 1 ),
Group By Category( 1 ),
Dashboard Mode( 0 ),
Parameters,
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "Full Path" ),
Set Invisible( 0 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "Full Path" ),
Set Invisible( 0 )
)
),
Script(JSL Quote(// This script is executed when the application is run.
// Named objects have been created for the application modules
// (for example, "Module1") and the pre-defined object
// "thisApplication" refers to the application object itself.
// Variables and functions declared here are scoped to the
// Application namespace.
) ),
Allocate(
Module1 = Plan(
PreAllocate,
Script(JSL Quote(// This script is executed when a new module instance is
// created. The pre-defined object "thisModuleInstance" refers
// to the instance object, but other objects such as boxes and
// scripts have not yet been created. Variables declared here are
// scoped to the ModuleInstance namespace.
// This special function will receive parameters passed to CreateInstance()
OnModuleLoad({},
);
thisModuleInstance << Create Objects;
// After this point your module instance objects have been created
// and can be referred to by name (for example, "Button1").
) ),
Allocate(
List1 = V List Box();
Splitter1 = H Splitter Box();
DataFilter1 = DataTable1 << Data Filter( Local );
Report3 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) )
)
);
Splitter2 = H Splitter Box();
DataFilter2 = DataTable2 << Data Filter( Local );
Report2 = Platform(
DataTable2,
Bivariate( Y( :Head ), X( :Mass ) )
);
),
Organize(
Reparent( Splitter2( Report2 ) );
Reparent( Splitter2( DataFilter2 ) );
Reparent( List1( Splitter2 ) );
Reparent( Splitter1( Report3 ) );
Reparent( Splitter1( DataFilter1 ) );
Reparent( List1( Splitter1 ) );
Relocate( List1( 160, 160 ) );
),
Initialize(
List1 << Background Color( 2147483647 );
List1 << Border( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Enabled( 1 );
List1 << Horizontal Alignment( "Default" );
List1 << Margin( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Padding( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Text Color( 2147483647 );
List1 << Vertical Alignment( "Default" );
List1 << Visibility( "Visible" );
List1 << set horizontal( 0 );
Splitter1 << Background Color( 2147483647 );
Splitter1 << Border(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Enabled( 1 );
Splitter1 << Horizontal Alignment( "Default" );
Splitter1 << Margin(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Padding(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Text Color( 2147483647 );
Splitter1 << Vertical Alignment( "Default" );
Splitter1 << Visibility( "Visible" );
Splitter1 << Dockable( 0 );
Splitter1 << Set Width( 835 );
Splitter1 << Set Height( 497 );
Splitter1 << Set Sizes( {0.5, 0.5} );
Splitter1 << set horizontal( 1 );
Splitter1 << Set Min Size( 835, 497 );
Splitter1 << Set Max Size( 835, 497 );
Splitter1 << Set Auto Stretching( 1, 1 );
Splitter2 << Background Color( 2147483647 );
Splitter2 << Border(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Enabled( 1 );
Splitter2 << Horizontal Alignment( "Default" );
Splitter2 << Margin(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Padding(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Text Color( 2147483647 );
Splitter2 << Vertical Alignment( "Default" );
Splitter2 << Visibility( "Visible" );
Splitter2 << Dockable( 0 );
Splitter2 << Set Width( 648 );
Splitter2 << Set Height( 338 );
Splitter2 << Set Sizes( {0.5, 0.5} );
Splitter2 << set horizontal( 1 );
Splitter2 << Set Min Size( 648, 338 );
Splitter2 << Set Max Size( 648, 338 );
Splitter2 << Set Auto Stretching( 1, 1 );
)
)
),
Initialize(
Module1 << Auto Launch( 1 );
Module1 << Set Module Type( "Report" );
Module1 << Set Window Title( "^TABLENAME - ^APPNAME" );
Module1 << Set Min Size( 0, 0 );
Module1 << Set Max Size( 30000, 30000 );
Module1 << Set Auto Stretching( ., . );
)
) << EditRe: 複数のデータ テーブルを持つアプリケーションで、ローカル データ フィルターが正しく作成されないこの問題は、JMP 15.2 以降で対処されることを確認できます。 アプリケーション内の複数のローカル データ フィルターは、適切なデータ テーブルへの接続を維持します。
Re: 複数のデータ テーブルを持つアプリケーションで、ローカル データ フィルターが正しく作成されないこれはうまくいきました!! どうもありがとう! アプリケーションを作成しているスクリプトが見えなくなったと思ったことが主な原因で、回避策を見つけることができませんでした。 アプリケーションが十分に大きくなったとき (28 以上のローカル データ フィルタとそれらすべてを保持する表示要素を備えた 60 以上のプラットフォーム)、「スクリプトを保存」オプションは、アプリケーションのカスタム スクリプト部分を提供しているように見えました。 すべての Allocate 関数を 1 行にまとめただけであることがわかりました。 再フォーマット スクリプトを実行すると、数百行の追加行が表示されました。 これは必ずしもバグではないと思いますが、知っておく必要があると思いました。
手順に従ったところ、すべてが正常に機能しているとのことでした。 ただし、スクリプトに戻ってフィルターを正しく編集する前に、アプリケーション全体を作成する必要があるため、今後の反復でこれが修正されることを願っています。
Re: 複数のデータ テーブルを持つアプリケーションで、ローカル データ フィルターが正しく作成されないこんにちは、キャメロンさん、返信ありがとうございます。 それが実際に私が最初に持っていた方法ですが、それはそれ自体の問題のセットを作成します. アプリケーションの他の場所で、これらのフィルターに適用する設定をスクリプト化しました (実際のアプリケーションには 12 以上あります)。 フィルタがプラットフォームの一部として含まれていたとき、スクリプトを使用してフィルタにアクセスする方法がわかりませんでした。 基本的に、プラットフォームにコマンドをスクリプト化する方法がわかりませんでした。それらの表示項目だけでした。 これは別の問題ですが、これを解決する方法を知っていれば、それも役に立ちます!
Re: 複数のデータ テーブルを持つアプリケーションで、ローカル データ フィルターが正しく作成されないこんにちは、
あなたが見ていたものを再現できました。 これは単なる回避策ですが、次のことを試してください。
1.提供したスクリプトから。 最後の行を「編集」ではなく「実行」に変更して、スクリプトを実行してみてください。 私の手元では、あなたのスクリプトは私が期待することを実行します。
2. アプリケーションをビルドするときに、データ テーブルの場所を現在のデータ テーブルではなく名前に変更します。
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "name" ),
Set Invisible( 0 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "name" ),
Set Invisible( 0 )
)
),
[場所] オプションは一番下にあります。
「割り当て」ポインターが期待どおりでない場合があります。 そのため、スクリプトで、フィルター 1 がテーブル 1 を指し、フィルター 2 がテーブル 2 を指していることを再確認します。
Allocate(
List1 = V List Box();
Splitter1 = H Splitter Box();
DataFilter1 = DataTable1 << Data Filter( Local );
Report3 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) )
)
);Re: 複数のデータ テーブルを持つアプリケーションで、ローカル データ フィルターが正しく作成されないやあ@ドープアゴニスト、
これはかなり奇妙な動作であり、おそらく開発者の注意を引くに値します。アプリケーションをゼロから構築し、スクリプト内のローカル データ フィルターの関連付けを正しいテーブルに変更することについて説明した内容を確認しました。を使用してスクリプトに手動で追加することにより、適切なデータフィルターを表示することができました
Splitter1 << Prepend(DataTable1 << Data Filter("Local"));
Splitter2 << Prepend(DataTable2 << Data Filter("Local"));しかし、これはまだ機能しません。どちらの方法でも、何らかの理由でローカル データ フィルターがテーブルに正しく接続されていません。フィルターの値を変更しても、テーブル内の行の選択には影響しません。
アプリケーションに取り込む分析プラットフォームからデータ フィルターを作成すると、フィルターは機能します。例えば:
JMP App(
Set Name( "Application" ),
Set Description(
"An empty workspace for creating custom applications with one or more windows and scripts"
),
Auto Launch( 1 ),
Snap To Grid( 1 ),
Show Grid( 1 ),
Show Properties( 1 ),
Show Sources( 1 ),
Group By Category( 1 ),
Dashboard Mode( 0 ),
Parameters,
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "Full Path" ),
Set Invisible( 1 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "Full Path" ),
Set Invisible( 1 )
)
),
Script(JSL Quote(// This script is executed when the application is run.
// Named objects have been created for the application modules
// (for example, "Module1") and the pre-defined object
// "thisApplication" refers to the application object itself.
// Variables and functions declared here are scoped to the
// Application namespace.
) ),
Allocate(
Module1 = Plan(
PreAllocate,
Script(JSL Quote(// This script is executed when a new module instance is
// created. The pre-defined object "thisModuleInstance" refers
// to the instance object, but other objects such as boxes and
// scripts have not yet been created. Variables declared here are
// scoped to the ModuleInstance namespace.
// This special function will receive parameters passed to CreateInstance()
OnModuleLoad({},
);
thisModuleInstance << Create Objects;
// After this point your module instance objects have been created
// and can be referred to by name (for example, "Button1").
) ),
Allocate(
Report2 = Platform(
DataTable2,
Bivariate(
Y( :Head ),
X( :Mass ),
Automatic Recalc( 1 ),
Local Data Filter
)
);
Report1 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) ),
Automatic Recalc( 1 ),
Local Data Filter
)
);
),
Organize(
Relocate( Report1( 0, 0 ) );
Relocate( Report2( 10, 680 ) );
),
Initialize( Glue() )
)
),
Initialize(
Module1 << Auto Launch( 1 );
Module1 << Set Module Type( "Report" );
Module1 << Set Window Title( "^TABLENAME - ^APPNAME" );
Module1 << Set Min Size( 0, 0 );
Module1 << Set Max Size( 30000, 30000 );
Module1 << Set Auto Stretching( ., . );
)
) << Edit確かに、これはあなたが持っていたものとまったく同じようには見えませんが、おそらくあなたにとっては十分にうまくいくでしょう.