Power-BI 的新手。 我有一个项目,我需要根据 Start_date 和 exit_date 计算每月活跃客户的数量。 有些客户还没有退出日期,因为他们仍然处于活动状态/尚未退出。 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试计算通过数据集中包含的一系列点的趋势线的梯度。 我已经研究过是否有内置函数可以执行此操作,而似乎没有,所以我是手动进行的。 我不是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]
)
第三步
执行原始图片中经过步骤“ 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, "" )
在关于多元线性回归的问题中,我链接到一个涵盖基本线性回归的社区帖子 。
在您的情况下,可以类似以下方式计算斜率公式:
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)
这适用于多个月的回归,而不仅仅是两个月。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.