Power BI线性回归

时间:2019-12-30 19:21:05

标签: powerbi linear-regression dax

我对PowerBI / Dax相当陌生,在创建线性回归时遇到了麻烦。包括的趋势线功能不足以适应我的用例,因为我需要预测未来的值并显示最佳拟合方程。我试图修改此博客https://xxlbi.com/blog/simple-linear-regression-in-dax/中提供的代码,但无法绘制度量。似乎已将所有值汇总在一起。

值得注意的是,在我的数据集中只有11个唯一的日期。但是大约容纳3万行,可以容纳所有可能的过滤器。我需要线性回归来响应那些可能的过滤器。 另外,我确实为模型应该用于计算的当前值和将来值创建了一个单独的Date表。

另一种尝试是,我从预设的“相关常数”度量中修改了默认代码,以计算斜率和y截距。

Slope = 
VAR __CORRELATION_TABLE = VALUES('Sheet1'[Date])
VAR __COUNT =
    COUNTX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]) * SUM('Sheet1'[Expenditure]))
    )
VAR __SUM_X =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]))
    )
VAR __SUM_Y =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(SUM('Sheet1'[Expenditure]))
    )
VAR __SUM_XY =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]) * SUM('Sheet1'[Expenditure]))
    )
VAR __SUM_X2 =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]) ^ 2)
    )
VAR __SUM_Y2 =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(SUM('Sheet1'[Expenditure]) ^ 2)
    )
RETURN
    DIVIDE(
        (__COUNT * __SUM_XY - __SUM_X * __SUM_Y),
        (__COUNT * __SUM_X2 - __SUM_X ^ 2)
    )
Y Intercept = 
VAR __CORRELATION_TABLE = VALUES('Sheet1'[Date])
VAR __COUNT =
    COUNTX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]) * SUM('Sheet1'[Expenditure]))
    )
VAR __SUM_X =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]))
    )
VAR __SUM_Y =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(SUM('Sheet1'[Expenditure]))
    )
VAR __SUM_XY =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]) * SUM('Sheet1'[Expenditure]))
    )
VAR __SUM_X2 =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(COUNTA('Sheet1'[Date]) ^ 2)
    )
VAR __SUM_Y2 =
    SUMX(
        KEEPFILTERS(__CORRELATION_TABLE),
        CALCULATE(SUM('Sheet1'[Expenditure]) ^ 2)
    )
RETURN
    ROUND(DIVIDE(
        (__SUM_Y * __SUM_X2 - __SUM_X * __SUM_XY),
        (__COUNT * __SUM_X2 - __SUM_X ^ 2)),0
    )

最初,我这样做是为了显示最佳拟合方程式,并且能够成功地“显示”常数并使它们对过滤器做出响应。但是,然后我尝试使用这些常量来创建线性回归的度量。

Linear Regression = 
SUMX (
    DISTINCT('Date'[Date]),
    [Y Intercept] + [Slope] * 'Date'[Date]
)

我没有收到任何错误,但是我也没有收到任何数据。该度量显示为空白。关于我在做什么错以及如何解决的任何见解?谢谢!

0 个答案:

没有答案