2017-09-19 36 views
2

この構文がQlikview読み込みスクリプトで機能しない理由はありますか?ロードスクリプトの変数の評価

Let v_myNumber = year(today()); 
Let v_myString = '2017-08'; 

If left($(v_myString),4) = text($(v_myNumber)) Then 
    'do something 
Else 
    'do something else 
End If; 

私は変数の文字列を数値に変換して、数値変数に対してこのように直接評価します。

+1

を読んでお勧めします'let'変数を使ってドル記号の拡張を行います。次のようにしてください: 'left(v_myString、4)= text(v_myNumber)Then ... ' – bdiamante

+0

Ok ...それについては疑問に思っていました。ドル記号の拡張が必要な​​ときとそうでないときを迅速に説明できますか?ありがとうございました! – Scott

答えて

3

左の関数は、他のものをパラメータとして取得していると期待しています。あなたが現在行っているように、関数はLeft(2017-08、4)と呼ばれ、QlikViewによってハンドルされません。

Left( '$(v_myString)'、4)を使用すると、期待どおりにLeft( '2017-08'、4)と評価されます。うまくいくはずの変数を引用符で囲むだけです。

QlikViewはそれらを変数と呼んでいますが、実際には、「実行時に置き換えられる(時には評価される)もの」と見なされるべきです。これは、標準的な「可変」動作とは少し異なります。

+0

これは私にとって理にかなっています。基本的には、それが文字列として評価されていないという事実になりました - 私がドルの展開を取り除くか、それを囲むように単一引用符を置かない限り。ありがとうございます – Scott

3

ドル記号の拡大が大きな課題ですが、要するに:

  • あなたが変数に設定されている場合 - $(のための必要はありませんが)。
  • 変数を使用している場合 - に$()を使用します。その文脈に依存する。
  • 評価が必要な変数を使用している場合は、$()を使用する必要があります。ロードスクリプトの例について :let var1 = 'if(a=1,1,2)' - ここでは、後でスクリプトには、おそらくそれは、その場で評価されます$(var1)として、この変数を使用したいと思うでしょう...私は今、そのもう少し明確に願っています

。変数は多くの方法でもパラメータを取ることができますで使用することができます!

例えば

var2 = $1*$2 

と、あなたはこのように使用することができます。これをさらなる調査のために6

が得られます$(var2(2,3))、私はあなたが必要としないthis

+0

説明ありがとうございます。基本的には関数のような変数を作成することができるとは思いませんでした。かなりきちんとした。 – Scott