查看器

@xihan-report/runtime 的公开接口:查看器元素与相关类型。样式在 @xihan-report/runtime/style.css。

<xh-report-viewer>

注册 <xh-report-viewer> 与它排出的 UI 元素(按需注册),宿主不必再全量注册 UI 元素。

属性

属性 attribute 类型 说明
schema — ReportDocument | undefined 报表定义。
dataProvider — ReportDataProvider | undefined 取数回调。
expressionEngine — ExpressionEngine | undefined 表达式引擎:计算字段与公式度量要用。
extensions — readonly ReportRuntimeExtension[] | undefined 卡片与视图种类、渲染、叠加层、导出与取数中间件的扩展;赋值时当场合并查重,冲突时退回原值再抛。
formatter — ReportFormatter | undefined 值的显示文字;缺省按格式说明调 formatValue。
parameters — ParameterValues | undefined 报表参数的取值;不给时用各参数的缺省值。
selections — LinkSelections | undefined 看板联动的选中值;给了就是受控。
locale locale string | undefined BCP 47 语言标记;缺省取全局配置。
timeZone time-zone string | undefined IANA 时区;缺省取运行环境所在的时区。
translations — Partial<ReportViewerTranslations> | undefined 元素自己的文案,压在全局配置之上。
hideParameters hide-parameters boolean | undefined 不显示参数栏;缺省显示。attribute 写 "false" 是显示,其余写法是不显示。

存取器

属性 读写 类型 说明
issues 只读 readonly ReportViewerIssue[] 最近一次校验报表定义与检查参数得到的问题。
loading 只读 boolean 是否还有未完成的取数。

方法

方法 说明
getResults(): ReportResults 此刻的计算结果,只读快照:主体视图或看板上已算好的卡片,以及当时的参数与联动。
refresh(options?: { readonly cards?: readonly string[] }): Promise<void> 重新取数并计算;看板可以只刷新部分卡片。
clearSelections(): void 清除看板联动的选中值。
export(format: string, options?: Readonly<Record<string, unknown>>): Promise<Blob | string> 导出成文件:交给登记了这种格式的第一个导出器(内置的 xlsx 在最前,扩展可以加别的格式),options 原样交给它。内置的 xlsx 把当前的计算结果写成工作簿:表格主体导出一张表(表名取 options.name,缺省取报表标题),看板按已算好的表格卡片各导一张(表名取卡片标题),写出部分按需加载,还没有可导出的结果时抛 RangeError。没有导出器认这种格式时抛 RangeError。

事件

事件都是冒泡的 CustomEvent。

事件 detail 说明
issues-change { issues: readonly ReportViewerIssue[] } 报表定义的校验问题或参数的检查问题变了。
load-error { card: string | null, error: unknown } 取数或计算出错:card 是出错的卡片,报表主体出错时为 null。
loading-change { loading: boolean } 开始或结束取数。
selections-change { value: LinkSelections } 看板联动的选中值变了:value 是联动 id 到选中取值的对照;受控时宿主要把它写回 selections。
parameters-change { value: ParameterValues } 参数栏改了参数:value 是新的参数取值,清空的参数写 null。
datum-press { card: string, link: string | null, value: unknown, chart: unknown } 转发图表卡片的 datum-press:link 与 value 是这次点按对应的联动与源维度上的取值,与联动无关时为 null。
action { card: string | null, link: string | null, value: unknown } & TableCellRef 表格的行主操作(点一格,或焦点行上按 Enter),用来下钻:card 是看板里的表格卡片,报表主体是表格时为 null;kind、column、values 说明点中的那一格(见 TableCellRef)。表格卡片作联动源时,link 与 value 是这次点按对应的联动与源维度上的取值,与联动无关时为 null。

函数

