Jinja sql - 如何混合和匹配列名,并有条件地基于多个列表变量执行计算

Jinja sql - How to mix and match column names and conditionally perform calculations based on multiple list variables

提问人:Jonathan P 提问时间:11/11/2023 更新时间:11/11/2023 访问量:29

问:

目标:使用 Jinja 和 SQL 创建一个模板,用于根据标准化列名计算指标。

用例:us_outlet_dollars + us_fullprice_dollars = us_total_dollars。代码将查找前缀“us”或“ca”以及后缀“outlet_dollars”和“fullprice_dollars”,然后遍历所有组合,将两者相加得到总计。所有列都已存在,但我会检查总列数是否计算准确,如果没有,则强制这样做。最终,我想更进一步,区分“美元”、“单位”和“成本”。

基表:

us_outlet_dollars us_fullprice_dollars us_total_dollars ca_outlet_dollars ca_fullprice_dollars ca_total_dollars
10 10 20 15
10 15 15 30

预期结果:

us_outlet_dollars us_fullprice_dollars us_total_dollars ca_outlet_dollars ca_fullprice_dollars ca_total_dollars
10 10 20 0 15 15
10 0 10 15 15 30

这是我的问题:在下面的代码中,我尝试声明前缀和后缀变量,并使用循环生成 case 语句。我能够让它正常工作的唯一方法是对后缀进行内联硬编码。有没有办法利用后缀变量来完全模板化这个任务?

{% set prefixes = ["us","ca"] %}
{% set suffixes = ["fullprice_dollars", "outlet_dollars", "total_dollars"] %}
{% for suffix in suffixes %}{% for prefix in prefixes %}
        CASE
          WHEN
            COALESCE({{ prefix }}fullprice_dollars, 0) + COALESCE({{ prefix }}outlet_dollars, 0) = COALESCE({{ prefix }}total_dollars, 0)
          THEN COALESCE({{ prefix }}total_dollars, 0)
          ELSE
            COALESCE({{ prefix }}fullprice_dollars, 0) + COALESCE({{ prefix }}outlet_dollars, 0)
        END AS {{ prefix }}total_dollars,
      {% endfor %}{% endfor %}
SQL JINJA2 DBT

评论


答: 暂无答案