如何从 JSON 解析并显示 Bold BI 中的 CIBIL 付款历史记录

问题描述 投票:0回答:1

我正在尝试解析 CIBIL 报告中的 JSON 响应,并将 Bold BI 中的

paymentHistory
字段显示为表格可视化。目标是显示 36 个月内的“逾期天数/资产分类”(从左到右)。下面是我想要实现的格式的示例:

逾期天数:

000 000 055 024 000 000 000 000 000 000 000 000 000 000 024 024 084 113 113 114 113 116 115 115 116 085 055 024 000 000

日期(月-年):

10-24 09-24 08-24 07-24 06-24 05-24 04-24 03-24 02-24 01-24 12-23 11-23 10-23 09-23 08-23 07-23 06 -23 05-23 04-23 03-23 02-23 01-23 12-22 11-22 10-22 09-22 08-22 07-22 06-22 05-22

这是 JSON 数据的片段:

{
  "index": "T004",
  "memberShortName": "NOT DISCLOSED",
  "accountType": "05",
  "dateOpened": "23052022",
  "paymentHistory": "000000055024000000000000000000000000000000024024084113113114113116115115116085055024000000",
  "paymentStartDate": "01102024",
  "paymentEndDate": "01052022"
}

我想提取

paymentHistory
字符串并将其格式化以显示“逾期天数”以及粗体 BI 中的相应月份 (MM-YY)。
paymentHistory
是一个字符串,其中每组三位数字代表给定月份的逾期天数。

我尝试过的

由于 Bold BI 中可用的表达式有限,我使用

SUBSTRING
表达式将
paymentHistory
拆分为代表逾期天数的 3 位数字块。但是,我不知道如何并排显示月份和值。这使得很难将“逾期天数”与相应的月份正确对齐。

我所期待的

我希望从 JSON 数据中动态提取

paymentHistory
字符串并将其拆分为 3 位数字块,每个块代表每个月的“逾期天数”。我希望这些值能够在 Bold BI 中以表格格式自动与相应的月份 (MM-YY) 对齐。具体来说,我希望看到一种灵活的解决方案,能够适应不同长度的
paymentHistory
,而无需针对不同的数据集手动调整代码。理想情况下,这将使我能够以清晰且有组织的方式轻松可视化支付历史数据。

sql arrays json powerbi business-intelligence
1个回答
0
投票

你可以从这个开始:

with data (js) as (
    select q'~{
  "index": "T004",
  "memberShortName": "NOT DISCLOSED",
  "accountType": "05",
  "dateOpened": "23052022",
  "paymentHistory": "000000055024000000000000000000000000000000024024084113113114113116115115116085055024000000",
  "paymentStartDate": "01102024",
  "paymentEndDate": "01052022"
}~' from dual
),
payments(paymentHistory, paymentStartDate) as (
    select paymentHistory, to_date(paymentStartDate, 'ddmmyyyy') as paymentStartDate
    from data d,
    json_table(
        d.js
        columns (
            paymentHistory varchar2(4000) path '$.paymentHistory',
            paymentStartDate varchar2(8) path '$.paymentStartDate'
        )
    )
)
select 
    substr(paymentHistory, 3*(level-1), 3) as days_past_due,
    to_char(add_months(paymentStartDate, -(level-1)),'MM-YY') as "DATE"
from payments
connect by 3*(level-1) < length(paymentHistory)
;


000 10-24
000 09-24
005 08-24
502 07-24
...
© www.soinside.com 2019 - 2024. All rights reserved.