アイテムの計算属性
計算属性機能を使用すると、利用可能な dRofus フィールドを使用して動的に計算式を作成し、
追加フィールドを作成することができます。計算属性は、部屋、アイテム、オカレンス、
製品で利用でき、単純なものから非常に複雑なものまで作成できます。この方法について、
以下に説明します。 部屋の計算属性, アイテムの計算属性 や、 オカレンスの計算属性。
計算された属性フォーマットこれらはdRofus全体で同じです。
アイテム複合テキスト属性 ルールはこれらの属性と組み合わせることができるため、
作業の進め方についての基本的な理解は、スタート地点としては最適です。
計算属性を作成するには、管理設定で設定を行うため、データベースへの管理者アクセス権が必要です。詳細はこちらをご覧下さい。 プロジェクトとデータベース管理.
アイテム If/Then の例
Excelで複雑なルールを作成したことがあるなら、if/then式をご存知かもしれません。
IF-THENの構文は = IF (論理式, 真の場合の値, 偽の場合の値) です。最初の引数は、比較が有効な場合に何を行うかを関数に指示します。2番目の引数は、比較が偽の場合に何を行うかを関数に指示します。
この概念については、インターネットで簡単に検索すれば複数の例が見つかります。
この例では、アイテムデータからいくつかのルールを抽出し、結果を通知するために使用します。
ドア計算を調べたことがあるなら、このページをブックマークして職場で自慢したくなるでしょう。
オーストラリアのチームがこのアイデアを考案しました。
アイテムデータを活用して他の意思決定に役立てる、素晴らしい事例だと私たちは考えています。
青色のフィールド (アイテムデータ) を使用して、赤色の結果 (計算属性) を導き出した結果がこちらです。
.png?inst-v=f4d2c140-b6aa-483e-97fa-b58226755fdb)
5つの例すべてが、そのグループラベルを使用して “ドアの計算” の下にグループ化されています。
以下の各例について説明します:
クリア開口は、引き算とif/then式を組み合わせて、ドアが完全に開いた状態で人や物体が、通過できる
有効幅を算出します。この計算では、単一ドアか二重ドアかによって異なる計算式が適用されます。
パネルAとBの幅から始めます。パネルAがゼロの場合、必要な寸法がまだ指定されていないため、
ドアについては考慮しません。次に、パネルBの幅がゼロの場合、ドアは単一ドアとみなします。
この場合、計算ではパネルAからパネルの厚み、フレームストップ、ヒンジ余裕分を差し引きます。
最後に、パネルBがゼロでない場合、それは二重ドアとみなします。
パネルAとBを合計し、その後パネルの厚みとヒンジ余裕分を2回差し引きます。

開口部の有効幅は、アクセシビリティに関する適合基準によって規定されることが多く、
この事例は計画・設計段階で非適合ドアを特定する可能性を持っております。
注文用フレームのスケジュール作成時、パネルサイズは主要情報ではなく、
代わりに開口部高さ (Reveal Height) と幅 (Width) が必要となるため、以下の2例が参考になります:
開口部高さ(Reveal Height)は、パネルの高さと床仕上げの余裕分を単純に加算したものです。
必要に応じて、パネルアンダーカットと床仕上げの余裕分を別途組み込むことも可能です。

表示幅もif/then式であり、アイテムデータからパネル幅とパネル幅クリアランスに関するルールを、
組み込みます。これはif/then式内のif/then構造であり、最初に最初のルールがチェックされ、
続いて、2番目のルールセットが適用されます。パネルAがゼロの場合、リベール幅はゼロとする。
パネルAの幅が、ゼロでない場合、第二のif/then条件としてパネルBの状態を確認する。
パネルBがゼロの場合、パネルAをパネル幅クリアランスに加算する。パネルBがゼロでない場合、
パネルAをパネルBに、さらにパネル幅のクリアランスを2つ加算します。

ドアを後付けする場合や石造壁に設置する場合、構造開口部のサイズが必要となります。
以下の2つの例は、計算属性フィールドの活用例として適しています:
構造高さは単純な加算で定義されます。開口高さに枠上枠高さを加算します。
では開口高さの値はどこから来るのでしょうか?これも別の計算属性です。
そう、数式の上にさらに数式を構築できるのです。

