同比和环比

def get_electric_num_then(self, obj):
    data = self.context

    start_date = datetime.datetime.strptime(data['start_date'], '%Y-%m-%d')

    last_date = start_date - relativedelta(years=1)

    end_date = datetime.datetime.strptime(data['end_date'], '%Y-%m-%d')

    
     This_year = \
     ElectricNum.objects.values('num').filter(create_time__gte=start_date, create_time__lte=end_date).aggregate(
         Sum('num'))['num__sum']
    
    last_year = \
    ElectricNum.objects.values('num').filter(create_time__gte=last_date, create_time__lte=start_date).aggregate(
        Sum('num'))['num__sum']

   
     end_year_num = This_year if This_year else 0
 
     start_year_num = last_year if last_year else 0

     if end_year_num == 0:
         end_year_num=ElectricNum.objects.filter(create_time__lte=end_date).order_by('update_time')
         end_year_num=end_year_num.last().num

   
     return start_year_num,end_year_num

def get_electric_num_Chain(self,obj):
    data=self.context
    start_date = datetime.datetime.strptime(data['start_date'], '%Y-%m-%d')

    last_date_month = start_date - relativedelta(months=1)

    end_date = datetime.datetime.strptime(data['end_date'], '%Y-%m-%d')

    end_date_month= end_date - relativedelta(months=1)

    result_month = \
        ElectricNum.objects.values('num').filter(create_time__gte=end_date_month, create_time__lte=end_date).aggregate(
            Sum('num'))['num__sum']

    last_month = \
        ElectricNum.objects.values('num').filter(create_time__gte=last_date_month, create_time__lte=start_date).aggregate(
            Sum('num'))['num__sum']

    start_date_num=last_month if last_month else 0
    end_date_num=result_month if result_month else 0



    return start_date_num,end_date_num


class Meta:
    model = Device
    fields = ('electric_num_then','electric_num_Chain')
### 同比环比的区别及数据分析中的应用 同比环比是数据分析中用于衡量数据变化趋势的两种重要方法。两者的核心区别在于时间维度的选择以及对比基准的不同。 #### 1. 定义与计算方式 - **同比**:指的是当前周期的数据与上一年同期数据进行对比,通常用于观察年度间的变化趋势。例如,2023年3月的销售额与2022年3月的销售额进行比较[^3]。 - 计算公式: ```plaintext 同比增长率 = (本期数值 - 去年同期数值) / 去年同期数值 * 100% ``` - **环比**:指的是当前周期的数据与紧邻的上一个周期数据进行对比,强调的是短期变化趋势。例如,2023年3月的销售额与2023年2月的销售额进行比较[^3]。 - 计算公式: ```plaintext 环比增长率 = (本期数值 - 上期数值) / 上期数值 * 100% ``` #### 2. 时间颗粒度 - **同比**的时间颗粒度通常以“年”为单位,即固定按年为偏移标准进行对比,如“上年同期”。 - **环比**的时间颗粒度更加灵活,可以是年、季、月、周、日、星期或时段等,具体取决于分析需求[^3]。 #### 3. 数据分析中的应用场景 - **同比分析**:适用于长期趋势观察,能够有效消除季节性波动的影响,揭示数据在不同年份间的稳定变化趋势[^1]。 - **环比分析**:更关注短期波动,适合监测业务的即时表现或短期内的动态变化。例如,零售业常用环比分析来评估促销活动的效果。 #### 4. 可视化实现 在数据分析可视化领域,使用工具如 JavaScript Chart.js 可以将同比环比数据以图表形式呈现,直观展示数据变化趋势[^2]。以下是一个简单的代码示例,展示如何用 JavaScript Chart.js 绘制同比环比数据图表: ```javascript const ctx = document.getElementById('myChart').getContext('2d'); const myChart = new Chart(ctx, { type: 'bar', data: { labels: ['2022 Q1', '2022 Q2', '2022 Q3', '2022 Q4', '2023 Q1'], datasets: [{ label: '同比数据', data: [50, 60, 70, 80, 90], backgroundColor: 'rgba(255, 99, 132, 0.2)', borderColor: 'rgba(255, 99, 132, 1)', borderWidth: 1 }, { label: '环比数据', data: [55, 65, 75, 85, 95], backgroundColor: 'rgba(54, 162, 235, 0.2)', borderColor: 'rgba(54, 162, 235, 1)', borderWidth: 1 }] }, options: { scales: { y: { beginAtZero: true } } } }); ``` #### 5. SQL 实现 在数据库查询中,可以通过 SQL 实现同比环比指标的计算。例如,在 BigQuery 中配置本期、同期上期指标后,利用 SQL 公式计算增长率[^4]。 ```sql -- 计算同比增长率 WITH current_period AS ( SELECT SUM(sales) AS sales_current FROM transactions WHERE period = '2023-Q1' ), previous_period AS ( SELECT SUM(sales) AS sales_previous FROM transactions WHERE period = '2022-Q1' ) SELECT (sales_current - sales_previous) / sales_previous * 100 AS year_on_year_growth FROM current_period, previous_period; -- 计算环比增长率 WITH current_period AS ( SELECT SUM(sales) AS sales_current FROM transactions WHERE period = '2023-Q1' ), last_period AS ( SELECT SUM(sales) AS sales_last FROM transactions WHERE period = '2022-Q4' ) SELECT (sales_current - sales_last) / sales_last * 100 AS quarter_on_quarter_growth FROM current_period, last_period; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值