{
  "version": "Notebook/1.0",
  "items": [
    {
      "type": 9,
      "content": {
        "version": "KqlParameterItem/1.0",
        "parameters": [
          {
            "id": "5de17819-f869-4a42-9c3d-27cf8f9085f0",
            "version": "KqlParameterItem/1.0",
            "name": "timeRange",
            "label": "Time Range",
            "type": 4,
            "description": "Filter data by time range",
            "isRequired": true,
            "value": {
              "durationMs": 14400000
            },
            "typeSettings": {
              "selectableValues": [
                {
                  "durationMs": 300000
                },
                {
                  "durationMs": 900000
                },
                {
                  "durationMs": 1800000
                },
                {
                  "durationMs": 3600000
                },
                {
                  "durationMs": 14400000
                },
                {
                  "durationMs": 43200000
                },
                {
                  "durationMs": 86400000
                },
                {
                  "durationMs": 172800000
                },
                {
                  "durationMs": 259200000
                },
                {
                  "durationMs": 604800000
                },
                {
                  "durationMs": 1209600000
                },
                {
                  "durationMs": 2419200000
                },
                {
                  "durationMs": 2592000000
                },
                {
                  "durationMs": 5184000000
                },
                {
                  "durationMs": 7776000000
                }
              ],
              "allowCustom": true
            }
          },
          {
            "id": "deecfba4-7745-476e-833b-bdf0b6615c67",
            "version": "KqlParameterItem/1.0",
            "name": "Resource",
            "type": 5,
            "isRequired": true,
            "value": "value::1",
            "isHiddenWhenLocked": true,
            "typeSettings": {
              "resourceTypeFilter": {
                "microsoft.containerservice/managedclusters": true,
                "microsoft.kubernetes/connectedclusters": true
              },
              "additionalResourceOptions": [
                "value::1"
              ]
            }
          },
          {
            "id": "854f1a94-b4f9-43e9-bd8d-2f4543c772fe",
            "version": "KqlParameterItem/1.0",
            "name": "ResourceType",
            "type": 7,
            "isRequired": true,
            "query": "project '{Resource:resourcetype}'\r\n| take 1",
            "value": "value::1",
            "typeSettings": {
              "additionalResourceOptions": [
                "value::1"
              ]
            },
            "queryType": 1,
            "resourceType": "microsoft.resourcegraph/resources"
          },
          {
            "id": "bb8ed6dc-807e-4566-be76-26ac6ee7f90f",
            "version": "KqlParameterItem/1.0",
            "name": "selectedNodes",
            "label": "GPU Node",
            "type": 2,
            "description": "Filter by GPU node",
            "multiSelect": true,
            "quote": "'",
            "delimiter": ",",
            "query": "InsightsMetrics \r\n| where Name == \"nodeGpuCapacity\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where Val > 0\r\n| distinct Computer",
            "crossComponentResources": [
              "{Resource}"
            ],
            "value": [
              "value::all"
            ],
            "typeSettings": {
              "additionalResourceOptions": [
                "value::all"
              ],
              "selectAllValue": "*"
            },
            "queryType": 0,
            "resourceType": "{ResourceType}"
          },
          {
            "id": "e57ba893-b9ba-47b9-95d5-38bc7be4a455",
            "version": "KqlParameterItem/1.0",
            "name": "clusterId",
            "type": 1,
            "description": "Filter the selected workspace by cluster id",
            "isHiddenWhenLocked": true
          },
          {
            "id": "51f0a81e-6eef-4129-b8a4-dc7dd4114aff",
            "version": "KqlParameterItem/1.0",
            "name": "clusterIdWhereClause",
            "type": 1,
            "description": "use this to filter by clusterid ",
            "value": "| where \"a\" == \"a\"",
            "isHiddenWhenLocked": true,
            "criteriaData": [
              {
                "condition": "if (clusterId is not empty ), result = '| where clusterId =~ \"{clusterId}\"'",
                "criteriaContext": {
                  "leftOperand": "clusterId",
                  "operator": "isNotNull",
                  "rightValType": "param",
                  "resultValType": "static",
                  "resultVal": "| where clusterId =~ \"{clusterId}\""
                }
              },
              {
                "condition": "else result = '| where \"a\" == \"a\"'",
                "criteriaContext": {
                  "operator": "Default",
                  "rightValType": "param",
                  "resultValType": "static",
                  "resultVal": "| where \"a\" == \"a\""
                }
              }
            ],
            "timeContext": {
              "durationMs": 0
            },
            "timeContextFromParameter": "timeRange"
          }
        ],
        "style": "pills",
        "queryType": 0,
        "resourceType": "{ResourceType}"
      },
      "name": "parameters - 2"
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "union\r\n(InsightsMetrics \r\n| where Name == \"nodeGpuCapacity\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n| where Val > 0\r\n//add cluster filter\r\n| summarize GPUsPerComputer=arg_max(Val,*) by Computer, bin(TimeGenerated, {timeRange:grain})\r\n| make-series ['Total GPUs'] = toint(sum(GPUsPerComputer)) default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain} \r\n),\r\n(\r\nInsightsMetrics \r\n| where Name == \"containerGpuDutyCycle\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n| where Val > 0\r\n| extend gpuId = tostring(Tags.gpuId)\r\n| summarize count() by bin(TimeGenerated, {timeRange:grain}), gpuId\r\n| make-series ['Busy GPUs'] = count() default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain} \r\n)",
        "size": 0,
        "aggregation": 5,
        "showAnnotations": true,
        "showAnalytics": true,
        "title": "GPU Usage",
        "color": "turquoise",
        "queryType": 0,
        "resourceType": "{ResourceType}",
        "crossComponentResources": [
          "{Resource}"
        ],
        "visualization": "linechart",
        "tileSettings": {
          "showBorder": false,
          "titleContent": {
            "columnMatch": "gpuVendor",
            "formatter": 1
          },
          "leftContent": {
            "columnMatch": "gpuCount",
            "formatter": 12,
            "formatOptions": {
              "palette": "auto"
            },
            "numberFormat": {
              "unit": 17,
              "options": {
                "maximumSignificantDigits": 3,
                "maximumFractionDigits": 2
              }
            }
          }
        },
        "graphSettings": {
          "type": 0,
          "topContent": {
            "columnMatch": "gpuVendor",
            "formatter": 1
          },
          "centerContent": {
            "columnMatch": "gpuCount",
            "formatter": 1,
            "numberFormat": {
              "unit": 17,
              "options": {
                "maximumSignificantDigits": 3,
                "maximumFractionDigits": 2
              }
            }
          }
        },
        "chartSettings": {
          "showLegend": true,
          "seriesLabelSettings": [
            {
              "seriesName": "Busy Gpus",
              "color": "redBright"
            }
          ],
          "xSettings": {
            "unit": 17,
            "min": null,
            "max": null
          },
          "ySettings": {
            "min": 0,
            "max": null
          }
        }
      },
      "customWidth": "50",
      "showPin": true,
      "name": "GPU-Usage",
      "styleSettings": {
        "maxWidth": "50",
        "showBorder": true
      }
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "union\r\n(InsightsMetrics \r\n| where Name == \"containerGpumemoryTotalBytes\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n//| extend tags=parse_json(Tags) \r\n| extend gpuVendor=tostring(Tags.gpuVendor)\r\n| extend gpuId = tostring(Tags.gpuId)\r\n| extend gpuModel = tostring(Tags.gpuModel)\r\n| extend gpu=strcat(gpuVendor, \"/\", gpuModel)\r\n| summarize GpuMemoryBytes=max(Val) by bin(TimeGenerated,  {timeRange:grain}), gpu, gpuId, Computer//, metricname\r\n| make-series ['Total-GPUMemory'] = sum(GpuMemoryBytes) default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain} //by status\r\n),\r\n(InsightsMetrics \r\n| where Name == \"containerGpumemoryUsedBytes\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n| extend gpuVendor=tostring(Tags.gpuVendor)\r\n| extend gpuId = tostring(Tags.gpuId)\r\n| extend gpuModel = tostring(Tags.gpuModel)\r\n| extend gpu=strcat(gpuVendor, \"/\", gpuModel)\r\n| summarize maxused=max(Val) by bin(TimeGenerated, {timeRange:grain}), gpu, gpuId, Computer\r\n| make-series ['Max-Used'] = sum(maxused) default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain}\r\n),\r\n(InsightsMetrics \r\n| where Name == \"containerGpumemoryUsedBytes\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n| extend gpuVendor=tostring(Tags.gpuVendor)\r\n| extend gpuId = tostring(Tags.gpuId)\r\n| extend gpuModel = tostring(Tags.gpuModel)\r\n| extend gpu=strcat(gpuVendor, \"/\", gpuModel)\r\n| summarize ptile95used=percentile(Val,95) by bin(TimeGenerated, {timeRange:grain}), gpu, gpuId, Computer\r\n| make-series ['95th-ptile-Used'] = sum(ptile95used) default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain}\r\n),\r\n(InsightsMetrics \r\n| where Name == \"containerGpumemoryUsedBytes\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n| extend gpuVendor=tostring(Tags.gpuVendor)\r\n| extend gpuId = tostring(Tags.gpuId)\r\n| extend gpuModel = tostring(Tags.gpuModel)\r\n| extend gpu=strcat(gpuVendor, \"/\", gpuModel)\r\n| summarize ptile99used=percentile(Val,99) by bin(TimeGenerated, {timeRange:grain}), gpu, gpuId, Computer\r\n| make-series ['99th-ptile-Used'] = sum(ptile99used) default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain}\r\n)\r\n",
        "size": 0,
        "aggregation": 5,
        "showAnnotations": true,
        "showAnalytics": true,
        "title": "GPU Memory Usage",
        "timeContext": {
          "durationMs": 0
        },
        "timeContextFromParameter": "timeRange",
        "queryType": 0,
        "resourceType": "{ResourceType}",
        "crossComponentResources": [
          "{Resource}"
        ],
        "visualization": "linechart",
        "chartSettings": {
          "showLegend": true,
          "ySettings": {
            "unit": 2,
            "min": 0,
            "max": null
          }
        }
      },
      "customWidth": "50",
      "showPin": true,
      "name": "GPU-MemoryUsage",
      "styleSettings": {
        "maxWidth": "50",
        "showBorder": true
      }
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "let im  = InsightsMetrics\r\n| where Name == \"nodeGpuCapacity\"\r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n| where Val >= 1\r\n| distinct Computer;\r\nKubeNodeInventory\r\n| extend clusterId = ClusterId\r\n{clusterIdWhereClause}\r\n| where Computer in (im)\r\n| extend status=iif(strlen(Status) == 0 ,\"Unknown\", Status)\r\n| summarize count() by Computer, status, bin(TimeGenerated, {timeRange:grain})\r\n| summarize val=count() by status, bin(TimeGenerated, {timeRange:grain})\r\n| make-series ['Node Count by status'] = sum(val) default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain} by status\r\n\r\n",
        "size": 0,
        "aggregation": 5,
        "showAnnotations": true,
        "showAnalytics": true,
        "title": "GPU Node Count by Node Status",
        "timeContext": {
          "durationMs": 0
        },
        "timeContextFromParameter": "timeRange",
        "queryType": 0,
        "resourceType": "{ResourceType}",
        "crossComponentResources": [
          "{Resource}"
        ],
        "visualization": "linechart",
        "tileSettings": {
          "titleContent": {
            "columnMatch": "status",
            "formatter": 1,
            "formatOptions": {
              "showIcon": true
            }
          },
          "leftContent": {
            "columnMatch": "Node Count by State",
            "formatter": 12,
            "formatOptions": {
              "palette": "auto",
              "showIcon": true
            },
            "numberFormat": {
              "unit": 17,
              "options": {
                "style": "decimal",
                "maximumFractionDigits": 2,
                "maximumSignificantDigits": 3
              }
            }
          },
          "showBorder": false
        },
        "chartSettings": {
          "showLegend": true,
          "seriesLabelSettings": [
            {
              "seriesName": "Ready",
              "color": "green"
            },
            {
              "seriesName": "Unknown",
              "color": "blue"
            }
          ],
          "ySettings": {
            "min": 0,
            "max": null
          }
        }
      },
      "customWidth": "50",
      "showPin": true,
      "name": "GPU-NodeCountByNodeStatus",
      "styleSettings": {
        "maxWidth": "50",
        "showBorder": true
      }
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "let im  = InsightsMetrics\r\n| where Name in (\"containerGpuRequests\", \"containerGpuLimits\")\r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| extend selectedNodes = {selectedNodes}\r\n| extend nodeList = iif(selectedNodes == \"*\", \",*\", selectedNodes) \r\n| where '*' in (selectedNodes) or Computer in (selectedNodes)\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n//| extend tags=parse_json(Tags)\r\n| extend containerName = tostring(Tags.containerName)\r\n| extend poduidArray = split(containerName, \"/\")\r\n| extend podUid = iif(array_length(poduidArray) == 2, poduidArray[0], \"\")\r\n| where Val >= 1\r\n| where podUid != \"\"\r\n| distinct podUid;\r\nKubePodInventory\r\n| where PodUid in (im)\r\n| extend clusterId = ClusterId\r\n{clusterIdWhereClause}\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| extend selectedNodes = {selectedNodes}\r\n| extend nodeList = iif(selectedNodes == \"*\", \",*\", selectedNodes) \r\n| where '*' in (selectedNodes) or Computer in (selectedNodes)\r\n| summarize count() by PodUid, PodStatus, bin(TimeGenerated, {timeRange:grain})\r\n| make-series ['GPU Pod Count by status'] = count() default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain} by PodStatus",
        "size": 0,
        "aggregation": 5,
        "showAnnotations": true,
        "showAnalytics": true,
        "title": "GPU Pod Count by Pod Status",
        "timeContext": {
          "durationMs": 0
        },
        "timeContextFromParameter": "timeRange",
        "queryType": 0,
        "resourceType": "{ResourceType}",
        "crossComponentResources": [
          "{Resource}"
        ],
        "visualization": "timechart",
        "chartSettings": {
          "showLegend": true,
          "seriesLabelSettings": [
            {
              "seriesName": "Succeeded",
              "color": "greenDark"
            },
            {
              "seriesName": "Running",
              "color": "green"
            }
          ],
          "ySettings": {
            "min": 0,
            "max": null
          }
        }
      },
      "customWidth": "50",
      "showPin": true,
      "name": "GPU-PodCountByPodStatus",
      "styleSettings": {
        "maxWidth": "50",
        "showBorder": true
      }
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "let im  = InsightsMetrics\r\n| where Name in (\"containerGpuRequests\", \"containerGpuLimits\")\r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| extend selectedNodes = {selectedNodes}\r\n| extend nodeList = iif(selectedNodes == \"*\", \",*\", selectedNodes)\r\n| where '*' in (selectedNodes) or Computer in (selectedNodes)\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n//| extend tags=parse_json(Tags)\r\n| extend containerName = tostring(Tags.containerName)\r\n| extend poduidArray = split(containerName, \"/\")\r\n| extend podUid = iif(array_length(poduidArray) == 2, poduidArray[0], \"\")\r\n| where Val >= 1\r\n| where podUid != \"\"\r\n| distinct podUid;\r\nKubePodInventory\r\n| where PodUid in (im)\r\n| extend clusterId = ClusterId\r\n{clusterIdWhereClause}\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| summarize count() by PodUid, Namespace, PodStatus, bin(TimeGenerated, {timeRange:grain})\r\n| make-series ['GPU Pods by namespace'] = count() default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain} by Namespace, PodStatus\r\n",
        "size": 0,
        "aggregation": 5,
        "showAnnotations": true,
        "showAnalytics": true,
        "title": "GPU Pod Count by Kubernetes Namespace",
        "timeContext": {
          "durationMs": 0
        },
        "timeContextFromParameter": "timeRange",
        "queryType": 0,
        "resourceType": "{ResourceType}",
        "crossComponentResources": [
          "{Resource}"
        ],
        "visualization": "linechart",
        "tileSettings": {
          "titleContent": {
            "columnMatch": "Namespace",
            "formatOptions": {
              "showIcon": true
            }
          },
          "subtitleContent": {
            "columnMatch": "PodStatus",
            "formatOptions": {
              "showIcon": true
            }
          },
          "rightContent": {
            "columnMatch": "GPU Pods by namespace",
            "formatter": 10,
            "formatOptions": {
              "palette": "red",
              "showIcon": true
            },
            "tooltipFormat": {
              "tooltip": "hello {0}"
            }
          },
          "showBorder": false,
          "sortCriteriaField": "Namespace"
        },
        "graphSettings": {
          "type": 0,
          "topContent": {
            "columnMatch": "Namespace",
            "formatter": 1,
            "formatOptions": {
              "showIcon": true
            }
          },
          "leftContent": {
            "columnMatch": "PodStatus",
            "formatOptions": {
              "showIcon": true
            }
          },
          "centerContent": {
            "columnMatch": "podcount",
            "formatter": 1,
            "formatOptions": {
              "showIcon": true
            },
            "numberFormat": {
              "unit": 17,
              "options": {
                "maximumSignificantDigits": 3,
                "maximumFractionDigits": 2
              }
            }
          },
          "nodeIdField": "Namespace",
          "nodeSize": null,
          "staticNodeSize": 100,
          "colorSettings": null,
          "hivesMargin": 5
        },
        "chartSettings": {
          "showLegend": true,
          "ySettings": {
            "unit": 17,
            "min": 0,
            "max": null
          }
        }
      },
      "customWidth": "50",
      "showPin": true,
      "name": "GPU-PodCountByK8SNamespace",
      "styleSettings": {
        "maxWidth": "50",
        "showBorder": true
      }
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "InsightsMetrics \r\n| where Name == \"nodeGpuCapacity\" \r\n| where Namespace == \"container.azm.ms/gpu\" \r\n| where Origin == \"container.azm.ms\"\r\n| where TimeGenerated >= {timeRange:start}\r\n| where TimeGenerated < {timeRange:end}\r\n| where '*' in ({selectedNodes}) or Computer in ({selectedNodes})\r\n| extend Tags = todynamic(Tags)\r\n| extend clusterId = tostring(Tags['container.azm.ms/clusterId'])\r\n{clusterIdWhereClause}\r\n| extend gpuVendor=strcat ('🔹 ',tostring(Tags.gpuVendor))\r\n| summarize gpuCountPerComputer=max(Val) by gpuVendor, Computer , bin(TimeGenerated, {timeRange:grain})\r\n| make-series ['GPU count by make'] =sum(gpuCountPerComputer) default = 0 on TimeGenerated from {timeRange:start} to {timeRange:end} step {timeRange:grain} by gpuVendor\r\n\r\n\r\n\r\n\r\n\r\n\r\n",
        "size": 0,
        "aggregation": 5,
        "showAnnotations": true,
        "showAnalytics": true,
        "title": "GPU Count by Make",
        "color": "blue",
        "timeContext": {
          "durationMs": 0
        },
        "timeContextFromParameter": "timeRange",
        "queryType": 0,
        "resourceType": "{ResourceType}",
        "crossComponentResources": [
          "{Resource}"
        ],
        "visualization": "table",
        "gridSettings": {
          "formatters": [
            {
              "columnMatch": "gpuVendor",
              "formatter": 1,
              "formatOptions": {
                "showIcon": true
              }
            },
            {
              "columnMatch": "GPU count by make",
              "formatter": 10,
              "formatOptions": {
                "showIcon": true
              },
              "numberFormat": {
                "unit": 17,
                "options": {
                  "style": "decimal"
                }
              },
              "tooltipFormat": {
                "tooltip": "{0}"
              }
            },
            {
              "columnMatch": "TimeGenerated",
              "formatter": 5,
              "formatOptions": {
                "showIcon": true
              }
            }
          ],
          "labelSettings": [
            {
              "columnId": "gpuVendor",
              "label": "Make",
              "comment": ""
            },
            {
              "columnId": "GPU count by make",
              "label": "Count"
            },
            {
              "columnId": "TimeGenerated"
            }
          ]
        },
        "tileSettings": {
          "titleContent": {
            "columnMatch": "gpuVendor",
            "formatOptions": {
              "showIcon": true
            }
          },
          "rightContent": {
            "columnMatch": "GPU count by make",
            "formatter": 10,
            "formatOptions": {
              "palette": "blue",
              "showIcon": true
            },
            "tooltipFormat": {
              "tooltip": "{0}"
            }
          },
          "showBorder": true,
          "sortCriteriaField": "TimeGenerated",
          "sortOrderField": 1
        },
        "chartSettings": {
          "ySettings": {
            "unit": 17,
            "min": 0,
            "max": null
          }
        }
      },
      "customWidth": "50",
      "showPin": true,
      "name": "GPU-GpuCountByMake",
      "styleSettings": {
        "maxWidth": "50",
        "showBorder": true
      }
    },
    {
      "type": 11,
      "content": {
        "version": "LinkItem/1.0",
        "style": "tabs",
        "links": []
      },
      "name": "links - 7"
    }
  ],
  "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
}