構造幅は、リビール高を用いた最初の条件式によっても定義されます。
ルールは以下の通りです:パネルBの幅がゼロ(つまり幅がない、またはセカンドパネルが存在しない)場合、リビールの幅とフレームのアーキトレーブを合算します。一方、パネルBの幅が存在する場合は、
フレームのアーキトレーブを2度加算し、パネルBの幅を含む両パネルに必要な追加幅を確保します。

これらの例は、プロジェクト計算がすべてのユーザーに提供されることの重要性を示しつつ、
同時に計算が確実に実行されることを保証する方法を示しています。
ほとんどの計算属性は数値を前提に設計されており、デフォルトの式では、式を構築する際に、フィールド {0} を括弧で囲みます。しかし、テキスト、はい/いいえ (yes/no) 、または、リスト値を使用したいと考える場合があります。例えば、2つのテキストフィールドが一致するか、両方の値が True であるかをチェックする場合などです。これらの式を機能させるには、括弧 ‘{0}’の周囲に一重引用符を追加する必要があります。これにより、数値ではなく文字列であることを認識させます。これらの例は、アイテム計算を使用して何が可能かを理解するための参考例です。
フォーマット | 概要 | 例 |
|---|---|---|
+ | 2つの数値オペランドの和を返します。 (加算) | {0} + {1} ~ 0:1, 1:4 = 5 |
- | 2つの数値オペランドの差を返します。(減算) | {0} - 4 ~ 0:10 = 6 |
* | 2つの数値オペランドの積を返します。(乗算) | {0} * {1} ~ 0:2, 1:3 = 6 |
/ | 2つの数値オペランドの商を返します。(除算) | if ( {1} = 0, 0, {0} / {1} ) ~ 0:9, 1:3 = 3 |
and | 両方のオペランドが真であるかどうかを示す。 | {0} < 10 and {0} > 0 ~ 0:5 = True |
or | いずれか一方、または両方のオペランドが真であるかどうかを示します。 | {0} < 2 or {0} >5 ~ 0:8 = True |
not | 論理演算子の値が偽の場合に真を返します。 | not ({0} < 0) ~ 0:-5 = False |
= | 左オペランドが、右オペランドと等しいかどうかを示します。 | {0} = 4 ~ 0:4 = True |
!= | 左オペランドが右オペランドと等しくないかどうかを示す。 | {0} != {1} ~ 0:2, 1:4 = True |
< | 左オペランドが右オペランドより小さいかどうかを示す。 | {0} < 0 ~ 0:2 = False |
<= | 左オペランドが右オペランド以下であるかどうかを示す。 | {0} <=2 ~ 0:2 = True |
> | 左オペランドが右オペランドより大きいかどうかを示す。 | {0} > 0 ~ 0:8 = True |
>= | 左オペランドが右オペランド以上であるかどうかを示す。 | {0} >= 5 ~ 0:10 = True |
if | 条件に基づいて値を返す | if ( {0} % {1} = 0, ‘Yes’, ‘No’ ) ~ 0:4, 1:2 = Yes |
in | 要素が値のリストに含まれているかどうかを返します。 | in ( {0}, {1}, {2}, {3} ) ~ 0:7, 1:4, 2:7, 3:9 = True 上記の例では、最初に宣言された引数 '{0}'は評価対象の値であり、この例では (~) の後の '0:7' で定義された数値 '7' です。 残りの引数 '{1},{2},{3}'は、 {0} が評価される対象となるリストを定義します。 この場合、値は 4, 7, 9, となります。初期値が 7であるため、評価対象のリストに '7' が含まれていることから、関数は 'True' を返します。 |
isNull | オペランドが null の場合、true を返します。 | isNull ( {0} ) ~ 0: = True |
substring | 指定されたテキストのスライスを返します。スライスは、0から始まる開始位置とオプションの終了位置によって決定されます。 | substring ( {0, 7) ~ 0:Doctor Rofus = Rofus |
contains | 最初の文字列オペランドが、2番目の文字列オペランドを含む場合に真を返します。 | contains ( {0}, {1} ) ~ 0:abc, 1:a = True |
length | テキスト内の文字数を返します。 | length ( {0} ) ~ 0:Hello = 5 |
replace | 最初のテキストオペランド内の部分文字列を置換します。2番目のテキストオペランドのすべての一致箇所は、3番目のテキストオペランドで置換されます。 | replace ( {0}, {1}, {2} ) ~ 0:Hello, 1:l, 2:xx = Hexxo |
startsWith | 最初の文字列オペランドが、2番目の文字列オペランドで始まる場合に真を返します。 | startsWith ( {0}, {1} ) ~ 0:Hello, 1:H = True |
endsWith | 最初の文字列オペランドが、2番目の文字列オペランドで終わる場合に真を返します。 | endsWith ( {0}, {1} ) ~ 0:Hello, 1:o = True |
regexIsMatch | 最初のテキストオペランドが、2番目のテキストオペランドを正規表現として使用した一致を含む場合、真を返します。 | regexIsMatch ( {0}, ‘a.*’ ) ~ 0:abc = True |
regexReplace | 最初のテキストオペランド内の部分文字列を置換します。2番目のテキストオペランドを正規表現として使用して見つかった全ての一致箇所が、3番目のテキストオペランドで置換されます。 | regexReplace ( {0}, ‘l+’, 'X' ) ~ 0:Hello = HeXo |
regexGroup | 正規表現グループの値を返します。グループインデックスは1から始まり、指定がない場合はデフォルトで1になります。 | regexGroup ( {0}, ‘(1+)’ ) ~ 0:Hello = ll |
Round | 値を最も近い整数、または指定された小数点以下の桁数に丸めます。 | Round ( {0}, 2) ~ 0:3.1415 = 3.14 |
Floor | 指定された数以下で、最も大きい整数を返します。 | Floor ( {0} ) ~ 0:1.5 = 1 |
Ceiling | 指定された数以上で、最も小さい整数を返します。 | Ceiling ( {0} ) ~ 0:1.5 = 2 |
Truncate | 数値の積分部分を計算します。 | Truncate ( {0} ) ~ 0:3.14 = 3 |
Abs | 指定された数値の絶対値を返します。 | Abs ( {0} ) ~ 0:-1 = 1 |
Min | 2つの数値のうち小さい方を返します。 | Min ( {0}, {1} ) ~ 0:-4, 1:23 = -4 |
Max | 2つの数値のうち大きい方を返します。 | Max ( {0}, {1} ) ~ 0:5, 1:8 = 8 |
Sqrt | 指定された数の平方根を返します。 | Sqrt ( {0} ) ~ 0:4 = 2 |
Pow | 指定された数を、指定された累乗で返します。 | Pow ( {0}, 2) ~ 0:3 = 9 |
Exp | 指定された累乗のeを返します。 | Exp ( {0} ) ~ 0:0 = 1 |
Log | 指定された数値の対数を返します。 | Log ( {0}, 10) ~ 0:1 = 0 |
Log10 | 指定された数値の10を底とする対数 (常用対数) を返します。 | Log10 ( {0} ) ~ 0:1 = 0 |
Sign | 数値の符号を示す値を返します。 | Sign ( {0} ) ~ 0:-10 = -1 |
Sin | 指定された角度の正弦を返します。 | Sin ( {0} ) ~ 0:0 = 0 |
Cos | 指定された角度の余弦を返します。 | Cos ( {0} ) ~ 0:0 = 1 |
Tan | 指定された角度の接線を返します。 | Tan ( {0} ) ~ 0:0 = 0 |
Asin | 指定された数値が正弦となる角度を返します。 | Asin ( {0} ) ~ 0:0 = 0 |
Acos | 指定された数値のコサインを持つ角度を返します。 | Acos ( {0} ) ~ 0:1 = 0 |
Atan | 指定された数値の接線を持つ角度を返します。 | Atan ( {0} ) ~ 0:0 = 0 |
この方法については、オカレンス計算属性をご参照ください。