HAS_REFINEMENTSは、特定の属性で非暗黙的な絞込みが現在のナビゲーション・ステートにあるかどうかを計算します。
HAS_REFINEMENTS関数の構文は次のとおりです。
HAS_REFINEMENTS(<attribute>)
ここで、
attributeはコレクション内のDgraph属性(任意のデータ型)です。
特に、HAS_REFINEMENTSでは、グループ内の各レコードで特定の属性に同じ値があるかどうかが判別されます。ある場合、属性は実際の絞込み値を返すことができます。
戻り値
attributeがアトミック(単一割当て)タイプの場合、
HAS_REFINEMENTSの戻り動作は次のようになります。
- attributeがグループ内のすべての行でNULLの場合、HAS_REFINEMENTSはNULLを返します。
- attributeがグループ内のすべての行で同じ(NULL以外)の場合、HAS_REFINEMENTSはFALSEを返します。
- それ以外の場合(attributeに様々な値(NULLを含む場合もあるが、必ずしも含むわけではない)がある場合)、HAS_REFINEMENTSはTRUEを返します。
attributeがセット(複数割当て)タイプの場合、
HAS_REFINEMENTSの戻り動作は次のようになります。
- attributeがグループ内のすべての行で同じセットの場合、HAS_REFINEMENTSはFALSEを返します。これには、attributeがグループ内のすべての行で空のセットの場合が含まれます。
- それ以外の場合、HAS_REFINEMENTSはTRUEを返します。
HAS_REFINEMENTSでは、特定の属性に非暗黙的な絞込みがあるかどうかはわかりますが、それが何であるかはわからず、絞込み値を実際に返すこともしません。
HAS_REFINEMENTSの例
この例では、
HAS_REFINEMENTSを使用してACCT_FIRM属性に使用可能な絞込みがあるかどうかを確認します。
RETURN Result AS
SELECT
HAS_REFINEMENTS(ACCT_FIRM) AS Refs
FROM CorpData
GROUP
このケースでは、問合せはtrueを返します。つまり、属性に使用可能で非暗黙的な絞込みがあるということです。
NULLなどの空のセットの処理
HAS_REFINEMENTSでNULLなどの空のセットを処理する場合、次の例のように集計ごとの
WHERE句を
HAS_REFINEMENTS集計関数に追加します(xは複数割当ての属性です)。
RETURN Result AS
SELECT
HAS_REFINEMENTS(x) WHERE (x IS NOT EMPTY) AS Refs
FROM CorpData
GROUP
この構文では、
HAS_REFINEMENTSの戻り動作は次のようになります。
- グループ内の各行でxが空のセットの場合、HAS_REFINEMENTS(x) WHERE (x IS NOT EMPTY)はNULLです。
- xがグループ内の各行で空ではない同じセット値の場合、HAS_REFINEMENTS(x) WHERE (x IS NOT EMPTY)はFALSEです。
- そうではなく、xが様々なセット(空のセットを含む場合もあるが、必ずしも含むわけではない)の場合、HAS_REFINEMENTS(x) WHERE (x IS NOT EMPTY)はTRUEです。
集計ごとのWHERE句の詳細は、「集計ごとのフィルタ」を参照してください。