HAS_REFINEMENTS

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句の詳細は、「集計ごとのフィルタ」を参照してください。