Realtime dashboard - Git-integratie

In dit artikel worden de map- en bestandsstructuur voor Real-Time dashboarditems beschreven zodra ze zijn gesynchroniseerd met een GitHub- of Azure Devops-opslagplaats.

Mapstructuur

Zodra een werkruimte is gesynchroniseerd met een opslagplaats, ziet u een map op het hoogste niveau voor de werkruimte en een submap voor elk item dat is gesynchroniseerd. Elke submap is opgemaakt met itemnaam. Itemtype

In de map voor het dashboard ziet u de volgende bestanden:

  • Platform: Definieert platformwaarden voor infrastructuur, zoals weergavenaam en beschrijving.
  • Eigenschappen: Hiermee definieert u itemspecifieke waarden.

Hier volgt een voorbeeld van de mapstructuur:

Repository

  • Werkruimte A
    • Item_A.KQLDashboard
      • .platform
      • RealTimeDashboard-1.json
  • Werkruimte B
    • Item_B.KQLDashboard
      • .platform
      • RealTimeDashboard-2.json

Real-Time dashboardbestanden

De volgende bestanden bevinden zich in een dashboardmap:

  • .platform

    Het bestand maakt gebruik van het volgende schema om een realtime dashboard te definiëren:

    {
      "$schema": "https://developer.microsoft.com/json-schemas/fabric/gitIntegration/platformProperties/2.0.0/schema.json",
      "metadata": {
        "type": "KQLDashboard",
        "displayName": "",
        "description": ""
      },
      "config": {
        "version": "2.0",
        "logicalId": ""
      }
    }
    
  • RealTimeDashboard.json

    Het bestand maakt gebruik van het volgende schema om een realtime dashboard te definiëren:

    {
      "$schema": "",
      "id": "",
      "eTag": "\"\"",
      "schema_version": "",
      "title": "",
      "tiles": [
        {
          "id": "",
          "title": "",
          "visualType": "",
          "pageId": "",
          "layout": {
            "x": ,
            "y": ,
            "width": ,
            "height":
          },
          "queryRef": {
            "kind": "",
            "queryId": ""
          },
          "visualOptions": {
            "multipleYAxes": {
              "base": {
                "id": "",
                "label": "",
                "columns": [],
                "yAxisMaximumValue": ,
                "yAxisMinimumValue": ,
                "yAxisScale": "",
                "horizontalLines": []
              },
              "additional": [],
              "showMultiplePanels":
            },
            "hideLegend": ,
            "legendLocation": "",
            "xColumnTitle": "",
            "xColumn": ,
            "yColumns": ,
            "seriesColumns": ,
            "xAxisScale": "",
            "verticalLine": "",
            "crossFilterDisabled": ,
            "drillthroughDisabled": ,
            "crossFilter": [
              {
                "interaction": "",
                "property": "",
                "parameterId": "",
                "disabled":
              }
            ],
            "drillthrough": [],
            "selectedDataOnLoad": {
              "all": ,
              "limit":
            },
            "dataPointsTooltip": {
              "all": ,
              "limit":
            }
          }
        }
      ],
      "baseQueries": [],
      "parameters": [
        {
          "kind": "",
          "id": "",
          "displayName": "",
          "description": "",
          "variableName": "",
          "selectionType": "",
          "includeAllOption": ,
          "defaultValue": {
            "kind": ""
          },
          "dataSource": {
            "kind": "",
            "columns": {
              "value": ""
            },
            "queryRef": {
              "kind": "",
              "queryId": ""
            }
          },
          "showOnPages": {
            "kind": ""
          },
          "allIsNull":
        },
      ],
      "dataSources": [
        {
          "id": "",
          "name": "",
          "clusterUri": "",
          "database": "",
          "kind": "",
          "scopeId": ""
        }
      ],
      "pages": [
        {
          "name": "",
          "id": ""
        }
      ],
      "queries": [
        {
          "dataSource": {
            "kind": "",
            "dataSourceId": ""
          },
          "text": "",
          "id": "",
          "usedVariables": [
            "",
            ""
          ]
        }
      ]
    }
    

Realtime dashboard validatie

Het Real-Time eindpunt voor het laden van dashboards valideert de JSON buiten de standaardschemaconformance. Schendingen verschijnen voor gebruikers in de dashboardinterface als foutberichten zoals: Error loading dashboard / Error found at: /<section> / Message: <reason>.

Uniciteit van queryreferenties

Elk queryId in het dashboard moet precies één keer worden verwezen, geteld over:

  • tiles[].queryRef.queryId
  • baseQueries[].queryId
  • parameters[].dataSource.queryRef.queryId

