As your data grows and becomes more connected, you will often find yourself looking to highlight a sub-set of your data to tell more meaningful stories. In order to harness the power of the graph in Ardoq's dynamic views, you can now use plain and parameterized graph queries to identify: Value Streams, Data Flows, User Flows, Contextualized Architectures and much more. 

The powers of graph filters let you highlight only a selection of components and references in your visualization. The filters are highly flexibly and with the option to enhance them with a changeable selection component. 

Graph filters are global for all users in the organization and configured by the Ardoq organization administrator.

The Graph Filters are based on results from Gremlin graph queries, and it helps to have some basic knowledge with Gremlin before starting with graph filters. Here is an introduction to get going with Gremlin graph search. The graph filters are based on the results from a Gremlin graph query. 

Plain Graph Filters

The simplest graph filter is a Plain Graph Filter. The user can toggle it on and off. The filter will work together with all other filters and perspectives.

Parametrized Graph filters

These filters let you select where the graph filter will start its traversal of the graph. For example, if you have a graph filter that narrows down what you see based on the business unit you're in, you can populate the drop-down with all your business units, and create a filter that only shows what's relevant for that business unit.


Creating Graph Filters

You find all the tools for creating a new graph filter within the analytics page under the tabs graph filter overview.

Here you can view all your graph filters that belong to the organization. Start by clicking the CREATE NEW  button, where you have the option to either create a plain graph filter or a parameterized graph filter. Choose the plain graph filter for now, and we explain the parameterized graph filter further down. 

Now we are in the graph filter editor, which works very similar to the Gremlin graph search. Now we choose a fitting name and start with this simple gremlin query: g.V().has("fun_task", "true").  In my case, I have a workspace with daily tasks that have a field called “fun_task” that is either checked true or false. Go ahead and modify the query with a field and value that fits your data, and when ready, press the blue button TEST FILTER. You'll now see a table with the results returned by the graph filter, and the same results are applied to the graph filter. When you are satisfied with the results, remember to click the save button!

Now you are ready to apply the graph filter you just made. It will be further explained in the paragraphs below. The graph filters are available in quick perspectives for all users. The query only returns the ID’s of the affected components for filtering, so users need to have read access to the relevant workspaces for this to work.

If you get no results, or errors with your graph filter query, we are more than happy to help you with debugging. Start a chat, and one of our gremlin experts can ease the path for you into the Gremlin world.

Applying Graph Filters

You find the graph filters both in quick Perspectives and in the manage Perspectives dialog. When activating the filter, you will see only components and references from the result of the query, in the Ardoq views.

When applying a filter, you may notice that the checkbox shows up yellow or red. Yellow implies that the query returned empty and hide everything. A red checkbox means that the query returned with an error, which needs to be fixed for the graph filter to work.

Parameterized Graph Filters

The parameterized graph filters differ from a plain graph filter in that it includes a parameter. The graph filter can then return results depending on which parameter it is provided with. This functionality gives users the flexibility to change the graph filter results for their usage without having to modify the query. 

You create a parameterized graph filter by going to graph filter overview, click CREATE NEW and select  parameterized graph filter. You are now in the same editor as when creating a plain graph filter, except this time, you creating one parameter query, and one graph filter using the parameter. The parameter query provides the options to use when applying the graph filter.

First, we edit the parameter query g.V().has("fun_task", "true") with the same example as above, and click RUN PARAMETER QUERY. This runs the query and returns the results in the form of a selection box. These are the options you will be provided when applying the filter later on. The selected options within the editor's view do not affect the graph filter, and are only provided here to make it easier to test your graph filter queries.

Now we have a few parameters to select from. We then create the parameterized graph filter by using the selected value, which has the fixed parameter name selectedId. You will see this value change if you select a different test parameter. Now we can create the second query, using this parameter. You will be provided with skeleton query, g.V(selectedId), This query finds the component with the id of the parameter you have selected. Now, if you want to see this component and related components one step in and out, try this query: 

g.V(selectedId).bothE().bothV().path()

Here is how the parameterised graph filter looks like in the Quick perspectives: 

Editing a graph filter

Now we want to change a filter to accomplish a new task. We find the graph filter we wish to edit in the graph filter overview and click on its name. You first get to the view that you can utilize to test the graph filter. If you want to edit the actual query, click the edit button. You can then modify the queries the graph filter is based on. Remember to save everything when you are satisfied with the results.

Example queries

Here we provide a few example queries that might be applicable in your visualization.

Create a graph filter which only show applications which do not realize a capability

g.V().
  hasLabel('Application').
  not(
    out('Realizes').
    hasLabel('Capability'))

Query for components

g.V().has("some_field","some_value")  

Query for a path

g.V().hasLabel("Application").inE().outV().path() 

Did this answer your question?