プロパティ式のトラブル シューティング
プロパティは 2 つの異なる方法で挿入および解釈できるため、一見すると、正しい式が期待どおりに機能しないように思える場合があります。
[カスタム演算式] ダイアログまたは [計算カラムの追加] ダイアログ の [式] フィールドにプロパティを挿入する際に、以下のようなメッセージが表示される場合があります。
問題のいくつかは、[プロパティから設定] を使用して軸にプロパティを追加し、その式が軸に適合しない場合に発生する可能性もあります。その場合は、右クリックして、[カスタム演算式] ダイアログに移動して式を手動で変更する必要があります。以下の表で問題を特定してみてください。
[式] フィールドでのエラー テキスト | 式の例 | 考えられるエラー | 解決法 |
---|---|---|---|
式が不完全です。 または 式が空です。 または 式を評価できません。 |
${MyProperty}
|
インストールされたクライアントでダブルクリックまたは [プロパティの挿入] ボタンをクリックしてプロパティを式に挿入すると、プロパティがテキストとして挿入されます。 この構文では、Spotfire は、文字列プロパティ値を値ではなくカラム名または式の一部として解釈しようとします。 |
文字列プロパティの値を使用する場合は、式を引用符で囲みます:
代わりに、(インストールされたクライアントで) [カラム リストに使用できるプロパティ] リストのプロパティを右クリックして、ポップアップ メニューから [値として挿入] を選択することもできます。
プロパティにカラム名が保持されると想定されているが、カラム名に空白文字が含まれている場合は、プロパティ式を "[" 文字と "]" 文字で囲む必要があります。「]」文字をエスケープし、プロパティ文字列をカラムに変換する $esc() 関数を使用することもできます。
[プロパティから設定] を使用してプロパティを追加すると、式のエスケープ バージョンが自動的に取得されます。 |
式が未完成です。 |
Concatenate("My first string", ${EmptyProperty})
|
テキストとして挿入された文字列プロパティが空の場合、カラムとして解釈できません。Spotfire は、この例の 2 番目の引数がそこに存在することをまったく認識しません。 | 文字列プロパティの値を使用する場合は、式を引用符で囲みます。
代わりに、(インストールされたクライアントで) [カラム リストに使用できるプロパティ] リストのプロパティを右クリックして、ポップアップ メニューから [値として挿入] を選択することもできます。 カラムの内容を連結して使用する場合、プロパティが必ずカラムとして解釈されるためには、'[' 文字と ']' 文字でプロパティを囲む (または上記の
|
関数呼び出し 'DocumentProperty' の無効なタイプです。 |
DocumentProperty(MyProperty)
|
プロパティ関数を適用する場合、プロパティ名は、常に引用符内に記述する必要があります。 (インストールされたクライアントで) ポップアップ メニューから [値として挿入] ショートカットを使用すると、引用符が自動的に追加されます。 |
プロパティ名を引用符で囲みます。
|
'End of expression' が必要でしたが、1 行目の 12 文字目に ',' が検出されました。 または 式が無効です |
$map("sum([${MyListProperty}])", ",")
|
リスト値のプロパティが軸で使用されている場合、リスト値のプロパティを単一文字列にマップする必要があります。 式には、リスト内の各値で使用するテンプレートと、生成される式におけるリスト値の結合方法の仕様も含まれている必要があります。 プロパティを最初に挿入する際に取得される既定の式は、リスト値のプロパティに含まれるカラムの簡単なリストが必要な連続した軸に適しています。その他の場合はすべて、手動で変更する必要があります。 |
表示するものに応じて、既定の式を多少変更する必要があります。 カラム名の簡単なリストが必要な場合 (棒グラフの値軸で複数のカラムを表示する場合など)、この例の式でうまく機能します。"sum" 以外の集計統計量を使用する場合は、式の "sum" を置換するだけです。 カラムのリストをカテゴリ軸に表示する場合は、デフォルトの式を次のように変更する必要があります:
カテゴリ式は山かっこ "<>" で囲む必要があり、カテゴリのさまざまな組み合わせを処理する方法も指定する必要があります。 また、リスト値のプロパティに含まれているカラムの現在の選択タイプが、連続カラムとカテゴリカラムとで混在している場合もあります。プロパティ リストには、同じタイプのカラムのみが含まれていることを確認してください。 さらに、式を変更する必要がある場合があります。詳細については、式のプロパティ の「リスト値のプロパティ (複数選択)」セクションを参照してください。 |
1 行目の 5 文字目に '3' が検出されました。 |
${TimeSpanProperty}
|
式でプロパティ TimeSpan、Date、Time、または DateTime を使用する場合、式を手動で編集しないと、Expression Language で正しく解釈できません。 まず、プロパティ名を引用符で囲む必要があります。これにより、プロパティが文字列として解釈され、エラーを回避することができます。次に、値を実際に TimeSpan、Date、Time、または DateTime として解釈させるためには、いずれかの変換関数を使用する必要があります。 |
プロパティ名を引用符で囲み、対応する変換関数を使用します。
代わりに、(インストールされたクライアントで) [カラム リストに使用できるプロパティ] リストのプロパティを右クリックして、ポップアップ メニューから [値として挿入] を選択することもできます。
|
{Table は、${{Table} に定義されていません。 |
${{Table}}.{MyProperty}
|
名前に右丸かっこ (}) が含まれている場合、バックスラッシュ (\) でエスケープされる必要があります。 | "{Table}" というデータテーブルに含まれるデータテーブルのプロパティ MyProperty にアクセスするには、
|
$esc および $csearch についての詳細は、以下のとおりです。
$esc(expression)
$esc()
関数は、一般にカラム名のカラムの最後を示す "]" をエスケープして、カラム名に "[" と "]" を追加する場合に使用します。カラムとして解釈される必要がある空白文字を含むカラム名には、かっこが必要になります。$esc()
は $csearch()
関数と一緒に使用できます。引数は、プロパティ値になる式、またはドル記号 ($) で始まるプロパティ関数になる式です。
たとえば、データテーブル "A Data Table" に、"Column 1"、"Column 2[example]"、および "Sales" という 3 つのカラムがあるとします。式 $esc($csearch([A Data Table], "Col*"))
は、文字列 "[Column 1]" と "[Column 2[example]]]" の 2 つの要素を含むリストを返します。
$csearch([Data Table], "search string")
$csearch()
関数は、カラム名の「フィルター済み」リストを作成する場合に使用します。$csearch() 関数を使用すると、検索の制限式を使用して、データテーブルから多数のカラムを選択できます。この関数は、$map()
関数と一緒に使用される可能性があります。1 番目の引数は、データテーブルであり、2 番目の引数は、返されるカラム名を決定するのに使用される検索式を含む文字列です。この関数は、検索式を満たす、データテーブルに含まれる (エスケープされていない) カラム名のリストを返します。
たとえば、データテーブル "A Data Table" に、"Column 1"、"Column 2"、および "Sales" という 3 つのカラムがあるとします。式 $csearch([A Data Table], "Col*")
は、文字列 "Column 1" と "Column 2" の 2 つの要素を含むリストを返します。プロパティ MyTable に文字列 [A Data Table] が含まれ、プロパティ MyA に文字列 "Col*" が含まれている場合、$csearch(${MyTable}, "${MyA}")
は同じ結果を返します。
$map()
および $esc()
と一緒に $csearch
を使用すると、リスト値のプロパティに含まれるカラムに基づくカラム リストまたは計算を生成できます。たとえば、$map("sum($esc($csearch(${MyTable}, "*")))", "+")
は、検索式 *
がテーブル内のすべてのカラムを返すため、sum([Column 1])+sum([Column 2])+sum([Sales])
に展開されます。$esc()
関数は、リストに含まれる文字列がカラムとして解釈されるようにする場合やカラム名に空白文字が含まれる場合に必要です。
$csearch()
の主な想定用途は、ビジュアライゼーション軸の式で使用されることや、データ関数引数の式に組み込まれることです。$csearch()
がデータテーブル内のすべてのカラム (計算カラムを含む) を参照しているときは、$csearch() を計算カラムで使用することはあまり適切ではありません。計算カラムで使用した場合は、循環依存が発生する可能性があります。
プリプロセッサ式のデータテーブルまたはカラム名
プリプロセッサは、カラム名は何か、数字は何かについてのコンテキストや知識なしでテキストの置換のみを行うため、カラム名がいつ変更されたかを追跡する方法はありません。つまり、そのような名前が変更された場合は、プリプロセッサ式を手動で更新する必要があります。
- 可能であれば、プリプロセッサ構文の代わりに非プリプロセッサ構文を使用してください。たとえば、プロパティがまだ整数でない場合は、
${name}
の代わりにInteger(DocumentProperty("name"))
を使用して、値を整数に変換できます。 - これが不可能な場合は、名前が変更されない中間カラムを使用できます。たとえば、「A」という元のカラムがあるとします。その場合、式 [A] を使用して計算カラム「B」を追加できます。次に、「B」とプリプロセッサ構文を組み合わせて「C」を計算できます。データを置き換えるときに「A」の名前が「A2」に変更されると、カラム「B」は正しく更新され(プリプロセッサ構文が含まれていないため)、「C」は名前が変更されていない「B」のみに依存するため、正しく再計算されます。