Als een queryId wordt gedeeld tussen twee tegels of tussen een tegel en een baseQuery, mislukt de validatie met: /queries: Some query IDs are used in multiple query references (tiles, base queries, parameters)

Wanneer u een tegel programmatisch naar een nieuwe pagina dupliceert, dupliceert u ook de query (wijs een nieuwe queryIdtoe, behoudt u hetzelfde text en dataSource) en wijst u de nieuwe tegel queryRef.queryId aan bij de nieuwe query.

Id-uniekheid en -indeling

Elke id in tiles[], queries[], baseQueries[], , , parameters[], , , dataSources[]en pages[] moet zijn:

  • Uniek binnen de categorie.
  • Een geldige RFC 4122 UUID (bijvoorbeeld 3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a). Leesbare tekenreeksen met streepjes (bijvoorbeeld my-tile-0001-0000-0000-000000000001) worden geweigerd tijdens de laadtijd met: Needs to follow the UUID format as defined by RFC 4122.

Genereer voor programmatische bewerkingen ids met een UUID-bibliotheek: uuid.uuid4() voor nieuwe ids of uuid.uuid5(namespace, label) voor deterministische ids die het script meerdere keren kunnen doorstaan.

Tip

Als u een laadfout ziet zoals /tiles/N/queryRef ... must have required property 'baseQueryId', is de werkelijke fout meestal een onjuist queryRef.queryIdformaat en niet een ontbrekende baseQueryId. Het schema's queryRef is een oneOf tussen { kind: "query", queryId: <uuid> } en { kind: "baseQuery", baseQueryId: <uuid> }. Wanneer de binnenste UUID ongeldig is, mislukt de validator de query-vertakking van het type en rapporteert het falen van de baseQuery-vertakking van het type. Corrigeer de UUID en het cascade-leegmaken.

Behoud van identiteit bij bewerkingen

Als u de koppeling tussen het bestand en het livewerkruimte-item wilt behouden, wijzigt u het volgende niet voor bestaande vermeldingen:

  • Hoogste niveau: id, eTagschema_version
  • Per tegel: id, pageIdqueryRef.queryId
  • Per query: id, dataSource.dataSourceId
  • Per gegevensbron: id, scopeId
  • Per pagina: id
  • Per parameter: id, variableName (en beginVariableName / endVariableName voor kind: "duration")
  • .platform: config.logicalId

Als u deze id's wijzigt, wordt de wijziging behandeld als een verwijdering en wordt de volgende Update from Gitwijziging opnieuw gemaakt, waardoor de context verloren gaat: verwijzingen naar vastgemaakte items, doelen delen en een status die is gekoppeld aan het oorspronkelijke iditem.

Parameters

Wanneer een tegel die gebruikmaakt van een parameter (waarnaar wordt verwezen via de query's usedVariables) wordt toegevoegd aan een nieuwe pagina, wordt die parameter niet automatisch weergegeven op de nieuwe pagina. Als de parameter showOnPages.kind is "selection", moet u de nieuwe pagina id toevoegen aan showOnPages.pageIds. Als de parameter een bruikbaar defaultValuebestand heeft, wordt de tegel weergegeven met de standaardwaarde.

Parameters met meerdere variabelen, zoals kind: "duration" parameters, maken twee variabelen beschikbaar via beginVariableName en endVariableName (meestal _startTime en _endTime). Ze delen één parameterobject met één showOnPages instelling.

Voorbeeldbewerkingen via Git

Met behulp van het schema en de validatienotities kunt u wijzigingen aanbrengen in het Real-Time dashboard via Git in plaats van via de gebruikersinterface.

Voorbeeld: Een tegel naar een nieuwe pagina kopiëren

Als u een tegel van pagina A naar een zojuist toegevoegde pagina B wilt kopiëren door het volgende te bewerken RealTimeDashboard-N.json:

  1. Pagina B toevoegen aan pages[] met een nieuwe id.
  2. Kopieer de brontegel in tiles[]deep-copy. Toewijzen:
    • nieuwe tegel id (nieuwe GUID)
    • pageId = id van pagina B
  3. Zoek de bronquery in queries[] via de brontegel queryRef.queryId.
  4. Maak een diepe kopie van de query in queries[] met een nieuwe id.
  5. Werk de gekloonde tegel queryRef.queryId bij naar de nieuwe query id.
  6. Voor elke parameter waarnaar wordt verwezen in de gekloonde query's usedVariables[]: if showOnPages.kind == "selection", toevoeg pagina B's id aan showOnPages.pageIds.
  7. Controleer of queryId niet meer dan één keer voorkomt in tiles[], baseQueries[] en parameters[].dataSource.queryRef.
  8. Committen, pushen en Update van Git uitvoeren in de werkruimte.