我正在试图计算通过数据集中包含的一系列点的趋势线的梯度。我已经研究过了,看看是否有内置的函数来完成这个任务,而且似乎没有,所以我是手动完成的。我不是DAX专家(也可能不是数学专家!)
我在excel中创建了一个表格,以了解一个简单的示例,这样我就知道我的目标是什么:

在Power环境中,在“月份和年份”列上有两个表。以下是这些表格的简略说明:


请注意,图中的“订单”在Power代码中称为“每日特殊订单”。
步骤1
创建平均月份数的度量:
Average of months =
- AVERAGEX (
SUMMARIZE (
CALCULATETABLE ( Query_GSR, ALLSELECTED ( User_Friendly_Months ) ),
Query_GSR[Month&Year],
"AvMonths", AVERAGE ( Query_GSR[MonthNumForSlope] )
),
[AvMonths]
)我在表达部分使用平均值,这样2018年9月的记录在"AvMonths“栏中为21,然后在2018年10月-2018年为22。我想我可以使用MIN或MAX,因为他们都会说21或22,这取决于月份(只有一个要避免的是和,因为这将把他们全部加起来)。
我还试图这样做,方法是总结并创建一个NATURALLEFTOUTERJOIN到User_Friendly_Months表中,以获得这些月份的月份号,当将该值合并到此过程的其余部分时,该度量将花费很长时间来计算(即使它最终确实在某种程度上有效)。
步骤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]
)...I get 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]
)...I get 43,这是我的插图中Month_Num的总数(同样,肯定是工作的)。
但是,当我试图在A和B上执行相当于SUMPRODUCT的值以得到C时,它返回零。
有人能弄清楚到底是怎么回事吗?
快把我逼疯了。
或者,如果有更简单的方法来进行梯度计算,我会和joy一起哭。
谢谢
更新
为了完整起见,以下是行之有效的措施:
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, "" )发布于 2018-11-14 19:09:34
在关于多元线性回归的一个问题中,我链接到了一个基本线性回归的社区邮政。
在您的情况下,计算斜率的公式可以类似于以下内容:
Slope =
VAR RowCount = COUNTROWS(Query_GSR)
VAR Sum_X = SUMX(Query_GSR, Query_GSR[Month_Num])
VAR Sum_Y = SUMX(Query_GSR, Query_GSR[Orders])
VAR Sum_XY = SUMX(Query_GSR, Query_GSR[Month_Num] * Query_GSR[Orders])
VAR Sum_XX = SUMX(Query_GSR, Query_GSR[Month_Num] * Query_GSR[Month_Num])
RETURN DIVIDE(RowCount * Sum_XY - Sum_X * Sum_Y, RowCount * Sum_XX - Sum_X * Sum_X)这适用于多个月的回归,而不仅仅是两个月。
https://stackoverflow.com/questions/53306114
复制相似问题