Skip to content

Operators

Nat Van Gulck edited this page Aug 5, 2024 · 20 revisions

JSONLogic operators

For a list of built-in JSONLogic operators see https://jsonlogic.com/operations.html.

PBI Inspector operators

PBI Inspector adds additional operators beyond those provided by the JSONLogic library. Here they are in alphabetical order.

count

Counts the number of items in an array.

Example:

    {
      "id": "CHECK_FOR_LOCAL_MEASURES",
      "name": "Check for locally defined measures",
      "description": "Returns an array of report-level measure definitions",
      "part": "ReportExtensions",
      "test": [
        {
          "filter": [
            {
              "var": "entities"
            },
            {
              ">": [
                {
                  "count": [
                    {
                      "var": "measures"
                    }
                  ]
                },
                0
              ]
            }
          ]
        },
        {
          "entities": "/entities"
        },
        []
      ]
    }

diff

Venn diagram

Accepts two JSON array parameters, treats them as non-ordered sets, and returns a JSON array representing the set difference between the first and the second parameter.

Example:

{
  "id": "REMOVE_UNUSED_CUSTOM_VISUALS",
  "name": "Remove custom visuals which are not used in the report.",
  "description": "Returns an array of custom visual names to be removed if any. To disable this rule, mark it as disabled in the base rules file.",
  "disabled": false,
  "part": "Report",
  "test": [
    {
      "diff": [
        {
          "var": "customvis"
        },
        {
          "map": [
            { "part": "Visuals" },
            { "var": "visual.visualType" }
          ]
        }
      ]
    },
    {
      "customvis": "/publicCustomVisuals"
    },
    []
  ]
}

drillvar

Accepts a json pointer string and parses stringified JSON on the right of a '>' character. The drillvar operator was needed in V1 of PBI Inspector due to the large amount the escaped json in the report.json file. It is less relevant for PBI Inspector V2 but still useful for querying escaped json such as in the Deneb custom visual definition.

equalsets

Accepts two JSON array parameters, treats them as non-ordered sets, and determines if they are equal.

intersection

Venn diagram

Accepts two JSON array parameters, treats them as non-ordered sets, and returns a JSON array representing the intersection of both sets.

part

The part operator returns a part corresponding to a PBIR file path within the report definition folder.

The following part or parts can be returned (note that the part names are case-sensitive):

  • Report: returns the part with the "report.json" file path
  • ReportExtensions: returns the part with the "reportExtensions.json" file path
  • Version: returns the part with the "version.json" file path
  • Pages: returns a list of all parts with "*.page.json" file paths
  • AllVisuals: returns a list of all parts with "*.visual.json" file paths
  • Visuals: returns a list of parts with "*.visual.json" file paths in the context of the rule's own "part" iterator.
  • AllBookmarks: returns a list of all parts with "*.bookmark.json" file paths.
  • Bookmarks: returns a list of parts with "*.bookmark.json" file paths in the context of the rule's own "part" iterator.

See below for an example using the "Visuals" part operator within the rule's test definition. The part operator in this example returns visual definitions for each page as an array.

{
  "id": "DISABLE_DROP_SHADOWS_ON_VISUALS",
  "name": "Disable drop shadows on visuals",
  "description": "Drop shadows are not suitable for everyone, this rule returns an array of visuals with drop shadows enabled.",
  "part": "Pages",
  "test": [
    {
      "map": [
        {
          "filter": [
            {
              "part": "Visuals"
            },
            {
              "some": [
                {
                  "var": "visual.visualContainerObjects.dropShadow"
                },
                {
                  "==": [
                    { "var": "properties.show.expr.Literal.Value" },
                    "true"
                  ]
                }
              ]
            }
          ]
        },
        {
          "var": "name"
        }
      ]
    },
    {},
    []
  ]
}

path

The path operator provides the ability to define a JSONPath to query the context json. PBI Inspector V2 uses the JsonPath.Net implementation. For details about JSONPath syntax with examples see https://docs.json-everything.net/path/basics/ and https://www.rfc-editor.org/rfc/rfc9535.html.

Example:

    {
      "id": "REDUCE_OBJECTS_WITHIN_VISUALS",
      "name": "Reduce the number of objects within visuals",
      "part": "Pages",
      "test": [
        {
          "map": [
            {
              "filter": [
                {
                  "part": "Visuals"
                },
                {
                  ">": [
                    {
                      "count": [
                        {
                          "path": "$..projections[*]"
                        }
                      ]
                    },
                    6
                  ]
                }
              ]
            },
            {
              "var": "name"
            }
          ]
        },
        {},
        []
      ]
    }

query

[documentation in progress]

rectoverlap

Accepts a JSON array of rectangle ids, x and y coordinates and width, height and optional margin width. Returns an array of overlapping rectangle ids (inflated by the margin width).

strcontains

Accepts a search string and regular expression as parameters. Returns the count of regular expression matches in the search string.

{
  "id": "GIVE_VISIBLE_PAGES_MEANINGFUL_NAMES",
  "name": "Give visible pages meaningful names",
  "description": "Returns an array of visible page names with a default 'Page x' display name.",
  "test": [
    {
      "map": [
        {
          "filter": [
            {
              "part": "Pages"
            },
            {
              "and": [
                {
                  "strcontains": [
                    {
                      "var": "displayName"
                    },
                    "^Page [1-9]+$"
                  ]
                },
                {
                  "!=": [
                    {
                      "var": "visibility"
                    },
                    "HiddenInViewMode"
                  ]
                }
              ]
            }
          ]
        },
        {
          "var": "displayName"
        }
      ]
    },
    {},
    []
  ]
}

symdiff

Venn diagram

Accepts two JSON array parameters, treats them as non-ordered sets, and returns a JSON array representing the symmetric difference of both sets.

torecord

Accepts an array of key/value pairs as parameter. Return a JSON record.

tostring

Accepts a JSON node as parameter and returns the equivalent stringified JSON.

union

Venn diagram

Accepts two JSON array parameters, treats them as non-ordered sets, and returns a JSON array representing the union of both sets.

Clone this wiki locally