重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
reporting-dashboards by groeimetai/snow-flow
npx skills add https://github.com/groeimetai/snow-flow --skill reporting-dashboardsServiceNow 提供全面的报表功能,用于数据可视化和商业智能。
| 类型 | 使用场景 | 示例 |
|---|---|---|
| 列表 | 表格数据 | 事件列表 |
| 条形图 | 类别比较 | 按优先级划分的事件 |
| 饼图/环形图 | 分布情况 | 按类别划分的工单 |
| 折线图/面积图 | 随时间变化的趋势 | 每周工单量 |
| 数据透视表 | 多维度分析 | 优先级 x 类别 |
| 单值计分卡 | 关键绩效指标值 | 未解决的 P1 事件数量 |
| 仪表盘 | 进度/阈值 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| SLA 合规性 |
// Create list report
var report = new GlideRecord("sys_report")
report.initialize()
report.setValue("title", "Open High Priority Incidents")
report.setValue("table", "incident")
report.setValue("type", "list")
// Filter condition
report.setValue("filter", "active=true^priority<=2")
// Columns
report.setValue("field", "number,short_description,priority,state,assigned_to,opened_at")
// Sorting
report.setValue("orderby", "priority")
report.setValue("order", "ASC")
// Grouping (optional)
report.setValue("group", "assignment_group")
// Access control
report.setValue("user", gs.getUserID())
report.setValue("roles", "itil")
report.insert()
// Create bar chart
var barReport = new GlideRecord("sys_report")
barReport.initialize()
barReport.setValue("title", "Incidents by Priority")
barReport.setValue("table", "incident")
barReport.setValue("type", "bar")
// Aggregation
barReport.setValue("aggregate", "COUNT")
barReport.setValue("group", "priority")
// Filter
barReport.setValue("filter", "active=true")
// Chart options
barReport.setValue("show_data_label", true)
barReport.setValue("show_legend", true)
barReport.setValue("chart_color", "blue")
barReport.insert()
// Create trend line chart
var trendReport = new GlideRecord("sys_report")
trendReport.initialize()
trendReport.setValue("title", "Incident Volume - Last 30 Days")
trendReport.setValue("table", "incident")
trendReport.setValue("type", "line")
// Time-based grouping
trendReport.setValue("trend", "opened_at")
trendReport.setValue("trend_interval", "day")
// Aggregation
trendReport.setValue("aggregate", "COUNT")
// Time filter
var thirtyDaysAgo = new GlideDateTime()
thirtyDaysAgo.addDaysLocalTime(-30)
trendReport.setValue("filter", "opened_at>=" + thirtyDaysAgo.getValue())
// Stacked by category
trendReport.setValue("stack", "priority")
trendReport.insert()
// Create pivot table
var pivotReport = new GlideRecord("sys_report")
pivotReport.initialize()
pivotReport.setValue("title", "Incidents: Priority vs Category")
pivotReport.setValue("table", "incident")
pivotReport.setValue("type", "pivot")
// Dimensions
pivotReport.setValue("group", "priority") // Rows
pivotReport.setValue("stack", "category") // Columns
// Aggregation
pivotReport.setValue("aggregate", "COUNT")
// Filter
pivotReport.setValue("filter", "active=true")
// Show totals
pivotReport.setValue("show_row_total", true)
pivotReport.setValue("show_column_total", true)
pivotReport.insert()
// Create dashboard
var dashboard = new GlideRecord("sys_dashboard")
dashboard.initialize()
dashboard.setValue("name", "IT Service Desk Dashboard")
dashboard.setValue("description", "Key metrics for service desk operations")
// Layout
dashboard.setValue("layout", "3") // 1, 2, 3, or 4 columns
// Access
dashboard.setValue("view_as", "desktop")
dashboard.setValue("roles", "itil")
var dashboardSysId = dashboard.insert()
// Add report widget
function addReportToDashboard(dashboardId, reportId, row, column, width, height) {
var widget = new GlideRecord("sys_dashboard_widget")
widget.initialize()
widget.setValue("dashboard", dashboardId)
widget.setValue("report", reportId)
widget.setValue("row", row)
widget.setValue("column", column)
widget.setValue("width", width || 1) // columns wide
widget.setValue("height", height || 1) // rows tall
return widget.insert()
}
// Layout example (3-column dashboard)
// Row 0: Three single-score cards
addReportToDashboard(dashboardSysId, openIncidentsReport, 0, 0, 1, 1)
addReportToDashboard(dashboardSysId, avgResolutionReport, 0, 1, 1, 1)
addReportToDashboard(dashboardSysId, slaComplianceReport, 0, 2, 1, 1)
// Row 1: Full-width trend chart
addReportToDashboard(dashboardSysId, trendReport, 1, 0, 3, 2)
// Row 2: Two charts side by side
addReportToDashboard(dashboardSysId, priorityPieChart, 3, 0, 1, 2)
addReportToDashboard(dashboardSysId, categoryBarChart, 3, 1, 2, 2)
// Schedule report for email delivery
var schedule = new GlideRecord("sys_report_schedule")
schedule.initialize()
schedule.setValue("report", reportSysId)
schedule.setValue("name", "Weekly Incident Summary")
// Recipients
schedule.setValue("recipients", "it-managers@company.com")
schedule.setValue("recipient_users", managersSysIds) // comma-separated
schedule.setValue("recipient_groups", itManagersGroup)
// Schedule (cron)
schedule.setValue("run", "weekly")
schedule.setValue("day", "monday")
schedule.setValue("time", "08:00:00")
// Format
schedule.setValue("format", "pdf") // pdf, xlsx, csv
// Email settings
schedule.setValue("subject", "Weekly IT Incident Summary")
schedule.setValue("message", "Please find attached the weekly incident summary report.")
schedule.setValue("active", true)
schedule.insert()
// Report with calculated field
var report = new GlideRecord("sys_report")
report.initialize()
report.setValue("title", "SLA Breach Analysis")
report.setValue("table", "task_sla")
report.setValue("type", "bar")
// Custom formula aggregation
report.setValue("aggregate", "SUM")
report.setValue("field", "has_breached") // Boolean to count
// Percentage calculation
report.setValue("formula", "CASE WHEN {has_breached} = 1 THEN 1 ELSE 0 END")
report.setValue("group", "sla.name")
report.insert()
// Create report with drill-down capability
var summaryReport = new GlideRecord("sys_report")
summaryReport.initialize()
summaryReport.setValue("title", "Incidents by Assignment Group")
summaryReport.setValue("table", "incident")
summaryReport.setValue("type", "bar")
summaryReport.setValue("aggregate", "COUNT")
summaryReport.setValue("group", "assignment_group")
// Enable drill-down
summaryReport.setValue("is_drillable", true)
summaryReport.setValue("drill_down_report", detailReportSysId)
summaryReport.insert()
// Export report to CSV
function exportReportToCSV(reportSysId) {
var report = new GlideRecord("sys_report")
if (!report.get(reportSysId)) return null
var ga = new GlideAggregate(report.getValue("table"))
// Apply filter
var filter = report.getValue("filter")
if (filter) {
ga.addEncodedQuery(filter)
}
// Apply grouping
var groupField = report.getValue("group")
if (groupField) {
ga.addAggregate("COUNT")
ga.groupBy(groupField)
}
ga.query()
var results = []
while (ga.next()) {
results.push({
group: ga.getValue(groupField),
count: ga.getAggregate("COUNT"),
})
}
return results
}
// Get report data via REST
// GET /api/now/stats/{table}?sysparm_query={filter}&sysparm_count=true&sysparm_group_by={field}
// Example: Incidents by priority
// GET /api/now/stats/incident?sysparm_query=active=true&sysparm_count=true&sysparm_group_by=priority
| 工具 | 用途 |
|---|---|
snow_create_report | 创建报表 |
snow_create_dashboard | 创建仪表板 |
snow_create_scheduled_report | 计划交付 |
snow_discover_reporting_tables | 查找可用表 |
snow_discover_report_fields | 获取字段选项 |
snow_export_report_data | 导出数据 |
snow_create_data_visualization | 创建图表 |
// 1. Discover available tables
var tables = await snow_discover_reporting_tables({
category: "itsm",
})
// 2. Get fields for table
var fields = await snow_discover_report_fields({
table: "incident",
})
// 3. Create report
var reportId = await snow_create_report({
title: "Incident Overview",
table: "incident",
type: "bar",
group: "priority",
aggregate: "COUNT",
filter: "active=true",
})
// 4. Create dashboard
var dashboardId = await snow_create_dashboard({
name: "Service Desk Overview",
layout: "3-column",
})
// 5. Add report to dashboard
await snow_add_dashboard_widget({
dashboard: dashboardId,
report: reportId,
row: 0,
column: 0,
})
// 6. Schedule report
await snow_create_scheduled_report({
report: reportId,
frequency: "weekly",
recipients: "managers@company.com",
format: "pdf",
})
每周安装次数
66
代码仓库
GitHub 星标数
57
首次出现
2026年1月22日
安全审计
安装于
codex60
gemini-cli59
opencode59
github-copilot59
cursor57
claude-code56
ServiceNow provides comprehensive reporting capabilities for data visualization and business intelligence.
| Type | Use Case | Example |
|---|---|---|
| List | Tabular data | Incident list |
| Bar | Category comparison | Incidents by priority |
| Pie/Donut | Distribution | Tickets by category |
| Line/Area | Trends over time | Weekly ticket volume |
| Pivot Table | Multi-dimensional | Priority x Category |
| Single Score | KPI value | Open P1 count |
| Gauge | Progress/threshold | SLA compliance |
// Create list report
var report = new GlideRecord("sys_report")
report.initialize()
report.setValue("title", "Open High Priority Incidents")
report.setValue("table", "incident")
report.setValue("type", "list")
// Filter condition
report.setValue("filter", "active=true^priority<=2")
// Columns
report.setValue("field", "number,short_description,priority,state,assigned_to,opened_at")
// Sorting
report.setValue("orderby", "priority")
report.setValue("order", "ASC")
// Grouping (optional)
report.setValue("group", "assignment_group")
// Access control
report.setValue("user", gs.getUserID())
report.setValue("roles", "itil")
report.insert()
// Create bar chart
var barReport = new GlideRecord("sys_report")
barReport.initialize()
barReport.setValue("title", "Incidents by Priority")
barReport.setValue("table", "incident")
barReport.setValue("type", "bar")
// Aggregation
barReport.setValue("aggregate", "COUNT")
barReport.setValue("group", "priority")
// Filter
barReport.setValue("filter", "active=true")
// Chart options
barReport.setValue("show_data_label", true)
barReport.setValue("show_legend", true)
barReport.setValue("chart_color", "blue")
barReport.insert()
// Create trend line chart
var trendReport = new GlideRecord("sys_report")
trendReport.initialize()
trendReport.setValue("title", "Incident Volume - Last 30 Days")
trendReport.setValue("table", "incident")
trendReport.setValue("type", "line")
// Time-based grouping
trendReport.setValue("trend", "opened_at")
trendReport.setValue("trend_interval", "day")
// Aggregation
trendReport.setValue("aggregate", "COUNT")
// Time filter
var thirtyDaysAgo = new GlideDateTime()
thirtyDaysAgo.addDaysLocalTime(-30)
trendReport.setValue("filter", "opened_at>=" + thirtyDaysAgo.getValue())
// Stacked by category
trendReport.setValue("stack", "priority")
trendReport.insert()
// Create pivot table
var pivotReport = new GlideRecord("sys_report")
pivotReport.initialize()
pivotReport.setValue("title", "Incidents: Priority vs Category")
pivotReport.setValue("table", "incident")
pivotReport.setValue("type", "pivot")
// Dimensions
pivotReport.setValue("group", "priority") // Rows
pivotReport.setValue("stack", "category") // Columns
// Aggregation
pivotReport.setValue("aggregate", "COUNT")
// Filter
pivotReport.setValue("filter", "active=true")
// Show totals
pivotReport.setValue("show_row_total", true)
pivotReport.setValue("show_column_total", true)
pivotReport.insert()
// Create dashboard
var dashboard = new GlideRecord("sys_dashboard")
dashboard.initialize()
dashboard.setValue("name", "IT Service Desk Dashboard")
dashboard.setValue("description", "Key metrics for service desk operations")
// Layout
dashboard.setValue("layout", "3") // 1, 2, 3, or 4 columns
// Access
dashboard.setValue("view_as", "desktop")
dashboard.setValue("roles", "itil")
var dashboardSysId = dashboard.insert()
// Add report widget
function addReportToDashboard(dashboardId, reportId, row, column, width, height) {
var widget = new GlideRecord("sys_dashboard_widget")
widget.initialize()
widget.setValue("dashboard", dashboardId)
widget.setValue("report", reportId)
widget.setValue("row", row)
widget.setValue("column", column)
widget.setValue("width", width || 1) // columns wide
widget.setValue("height", height || 1) // rows tall
return widget.insert()
}
// Layout example (3-column dashboard)
// Row 0: Three single-score cards
addReportToDashboard(dashboardSysId, openIncidentsReport, 0, 0, 1, 1)
addReportToDashboard(dashboardSysId, avgResolutionReport, 0, 1, 1, 1)
addReportToDashboard(dashboardSysId, slaComplianceReport, 0, 2, 1, 1)
// Row 1: Full-width trend chart
addReportToDashboard(dashboardSysId, trendReport, 1, 0, 3, 2)
// Row 2: Two charts side by side
addReportToDashboard(dashboardSysId, priorityPieChart, 3, 0, 1, 2)
addReportToDashboard(dashboardSysId, categoryBarChart, 3, 1, 2, 2)
// Schedule report for email delivery
var schedule = new GlideRecord("sys_report_schedule")
schedule.initialize()
schedule.setValue("report", reportSysId)
schedule.setValue("name", "Weekly Incident Summary")
// Recipients
schedule.setValue("recipients", "it-managers@company.com")
schedule.setValue("recipient_users", managersSysIds) // comma-separated
schedule.setValue("recipient_groups", itManagersGroup)
// Schedule (cron)
schedule.setValue("run", "weekly")
schedule.setValue("day", "monday")
schedule.setValue("time", "08:00:00")
// Format
schedule.setValue("format", "pdf") // pdf, xlsx, csv
// Email settings
schedule.setValue("subject", "Weekly IT Incident Summary")
schedule.setValue("message", "Please find attached the weekly incident summary report.")
schedule.setValue("active", true)
schedule.insert()
// Report with calculated field
var report = new GlideRecord("sys_report")
report.initialize()
report.setValue("title", "SLA Breach Analysis")
report.setValue("table", "task_sla")
report.setValue("type", "bar")
// Custom formula aggregation
report.setValue("aggregate", "SUM")
report.setValue("field", "has_breached") // Boolean to count
// Percentage calculation
report.setValue("formula", "CASE WHEN {has_breached} = 1 THEN 1 ELSE 0 END")
report.setValue("group", "sla.name")
report.insert()
// Create report with drill-down capability
var summaryReport = new GlideRecord("sys_report")
summaryReport.initialize()
summaryReport.setValue("title", "Incidents by Assignment Group")
summaryReport.setValue("table", "incident")
summaryReport.setValue("type", "bar")
summaryReport.setValue("aggregate", "COUNT")
summaryReport.setValue("group", "assignment_group")
// Enable drill-down
summaryReport.setValue("is_drillable", true)
summaryReport.setValue("drill_down_report", detailReportSysId)
summaryReport.insert()
// Export report to CSV
function exportReportToCSV(reportSysId) {
var report = new GlideRecord("sys_report")
if (!report.get(reportSysId)) return null
var ga = new GlideAggregate(report.getValue("table"))
// Apply filter
var filter = report.getValue("filter")
if (filter) {
ga.addEncodedQuery(filter)
}
// Apply grouping
var groupField = report.getValue("group")
if (groupField) {
ga.addAggregate("COUNT")
ga.groupBy(groupField)
}
ga.query()
var results = []
while (ga.next()) {
results.push({
group: ga.getValue(groupField),
count: ga.getAggregate("COUNT"),
})
}
return results
}
// Get report data via REST
// GET /api/now/stats/{table}?sysparm_query={filter}&sysparm_count=true&sysparm_group_by={field}
// Example: Incidents by priority
// GET /api/now/stats/incident?sysparm_query=active=true&sysparm_count=true&sysparm_group_by=priority
| Tool | Purpose |
|---|---|
snow_create_report | Create report |
snow_create_dashboard | Create dashboard |
snow_create_scheduled_report | Schedule delivery |
snow_discover_reporting_tables | Find available tables |
snow_discover_report_fields | Get field options |
snow_export_report_data |
// 1. Discover available tables
var tables = await snow_discover_reporting_tables({
category: "itsm",
})
// 2. Get fields for table
var fields = await snow_discover_report_fields({
table: "incident",
})
// 3. Create report
var reportId = await snow_create_report({
title: "Incident Overview",
table: "incident",
type: "bar",
group: "priority",
aggregate: "COUNT",
filter: "active=true",
})
// 4. Create dashboard
var dashboardId = await snow_create_dashboard({
name: "Service Desk Overview",
layout: "3-column",
})
// 5. Add report to dashboard
await snow_add_dashboard_widget({
dashboard: dashboardId,
report: reportId,
row: 0,
column: 0,
})
// 6. Schedule report
await snow_create_scheduled_report({
report: reportId,
frequency: "weekly",
recipients: "managers@company.com",
format: "pdf",
})
Weekly Installs
66
Repository
GitHub Stars
57
First Seen
Jan 22, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
codex60
gemini-cli59
opencode59
github-copilot59
cursor57
claude-code56
build-dashboard:快速构建交互式HTML仪表板 | 无需服务器,支持图表、表格、筛选器
884 周安装
2025漏洞扫描器指南:OWASP Top 10、供应链安全与风险优先级排序
512 周安装
数据新鲜度检查工具 - 监控数据更新状态,确保数据可用性 | Astronomer Agents
513 周安装
简明规划技能:AI辅助项目规划工具,生成可执行原子化步骤计划
510 周安装
Unbrowse:面向AI智能体的即插即用浏览器替代方案,实现网站API缓存与快速复用
510 周安装
Astro CLI 本地环境管理指南:启动、停止、重启 Airflow 及故障排除
516 周安装
App Builder 应用构建编排器:AI 智能规划技术栈、项目结构与多代理协调
515 周安装
| Export data |
snow_create_data_visualization | Create chart |