-
Notifications
You must be signed in to change notification settings - Fork 5
Operators
For a list of built-in JSONLogic operators see https://jsonlogic.com/operations.html.
PBI Inspector adds additional operators beyond those provided by the JSONLogic library. Here they are in alphabetical order.
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"
},
[]
]
}
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"
},
[]
]
}
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.
PBI Inspector uses JSONLogic to inspect query json report definition files. However the report definition can also include other files such as image files within the StaticResources folder for example. For each non-json file, PBI Inspector creates in-memory json annotation key-value pairs containing the full file path and file name (at positions 0 and 1 respectively). The fileSize custom operator returns the file size of non-Json files in bytes as shown in this example:
{
"id": "LIST_STATICRESOURCES_FILESIZE",
"name": "List staticresources file sizes.",
"description": "list sizes of png files only",
"disabled": false,
"part": "StaticResources",
"test": [
{
"map": [
{
"filter": [
{
"part": "Files"
},
{
"strcontains": [
{
"var": "annotations.1.value"
},
"png"
]
}
]
},
{
"filesize": [
{
"var": "annotations.0.value"
}
]
}
]
},
[]
]
}
Accepts two JSON array parameters, treats them as non-ordered sets, and determines if they are equal.
Accepts one parameter with a file path string. Returns the size of the file on disk. This can be used to check that size of static resources files such as images does not exceed a given threshold.
{
"id": "LIST_STATICRESOURCES_FILESIZE",
"name": "List staticresources file sizes.",
"description": "list sizes of png files only",
"disabled": false,
"part": "StaticResources",
"test": [
{
"map": [
{
"filter": [
{
"part": "Files"
},
{
"strcontains": [
{
"var": "annotations.1.value"
},
"png"
]
}
]
},
{
"filesize": [
{
"var": "annotations.0.value"
}
]
}
]
},
[]
]
},
Accepts two JSON array parameters, treats them as non-ordered sets, and returns a JSON array representing the intersection of both sets.
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 -
PagesHeader: returns the part with the
pages.json
file path depending on the parent part context -
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. -
AllMobileVisuals: returns a list of all parts with
*.mobile.json
file paths regardless of parent context -
MobileVisuals: returns a list of parts with
*.mobile.json
file paths in the context of the rule's own "part" iterator. -
BookmarksHeader: returns the part with the
bookmarks.json
file path depending on the parent part context -
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. - Files: returns a list of parts for each file within the parent part context
If the part operator is used to reference a part that is not included in the list above then it will attempt to match the file by name. For example, returning a theme file part might look like this: "part":"CY23SU04.json"
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"
}
]
},
{},
[]
]
}
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"
}
]
},
{},
[]
]
}
[documentation in progress]
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).
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"
}
]
},
{},
[]
]
}
Accepts two JSON array parameters, treats them as non-ordered sets, and returns a JSON array representing the symmetric difference of both sets.
Accepts an array of key/value pairs as parameter. Return a JSON record.
Accepts a JSON node as parameter and returns the equivalent stringified JSON.
Accepts two JSON array parameters, treats them as non-ordered sets, and returns a JSON array representing the union of both sets.