[PowerBI]用DAX完成简单线性回归

2023-11-04 10:10

本文主要是介绍[PowerBI]用DAX完成简单线性回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

12月追加:欢迎加入知乎【微软BI技术圈】,一起讨论、分享包括PowerBI在内的一切BI话题!

在这里插入图片描述
简单线性回归的方法:
只需要一个度量值就可以完成简单线性回归:

要让下面代码适用于你的模型,只需要把对应的字段/度量值
替换为你自己模型的字段/度量值:
Simple linear regression =
VAR Known =FILTER (SELECTCOLUMNS (ALLSELECTED ( Table[Column] ), #这里替换成包含你需要的类别值的字段引用"Known[X]", [Measure X], #这里替换成你的线性模型自变量"Known[Y]", [Measure Y], #这里替换成你的线性模型因变量),AND (NOT ( ISBLANK ( Known[X] ) ),NOT ( ISBLANK ( Known[Y] ) )))
VAR Count_Items =COUNTROWS ( Known )
VAR Sum_X =SUMX ( Known, Known[X] )
VAR Sum_X2 =SUMX ( Known, Known[X] ^ 2 )
VAR Sum_Y =SUMX ( Known, Known[Y] )
VAR Sum_XY =SUMX ( Known, Known[X] * Known[Y] )
VAR Average_X =AVERAGEX ( Known, Known[X] )
VAR Average_Y =AVERAGEX ( Known, Known[Y] )
VAR Slope =DIVIDE (Count_Items * Sum_XY - Sum_X * Sum_Y,Count_Items * Sum_X2 - Sum_X ^ 2)
VAR Intercept =Average_Y - Slope * Average_X
RETURNIntercept + Slope * [Measure X]

另一种线性回归方法:
(注:实际上这一种方法和前法相同,只不过此方法是针对于时间序列的)

Simple linear regression =
VAR Known =FILTER (SELECTCOLUMNS (ALLSELECTED ( 'Date'[Date] ), "Known[X]", 'Date'[Date],"Known[Y]", [Measure Y]),AND (NOT ( ISBLANK ( Known[X] ) ),NOT ( ISBLANK ( Known[Y] ) )))
VAR Count_Items =COUNTROWS ( Known )
VAR Sum_X =SUMX ( Known, Known[X] )
VAR Sum_X2 =SUMX ( Known, Known[X] ^ 2 )
VAR Sum_Y =SUMX ( Known, Known[Y] )
VAR Sum_XY =SUMX ( Known, Known[X] * Known[Y] )
VAR Average_X =AVERAGEX ( Known, Known[X] )
VAR Average_Y =AVERAGEX ( Known, Known[Y] )
VAR Slope =DIVIDE (Count_Items * Sum_XY - Sum_X * Sum_Y,Count_Items * Sum_X2 - Sum_X ^ 2)
VAR Intercept =Average_Y - Slope * Average_X
RETURNSUMX (DISTINCT ( 'Date'[Date] ),Intercept + Slope * 'Date'[Date])

需要注意的是,要在总计级别上显示正确的金额,还需要修改RETURN表达式。在体现销售数据的情况下,使用SUMX是合适的;但如果您处理的是类似温度的数据,使用Averagex()也许更加合适。
然后你可以完成下面的图表:
在这里插入图片描述
红线看起来很像趋势线,不是吗?事实上,如果在图表中添加趋势线,它将与红线完全相同:
在这里插入图片描述
至于为何要计算趋势线,有以下两种考量:

1.使用内置趋势线,只能从Y轴推断其值,而计算出的趋势线允许您显式地查看值。
2.Power BI只允许为数字或日期时间轴添加趋势线(截至2017年9月)。一旦使用字符串(例如月份名称),就失去了添加趋势线的能力。通过简单的线性回归,你可以自己计算它们,只要你有连续的数值作为已知的x值

(注:本文原本做为原创文,但Daniil早在2017年即发表了该主题的博客,并且代码更加简洁易用,因此弃用了自己的代码。此外他还写了很多其他有趣的博客,有很多PowerBI实用的技巧,可以点击这里查看他的博文。)

这篇关于[PowerBI]用DAX完成简单线性回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345046

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo