我正在尝试计算通过数据集中包含的一系列点的趋势线的梯度。我已经研究过是否有内置函数可以执行此操作,而似乎没有,所以我是手动进行的。我不是DAX专家(也不可能是数学专家!)。
我已经在excel中创建了一个表来浏览一个简单的示例,所以我知道我的目标是:
在Power BI环境中,“月&年”列上有两个表。这些表的简要说明如下:
请注意,插图中的“订单”度量在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, "" )
答案 0 :(得分:0)
在有关multiple linear regression的问题中,我链接到一个涵盖基本线性回归的community post。
在您的情况下,可以类似于以下公式计算斜率公式:
is.na()
这适用于多个月的回归,而不仅仅是两个月。