{
  "Data": [
    {
      "$type": "SoftwareIDM.PanelModel.Models.Reporting.Report, SoftwareIDM.PanelModel",
      "Id": "9dcf4380-d253-4180-86c4-b3ef4568d516",
      "Name": "Join Rules Summary",
      "UserId": "08e2f0c6-a79c-457a-8b2e-5edd8e9443f7",
      "UserProfile": false,
      "Tags": null,
      "Roles": null,
      "CacheExpiration": "01:00:00",
      "Description": "Analysis of join rules for integrity checking - the last 3 columns represent the virtual object type and attribute name/value pair",
      "Parameters": [],
      "Data": [
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.QueryData, SoftwareIDM.PanelModel",
          "Clauses": [
            {
              "$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
              "Field": "Data",
              "Operation": "NotNull",
              "Value": "",
              "ObjectValue": null
            },
            {
              "$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
              "Field": "ContrailsFlow",
              "Operation": "NotNull",
              "Value": "",
              "ObjectValue": null
            }
          ],
          "SubQueries": [],
          "MapRule": "Map(\n  Data, \n  Dict(ScopeSeq = Count(And(context.ObjectTypeValue,context.Attribute), $\"{context.ObjectTypeValue}{context.Attribute}\", Seconds(1)), \n    Scope = ReverseSpecial(context.Scope, \"Identity Silo\"), \n    ObjectType = context.ObjectType, \n    ObjectTypeValue = context.ObjectTypeValue, \n    Attribute = context.Attribute, \n    ValueRule = Join(\"\", Split(RTrim(Split(context.ValueRule, \"/\").0, \"\\n\"), \"\\n\"))\n  )\n)",
          "MemoRules": [],
          "Aliases": null,
          "Name": "JoinRules",
          "Type": "SoftwareIDM.PanelModel.Models.JsonSettings, SoftwareIDM.PanelModel",
          "Include": null,
          "Limit": null
        }
      ],
      "Relations": [],
      "FieldProjections": [
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
          "Name": "JoinValueTemplate",
          "RelationName": "",
          "RelationSide": null,
          "ValueRule": "$\"{Child.ObjectTypeValue}|{Child.Attribute}|{Child.ScopeSeq}\""
        },
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
          "Name": "ScopeSeq",
          "RelationName": "",
          "RelationSide": null,
          "ValueRule": "Child.ScopeSeq"
        },
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
          "Name": "Scope",
          "RelationName": "",
          "RelationSide": null,
          "ValueRule": "Child.Scope"
        },
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
          "Name": "ObjectType",
          "RelationName": "",
          "RelationSide": null,
          "ValueRule": "Child.ObjectType"
        },
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
          "Name": "ObjectTypeValue",
          "RelationName": "",
          "RelationSide": null,
          "ValueRule": "Child.ObjectTypeValue"
        },
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
          "Name": "Attribute",
          "RelationName": "",
          "RelationSide": null,
          "ValueRule": "Child.Attribute"
        },
        {
          "$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
          "Name": "ValueRule",
          "RelationName": "",
          "RelationSide": null,
          "ValueRule": "Child.ValueRule\n//Wish to exclude comments and collapse multi-line rule expressions into a single line\n//Join(\"\", Split(RTrim(Split(Data.ValueRule, \"/\").0, \"\\n\"), \"\\n\"))"
        }
      ],
      "Transformations": [],
      "Styles": [],
      "Sort": {
        "Field": "JoinValueTemplate",
        "Direction": "Ascending"
      }
    }
  ],
  "Count": 1
}