dataworks中quick bi 数据集里这个的sql是什么?

dataworks中quick bi 数据集里这个的sql是什么?

展开
收起
真的很搞笑 2024-03-26 15:12:49 78 分享 版权
阿里云 AI 助理回答

在DataWorks中使用Quick BI创建数据集时,SQL的编写方式取决于具体的数据分析需求。以下是基于知识库资料的详细说明和示例:


1. 通过参数SQL实现占比计算

如果需要在Quick BI中实现占比计算(例如按城市维度汇总销售额,并计算占所属省份销售额的比值),可以使用以下SQL结构:

SELECT 
    a.city,
    SUM(a.fenzi) / SUM(b.fenmu) AS ratio
FROM 
    (
        SELECT 
            province, 
            city, 
            SUM(order_amt) AS fenzi
        FROM 
            zhanbi_test
        WHERE 
            $expr{date:date_para}
            AND $expr{province:province_para}
            AND $expr{city:city_para}
        GROUP BY 
            province, city
    ) a
LEFT JOIN 
    (
        SELECT 
            province, 
            SUM(order_amt) AS fenmu
        FROM 
            zhanbi_test
        WHERE 
            $expr{date:date_para}
            AND $expr{province:province_para}
            AND $expr{city:city_para}
        GROUP BY 
            province
    ) b 
ON a.province = b.province
GROUP BY 
    a.city;

关键点: - $expr{} 是Quick BI中的参数化语法,用于动态传递日期、省份、城市等筛选条件。 - fenzi 表示分子(城市销售额),fenmu 表示分母(省份总销售额)。 - 需要在数据集的参数设置中将日期字段转换为日期类型。


2. 通过参数SQL实现累计计算

如果需要实现累计计算(例如月累计),可以参考以下SQL:

SELECT 
    a.mon_date, 
    AVG(a.order_num) AS order_num, 
    SUM(b.order_num) AS add_num
FROM 
    (
        SELECT 
            DATE_FORMAT(report_date, '%Y/%m') AS mon_date, 
            COUNT(DISTINCT order_id) AS order_num, 
            MAX(DATE_FORMAT(report_date, '%Y/%m')) AS max_mon_date
        FROM 
            company_sales_record_copy
        WHERE 
            $expr{report_date:month_date}
        GROUP BY 
            DATE_FORMAT(report_date, '%Y/%m')
    ) a
LEFT JOIN 
    (
        SELECT 
            DATE_FORMAT(report_date, '%Y/%m') AS mon_date, 
            COUNT(DISTINCT order_id) AS order_num
        FROM 
            company_sales_record_copy
        WHERE 
            $expr{report_date:month_date}
        GROUP BY 
            DATE_FORMAT(report_date, '%Y/%m')
    ) b 
ON a.mon_date >= b.mon_date
GROUP BY 
    a.mon_date;

关键点: - DATE_FORMAT(report_date, '%Y/%m') 用于将日期格式化为年/月。 - a.mon_date >= b.mon_date 实现了累计逻辑。 - $expr{} 参数化语法允许用户动态选择时间范围。


3. 常见问题与注意事项

  • 字段类型转换:如果字段为Unix时间戳且存储为文本或数值类型,需使用 from_unixtime 函数进行转换。例如:
    SELECT from_unixtime(unix_timestamp_field) AS standard_datetime
    FROM your_table;
    
  • 聚合函数限制:维度计算字段不允许使用 SUMAVG 等聚合函数,若需聚合,请保存为度量字段。
  • 空值处理:可以在数据集或仪表板中设置空值展示样式。

4. SQL报错排查

如果在Quick BI中执行SQL时出现报错(如 Incorrect syntax near the keyword 'ORDER'),可能的原因包括: - SQL语法不符合目标数据库的要求(如SQL Server对关键字的敏感性)。 - 参数化语法未正确配置。

建议检查SQL语句是否符合目标数据库的规范,并确保 $expr{} 参数化语法正确使用。


以上是针对DataWorks中Quick BI数据集SQL的详细说明和示例。根据具体业务需求,您可以调整SQL逻辑以满足分析目标。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。

还有其他疑问?
咨询AI助理