You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP B1 Service Layer中YEAR/MONTH函数的SQL查询问题求助

解决方案:SAP B1 Service Layer按设备、年月分组统计成本

方案1:直接在HANA SQL中提取年月(最简便)

Service Layer本身不支持YEAR()/MONTH()函数,但提交的SQL会直接在HANA数据库执行,可利用HANA原生日期处理函数完成分组,无需依赖OData的$apply。

修正后的SQL查询(补全表别名、用TO_CHAR提取年月):

SELECT
    t10."OcrCode4" as "Equipo",
    TO_CHAR(t0."DocDate", 'YYYY') as "Anio",
    TO_CHAR(t0."DocDate", 'MM') as "Mes",
    SUM(t0."DocTotal") as "Total"
FROM OPCH t0
INNER JOIN PCH1 t10 ON t0."DocEntry" = t10."DocEntry"
WHERE t0."CANCELED" = 'N' AND t10."OcrCode4" > 'A0000000'
GROUP BY t10."OcrCode4", TO_CHAR(t0."DocDate", 'YYYY'), TO_CHAR(t0."DocDate", 'MM')
ORDER BY t10."OcrCode4", "Anio", "Mes"

将此SQL通过POST /b1s/v1/SQLQueries创建查询后,直接调用/SQLQueries('sqlXX')/List即可获取已分组统计的结果,无需额外处理。

方案2:利用OData日期属性完成$apply分组

OData规范中,日期类型字段自带Year、Month等属性,无需函数调用。先修正SQLQuery(解决原SQL中GROUP BY与SELECT字段不匹配的问题):

POST https://**:50003/b1s/v1/SQLQueries
{
  "SqlCode": "sql21",
  "SqlName": "QueryOnItem21",
  "SqlText": "SELECT t10.OcrCode4 as equipo, t0.DocDate as fecha, t0.DocTotal as total FROM OPCH t0 INNER JOIN PCH1 t10 ON t0.DocEntry = t10.DocEntry WHERE t0.CANCELED = 'N' AND t10.OcrCode4 > 'A0000000'"
}

再使用OData属性路径进行分组:

https://**:50003/b1s/v1/SQLQueries('sql21')/List?$apply=groupby((equipo, fecha/Year, fecha/Month), aggregate(total with sum as TotalSales))

方案3:在Power BI/Excel中直接处理分组

若不想修改Service Layer查询,可直接拉取原始数据(设备、日期、金额)到前端工具完成分组:

  • Power BI:添加计算列,用YEAR([fecha])和MONTH([fecha])提取年月,再通过可视化或分组功能统计总额。
  • Excel:使用数据透视表,将设备、年份、月份拖入行区域,金额拖入值区域并设置为求和。

内容的提问来源于stack exchange,提问作者DeSyDo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:00:32