尝试使用Power BI

时间:2018-11-14 17:52:12

标签: powerbi dax

我正在尝试计算通过数据集中包含的一系列点的趋势线的梯度。我已经研究过是否有内置函数可以执行此操作,而似乎没有,所以我是手动进行的。我不是DAX专家(也不可能是数学专家!)。

我已经在excel中创建了一个表来浏览一个简单的示例,所以我知道我的目标是:

enter image description here

在Power BI环境中,“月&年”列上有两个表。这些表的简要说明如下:

enter image description here

enter image description here

请注意,插图中的“订单”度量在Power BI代码中被称为“每天的特殊订单”。

第1步

创建平均月份数的度量:

Average of months =
    - AVERAGEX (
        SUMMARIZE (
            CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
            Query_GSR[Month&Year],
            "AvMonths", AVERAGE ( Query_GSR[MonthNumForSlope] )
        ),
        [AvMonths]
    )

我在表达式部分中使用AVERAGE,以便“ AvMonths”列中的2018年9月记录具有21,然后对于2018年10月,它表示22。我想我可以使用MIN或MAX,因为它们都会例如说21或22,具体取决于月份(避免使用一个就是SUM,因为这将把它们加起来)。

我还尝试通过汇总然后在User_Friendly_Months表中创建NATURALLEFTOUTERJOIN来获取这些月份的月数,并将其合并到此过程的其余部分中时,该度量将永久计算(即使它确实有效)最后以某种方式)。

第2步

对订单执行相同操作

Average of special orders =
- AVERAGEX (
    SUMMARIZE (
        CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
        Query_GSR[Month&Year],
        "Special OPD", [Special orders per day]
    ),
    [Special OPD]
)

第3步

执行原始图片中经过步骤“ C”的计算:

Column_C_Step =
SUMX (
    SUMMARIZE (
        CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
        Query_GSR[Month&Year],
        "Special OPD", [Special orders per day],
        "MonthNum", AVERAGE ( Query_GSR[MonthNumForSlope] )
    ),
    ( [Special OPD] + [Average special orders] )
        * ( [MonthNum] + [Average of MonthNums] )
)

该量度返回零,而不是在我的示例中返回-11.95。

当我这样做时:

Check_orders_worked =
SUMX (
    SUMMARIZE (
        CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
        Query_GSR[Month&Year],
        "Special OPD", [Special orders per day],
        "MonthNum", AVERAGE ( Query_GSR[MonthNumForSlope] )
    ),
    [Special OPD]
)

...我得到1188.9,这是我的Excel表格插图中“订单”的总数(因此必须有效)。

当我这样做时:

Check_months_worked =
SUMX (
    SUMMARIZE (
        CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
        Query_GSR[Month&Year],
        "Special OPD", [Special orders per day],
        "MonthNum", AVERAGE ( Query_GSR[MonthNumForSlope] )
    ),
    [MonthNum]
)

...我得到43,这是我的插图中Month_Num的总数(因此再次必须工作)。

但是,当我尝试对A和B执行等效的SUMPRODUCT以获得C时,它返回零。

任何人都可以阐明地球上正在发生的事情吗?

它使我发疯。

或者,如果有一种更简单的方法来进行梯度计算,我会欣喜若狂。

谢谢

更新

为完整起见,这是有效的措施:

Step_C_Measure =
VAR _OrdersAverage = [Average special orders]
VAR _MonthsAverage = [Average of MonthNums]
RETURN
    SUMX (
        SUMMARIZE (
            CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
            Query_GSR[Month&Year],
            "Special OPD", [Special orders per day],
            "MonthNum", AVERAGE ( Query_GSR[MonthNumForSlope] )
        ),
        ( [Special OPD] + _OrdersAverage )
            * ( [MonthNum] + _MonthsAverage )
    )

然后执行步骤D:

Step_D_Measure =
VAR _MonthsAverage = [Average of MonthNums]
RETURN
    SUMX (
        SUMMARIZE (
            CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
            Query_GSR[Month&Year],
            "Special OPD", [Special orders per day],
            "MonthNum", AVERAGE ( Query_GSR[MonthNumForSlope] )
        ),
        ( [MonthNum] + _MonthsAverage )
            * ( [MonthNum] + _MonthsAverage )
    )

最后得到渐变:

Special order gradient =
DIVIDE ( Step_C_Measure, Step_D_Measure, "" )

1 个答案:

答案 0 :(得分:0)

在有关multiple linear regression的问题中,我链接到一个涵盖基本线性回归的community post

在您的情况下,可以类似于以下公式计算斜率公式:

is.na()

这适用于多个月的回归,而不仅仅是两个月。