2

この iif ステートメントを入力しましたが、入力した表現が複雑であると表示されており、これにアプローチする方法について誰かアドバイスをいただけますか。数式を分割する必要があると思いますか。

IIf([MarkUpI]=100 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=101 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=200 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=201 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=300 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1, 
IIf([MarkUpI]=400 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=500 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*1.03, 
IIf([MarkUpI]=600 And [Stock/NonStock1]="Stock",[QTY1]+[UnitPrice1]*22, 
IIf([MarkUpI]=100 And [Stock/NonStock1]="Non-Stock",[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=101 And [Stock/NonStock1]="Non-Stock",[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=200 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.22, 
IIf([MarkUpI]=201 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=300 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1, 
IIf([MarkUpI]=400 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.05, 
IIf([MarkUpI]=500 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*1.03, 
IIf([MarkUpI]=600 And [Stock/NonStock1]=Non-Stock,[QTY1]+[UnitPrice1]*22,0))))))))))))))))
4

3 に答える 3

1

Switch()埋め込みの代わりに関数を使用することを検討してくださいiif
係数が 1.22 の 5 つのケースを「Else」ケースとして残すこともできます。

[MarkUpI] と [Stock/NonStock1] の値が異なるテーブルを作成し、そのテーブルを結合して必要なものを取得することもできるようです。

于 2013-03-06T16:48:39.460 に答える
1

本当にすべてをクエリで実行したい場合は、次のように Switch 関数を使用します。

[QTY1]+[UnitPrice1] *
IIf([Stock/NonStock1]="Stock",
Switch([MarkUpI]=100,1.22,[MarkUpI]=101,1.22,[MarkUpI]=200,1.22,[MarkUpI]=201,1.22,[MarkUpI]=300,1,[MarkUpI]=400,1.05,[MarkUpI]=500,1.03,[MarkUpI]=600,22,0),
Switch([MarkUpI]=100,1.22,[MarkUpI]=101,1.05,[MarkUpI]=200,1.22,[MarkUpI]=201,1.05,[MarkUpI]=300,1,[MarkUpI]=400,1.05,[MarkUpI]=500,1.03,[MarkUpI]=600,22,0))

しかし、他の人が強く示唆しているように、実際にはルックアップ テーブルを使用したいと考えています。後で値を変更する方がはるかに簡単で、次のようになります。

Stocked MarkupI Amt
Stock   100 1.22
Stock   101 1.22
Stock   200 1.22
Stock   201 1.22
Stock   300 1
Stock   400 1.05
Stock   500 1.03
Stock   600 22
Non-Stock   100 1.22
Non-Stock   101 1.05
Non-Stock   200 1.22
Non-Stock   201 1.05
Non-Stock   300 1
Non-Stock   400 1.05
Non-Stock   500 1.03
Non-Stock   600 22
于 2013-03-06T18:41:27.873 に答える
1

アクセスにはネストされた IIF の量に制限があるようですが、あなたのケースでは、それを 2 つのメイン IIF (ストックと非ストック用) に分割し、他の IIF をこれらの内部にネストして、次のように共通の計算を削除できます。

CalcResult: [QTY1]+[UnitPrice1] *
    IIf([Stock/NonStock1]="Stock",
        IIf([MarkUpI]=100,1.22,
        IIf([MarkUpI]=101,1.22,
        IIf([MarkUpI]=200,1.22,
        IIf([MarkUpI]=201,1.22,
        IIf([MarkUpI]=300,1,
        IIf([MarkUpI]=400,1.05,
        IIf([MarkUpI]=500,1.03,
        IIf([MarkUpI]=600,22,0)))))))),
    IIf([Stock/NonStock1]="Non-Stock",
        IIf([MarkUpI]=100,1.22,
        IIf([MarkUpI]=101,1.05,
        IIf([MarkUpI]=200,1.22,
        IIf([MarkUpI]=201,1.05,
        IIf([MarkUpI]=300,1,
        IIf([MarkUpI]=400,1.05,
        IIf([MarkUpI]=500,1.03,
        IIf([MarkUpI]=600,22,0))))))))))

注:これが最善の方法であると言っているわけではありません (ルックアップ テーブルの方が優れていることにも同意します) が、これで問題を回避できます。

于 2013-03-06T17:55:55.590 に答える