qlik rest 数据源分页读取sap odata v4数据
LIB CONNECT TO rest_test ; // 1. 定义分页变量 SET vPageCount 1; SET vNextURL ; TempData: SQL SELECT odata.context, odata.metadataEtag, odata.nextLink, odata.count, __KEY_root, (SELECT bukrs, __FK_value FROM value FK __FK_value) FROM JSON (wrap on) root PK __KEY_root; // 从原始表加载下一页URL到 [root] 表 [root]: LOAD [__KEY_root], [odata.count] as count, [odata.nextLink] as vNextURL RESIDENT TempData WHERE NOT IsNull([__KEY_root]); // 获取第一页的下一页链接 LET vNextURL Peek(vNextURL, 0, root); TRACE nNextURL: $(vNextURL); // 加载明细数据到 [value] 表 [result]: LOAD [bukrs], [__FK_value] AS [__KEY_root] RESIDENT TempData WHERE NOT IsNull([__FK_value]); // 丢弃原始主表 DROP TABLE TempData; // 2. 循环获取所有剩余页面 DO WHILE Len(Trim(vNextURL)) 0 LET vPageCount $(vPageCount) 1; TRACE Fetching page No: $(vPageCount); // 使用 WITH CONNECTION 动态传入下一页的URL TempData: SQL SELECT odata.context, odata.metadataEtag, odata.nextLink, odata.count, __KEY_root, (SELECT bukrs, __FK_value FROM value FK __FK_value) FROM JSON (wrap on) root PK __KEY_root WITH CONNECTION (URL https://host:port$(vNextURL)); // 关键点URL被动态覆盖 // 加载新页面的明细数据并追加到 [value] 表 Concatenate([result]) LOAD [bukrs], [__FK_value] AS [__KEY_root] RESIDENT TempData WHERE NOT IsNull([__FK_value]); // 获取新页面中的下一页链接 // LET vNextURL Peek(odata.nextLink, 0, TempData); // TRACE nNextURL: $(vNextURL); DROP TABLE [root]; [root]: LOAD [__KEY_root], [odata.count] as count, [odata.nextLink] as vNextURL RESIDENT TempData WHERE NOT IsNull([__KEY_root]); // 获取第一页的下一页链接 LET vNextURL Peek(vNextURL, 0, root); TRACE nNextURL: $(vNextURL); // 清理临时表为下一次循环做准备 DROP TABLE TempData; LOOP TRACE Finished. Total pages loaded: $(vPageCount);