.. index:: Core Operations; Projection .. _core-operation-projection: Projection ================================== Projection reduces ledger to rows with distinct attribute values while aggregating their values. Structure --------- .. code-block:: json { "_schema": "Projection_1.0", "columns": ["EventId"] } Parameters ---------- +-------------------+----------+------------------------+------------------------+ | Parameter Name | Required | Type | Description | +===================+==========+========================+========================+ | ``columns`` | Yes | ``string list`` | List of column names | +-------------------+----------+------------------------+------------------------+ Behaviour -------------- Records cannot be reduced by ``Trial``, ``Time``, ``Type`` of ``Value`` column. Records with different ``Trial``, ``Time`` or ``Type`` are always distinct and cannot be combined using projection, and ``Value`` is storing accumulated value of merged records with identical attributes. Output records will be reduced by the attributes that are listed in the ``columns`` list. Those attributes should exists in the loaded data. :ref:`node_path` is a special column name that can be used in the ``columns`` list. It stores path of the record through the graph, therefore different records may have a different path. If :ref:`node_path` is not listed in the ``columns`` list (default behavior) then the records path is ignored during projection and records generated by the projection have a new node path, indicating origination at the projection. If :ref:`node_path` is listed in the columns list, then records with different paths are not combined and output records preserve original paths + label of the projection.