Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 根据每个唯一用户的行动月数建立习惯分数_Powerbi_Dax - Fatal编程技术网

Powerbi 根据每个唯一用户的行动月数建立习惯分数

Powerbi 根据每个唯一用户的行动月数建立习惯分数,powerbi,dax,Powerbi,Dax,我正在尝试建立一个习惯分数,表示每个日历月有一个动作+1,每个日历月没有用户动作-1。棘手的部分是,我想在指定日期后开始为每个用户执行此操作(每个用户不同)。如果一个动作在同一个月内做了两次,我只希望它算作+1。下图将有助于说明逻辑和所需输出 我希望结果以计算列的形式出现在一个具有不同用户的单独表中(此表已经创建,我只需要添加习惯分数)。这可能不是最平滑的解决方案,但它似乎对您提供的测试数据有效 注意:我假设有一个日历维度表,在我的例子中称为“calendar” 首先将计算列添加到“活动”表中

我正在尝试建立一个习惯分数,表示每个日历月有一个动作+1,每个日历月没有用户动作-1。棘手的部分是,我想在指定日期后开始为每个用户执行此操作(每个用户不同)。如果一个动作在同一个月内做了两次,我只希望它算作+1。下图将有助于说明逻辑和所需输出


我希望结果以计算列的形式出现在一个具有不同用户的单独表中(此表已经创建,我只需要添加习惯分数)。

这可能不是最平滑的解决方案,但它似乎对您提供的测试数据有效

注意:我假设有一个日历维度表,在我的例子中称为“calendar”

首先将计算列添加到“活动”表中:

Year-Month = 
FORMAT([Activity_Date]; "YYYY-MM")
然后将所需的计算列添加到“用户”表中:

Habit = 

var minDate =
CALCULATE(
    MIN('Activity'[Activity_Date]);
    'Activity'[Indicator] <> BLANK()
)

var maxDate = 
CALCULATE(
    MAX('Activity'[Activity_Date])
)

var calendarActivity = DATEDIFF(minDate; maxDate; MONTH)

var sumAddOne = 
CALCULATE(
    DISTINCTCOUNT('Activity'[Year-Month]);
    'Calendar'[Date] >= minDate;
    'Calendar'[Date] <= maxDate
)-1

var sumSubtractOne = calendarActivity-sumAddOne

return
IF(
    minDate <> BLANK();
    sumAddOne-sumSubtractOne;
    BLANK()
)
习惯=
明特变种=
算计(
最小值(“活动”【活动日期】;
“活动”[指标]空白()
)
变量maxDate=
算计(
最大值('活动'[活动日期])
)
var calendarActivity=DATEDIFF(minDate;maxDate;MONTH)
var sumAddOne=
算计(
DISTINCTCOUNT(“活动”[年-月]);
“日历”[日期]>=minDate;

上面的“日历”[Date]有效,但我只能创建一次(我需要创建一些稍有不同的日历)。每当我尝试创建日历时,“处理日历”屏幕将永远打开,我最终使用了我们团队99%的ram(比如45千兆次)。我已将问题缩小到sumAddOne变量。您知道另一种解决问题的方法吗?还有,为什么您使用“日历”[Date]而不是“活动”[Activity\u Date]在sumAddOne变量中?对于你的第一个问题,我脑子里没有一个好的答案。我必须考虑一下。对于你的第二个问题,这是一个优化。我不过滤事实表,它在一个日历年中可以有百万行,而是过滤日历,它在一年中只有365行。当我找到日历中的X行数我对Vertipac感兴趣,Vertipac“知道”X行对应的事实表中的Y行数,因此它不必在事实表上首先确定要计数的行数。