defineReportViewer() {#definereportviewer}

declare function defineReportViewer(): void

注册 <xh-report-viewer> 与它排出的 UI 元素(按需注册),宿主不必再全量注册 UI 元素。

取数

ReportDataProvider {#reportdataprovider}

使用方的取数回调:按 core 算出的请求取数,交回明细行或已聚合行。

type ReportDataProvider = (request: DatasetRequest, context: ReportDataContext) => Promise<DatasetData>

ReportDataContext {#reportdatacontext}

取数时附带的上下文:参数或联动变化、元素卸载时 signal 被取消。

属性 类型 说明
signal AbortSignal 取消信号:这一轮取数作废时触发,取数回调应随之中止请求。

结果与事件

ReportResults {#reportresults}

查看器此刻的计算结果,只读快照。

属性 类型 说明
parameters ParameterValues 这一轮取数用到的报表参数取值。
selections LinkSelections 看板联动的选中值。
body ViewResult | ExtensionViewResult | undefined 主体视图的结果;主体是看板或还没算好时为 undefined。
cards readonly { readonly result: CardResult, readonly filters: readonly FilterCondition[] }[] 看板上已算好的卡片,按卡片的先后;filters 是它当时收到的联动筛选。

ReportViewerIssue {#reportviewerissue}

查看器报出的问题:报表定义的校验问题与参数的检查问题,都带上 severity。

type ReportViewerIssue = SchemaIssue<ValidationIssueCode | ParameterIssueCode>

TableCellRef {#tablecellref}

表格里被行主操作点中的那一格在报表里的含义。

属性 类型 说明
kind 'detail' | 'group' | 'subtotal' 行的种类:明细行(交叉表是成员行)、组头、小计;总计在表尾,不报行主操作。
column string | null 点中那一格所在的报表列:明细表与分组报表是列 id 或分组 id,交叉表的值格是度量 id、行表头格是行维度 id;焦点行上按 Enter 时为 null。
values Readonly<Record<string, unknown>> 这一行(与点中那一列)在各维度上的取值,键与看板联动的 dimension 同一套写法:明细表是列 id,分组报表是分组 id(明细行另带各列 id),交叉表是行、列维度 id。

ChartPress {#chartpress}

UI 图表派发的 datum-press 明细里查看器用到的字段:图表家族带 seriesId 与 datum,热力图带 date 或 row、column。

属性 类型 说明
key unknown 点中的数据点在图表里的键。
seriesId? string 点中的系列。
datum? Readonly<Record<string, unknown>> 点中的数据行。
date? string 日历热力图点中的日期,YYYY-MM-DD。
row? string 矩阵热力图点中的行。
column? string 矩阵热力图点中的列。

显示文字

ReportFormatter {#reportformatter}

把一个值写成显示文字;缺失值由查看器先行处理,不会传进来。

type ReportFormatter = (value: unknown, format: FormatSpec | undefined, context: ReportFormatContext) => string

ReportFormatContext {#reportformatcontext}

格式化时的上下文。

属性 类型 说明
locale string | undefined BCP 47 语言标记;没有时按运行环境。
timeZone string IANA 时区:日期按它的墙上时间写。
type FieldType | undefined 值所在字段的类型;度量、按粒度取键的维度等没有字段类型时为 undefined。

ReportViewerTranslations {#reportviewertranslations}

查看器的内建文案。

文案键是 xh-report-viewer,中文在 @xihan-report/runtime/locale 的 reportZhCN 里。

键 类型 说明 中文
label string 查看器的可及名。 报表
loading string 正在加载…
empty string 没有数据时的提示。 没有数据
error string 取数或计算失败时的提示。 数据加载失败
invalid string 报表定义有问题、不能显示时的提示。 报表定义有问题,无法显示
parametersInvalid string 报表参数缺少或取值不合格时的提示。 报表参数缺少或取值不合格
total string 总计行、总计列的标签。 总计
subtotal string 小计行、小计列的标签。 小计
missing string 缺失值成员的显示文字。 (空)
parameters string 参数栏的可及名。 报表参数
clearSelections string 清除联动选中的按钮。 清除联动
exportXlsx string 内置 xlsx 导出器的名字。 Excel 工作簿

全部导出

designer-translations

名称 种类 说明
DEFAULT_REPORT_DESIGNER_TRANSLATIONS 常量 内建英文文案。
ReportDesignerCascade 接口 删除数据面板对象时一并删掉的别处的数目。
ReportDesignerIssueDetails 接口 问题文案的入参:校验问题的码与参数。
ReportDesignerTranslations 接口 设计器的内建文案。
ReportHistoryStepText 接口 撤销栈里一步的说明素材:对象种类已按语言取好。
ReportTourStepKey 类型 新手引导里报表自己的几步:数据面板、「数据」菜单、字段栏、卡片、联动与预览。
ReportTourStepText 接口 引导一步的标题与说明。

extensions

名称 种类 说明
createReportRuntimeModel 函数 合出运行时用的报表模型:core 的合并与查重照旧;渲染、导出器重名时抛 DesignerExtensionError。
REPORT_RUNTIME_EXTENSION 常量 运行时内置扩展:三种内置卡片的渲染与 xlsx 导出。
REPORT_RUNTIME_EXTENSION_ID 常量 运行时内置扩展的 id。
ReportCardRenderer 类型 卡片的渲染:把计算结果画进卡片的内容区。
ReportDataMiddleware 类型 取数中间件:拿到下一层的取数回调,返回包在它外面的一层。
ReportExportContext 接口 导出时交给导出器的上下文。
ReportOverlay 接口 叠加层:铺满看板的一层,画在各卡片之下(below)或之上(above);只在主体是看板时画。
ReportOverlayContext 接口 画叠加层时的上下文。
ReportRendered 类型 渲染出的、能接联动与下钻的内容:图表或表格;别的内容为 undefined。
ReportResults 接口 查看器此刻的计算结果,只读快照。
ReportRuntimeExtension 接口 报表运行时层的扩展。
ReportRuntimeModel 接口 运行时用的报表模型:core 的模型加上渲染、导出与取数中间件。
ReportScene 接口 叠加层的场景:看板与它上面各卡片的布局和状态。
ReportSceneCard 接口 叠加层场景里的一张卡片。
ReportViewRenderer 类型 作主体的扩展视图的渲染,规则同卡片。

translations

名称 种类 说明
DEFAULT_REPORT_VIEWER_TRANSLATIONS 常量 内建英文文案。
ReportViewerTranslations 接口 查看器的内建文案。

viewer/charts

名称 种类 说明
RenderedChart 接口 渲染好的图表卡片。

viewer/context

名称 种类 说明
RenderContext 接口 渲染上下文。

viewer/format

名称 种类 说明
defaultFormatter 常量 缺省格式化器:有格式说明时用 formatValue(它拒绝的值退回原样文字);date / datetime 字段写成 timeZone 里的墙上时间(YYYY-MM-DD 或 YYYY-MM-DD HH:mm:ss);数值按 locale 写千分位;其余写成文本。
ReportFormatContext 接口 格式化时的上下文。
ReportFormatter 类型 把一个值写成显示文字;缺失值由查看器先行处理,不会传进来。

viewer/report-viewer

名称 种类 说明
defineReportViewer 函数 注册 <xh-report-viewer> 与它排出的 UI 元素(按需注册),宿主不必再全量注册 UI 元素。
REPORT_VIEWER_TAG 常量 查看器的标签名。
ReportDataContext 接口 取数时附带的上下文:参数或联动变化、元素卸载时 signal 被取消。
ReportDataProvider 类型 使用方的取数回调:按 core 算出的请求取数,交回明细行或已聚合行。
ReportViewerEventMap 接口 查看器派发的事件。
ReportViewerIssue 类型 查看器报出的问题:报表定义的校验问题与参数的检查问题,都带上 severity。
XhReportViewer 类 报表查看器 <xh-report-viewer>:按报表定义、参数与联动取数,算出并绘出报表主体或看板。

viewer/table

名称 种类 说明
RenderedTable 接口 渲染好的表格:按 xh-table 行主操作报出的行 id 与列 id 查出点中的那一格。
TableCellRef 接口 表格里被行主操作点中的那一格在报表里的含义。

@xihan-report/runtime/locale 的导出

locale

名称 种类 说明
reportDeDE 常量 报表的德语文案:查看器、设计器与 designer-shell 零件。
reportEnUS 常量 报表的英文文案:查看器、设计器与 designer-shell 零件。
reportEsES 常量 报表的西班牙语文案:查看器、设计器与 designer-shell 零件。
reportFrFR 常量 报表的法语文案:查看器、设计器与 designer-shell 零件。
reportJaJP 常量 报表的日语文案:查看器、设计器与 designer-shell 零件。
reportKoKR 常量 报表的韩语文案:查看器、设计器与 designer-shell 零件。
reportPtBR 常量 报表的巴西葡萄牙语文案:查看器、设计器与 designer-shell 零件。
reportRuRU 常量 报表的俄语文案:查看器、设计器与 designer-shell 零件。
reportZhCN 常量 报表的简体中文文案:查看器、设计器与 designer-shell 零件。
reportZhTW 常量 报表的繁体中文文案:查看器、设计器与 designer-shell 零件。

@xihan-report/runtime/xlsx 的导出

xlsx/report

名称 种类 说明
crosstabSheet 函数 交叉表排成工作表:左上角是表头区,上方是列轴的多层表头,左侧是行轴的多层表头,相同的上层成员合并单元格,小计与总计的标签向内合并;多个度量按 measuresOn 排在最内一层,没有列维度时列轴只有度量一层。
groupSheet 函数 分组报表排成工作表:前几列是各级分组,之后是视图的列。
SheetOptions 接口 生成工作表的选项。
tableSheet 函数 明细表排成工作表:首行是列标题,之后每行一条明细,有汇总时末行写合计(首列没有汇总时写合计标签);冻结首行。
XlsxTranslations 类型 工作表里的内建文字:查看器语言包里的总计与小计,两边共用一份。