我已经开始学习Power BI的一些基本用法,并且需要帮助来解决问题。
请参阅我的表格。
我想为每个ID计算最后一个条目与最后一个“状态1”的百分比的平均值。在我的数据库中,有些ID仅包含一次“状态1”状态(例如ID 4),我想排除这些ID。有可能吗?
对于此示例为:
(94 + 82 + 85) / 3 = 87
我首先尝试计算所有“状态1”的所有“百分比”的平均值。
Test Average 2 =
CALCULATE (
AVERAGEX(Tabelle1; Tabelle1[Percent]);
FILTER ( ALL ( Tabelle1 ); Tabelle1[Status]="Status 1" );
ALL (Tabelle1)
)
我该如何进行?我不知道如何创建这么多条件的代码。我曾尝试研究解决方案,但放弃了。希望您能对我有所帮助,并感谢编码初学者的帮助:)
预先感谢, 珍妮
答案 0 :(得分:0)
首先,欢迎来到Power BI系列!
第二,这是我如何解决您的问题...
1。创建“ DateTime”列
由于我们需要检查最新条目,并且大概您希望根据日期和时间进行检查,因此仅检查一列会更容易。
在功能区中,转到“建模”->“新列”。
在弹出的公式栏中,输入以下公式。 Power BI可以识别日期和时间列的含义,并且由于它们都是日期/时间的元素,因此Power BI使我们可以进行简单的加法。公式中的- 1
代表与时间相关的“天”。
DateTime = [Date] + [Time] - 1
2。创建平均度量
这是整个公式,其次是细分。
Last Percent Average =
VAR TargetStatus = "Status 1"
VAR IDsWithMoreThanOneStatus1 = FILTER('Data', COUNTROWS(FILTER('Data', IFERROR(SEARCH(TargetStatus, [Status]), -1) > 0 && [ID] = EARLIER([ID]))) > 1)
VAR LastStatus = FILTER(IDsWithMoreThanOneStatus1, IFERROR(SEARCH(TargetStatus, [Status]), -1) > 0 && [DateTime] >= MAXX(FILTER('Data', IFERROR(SEARCH(TargetStatus, [Status]), -1) > 0 && [ID] = EARLIER([ID])), [DateTime]))
RETURN
DIVIDE(SUMX(LastStatus, [Percent]), COUNTROWS(LastStatus), BLANK())
度量的第一部分是定义变量。变量非常有用,我鼓励您至少快速浏览一下它们。这里只是one article。
第一个变量只是指定目标状态(以防您要更改它)。该变量是可选的,就好像它永远不会改变一样,您可以将文本放入其他公式中。
VAR TargetStatus = "Status 1"
第二个变量将主数据列表筛选为仅具有多个“状态1”的ID(在这种情况下,ID = 4)。带有此变量的键之一是EARLIER
函数。尽管它被可怕地命名(我认为),但它非常有用。您可以阅读here上的官方文档。
逐步遍历变量:我们要过滤数据表...,其中行数大于一...当我们过滤表以包括指定ID的“状态1”时。
SEARCH
函数将查看整个字符串,并告诉我们搜索字符串(TargetStatus)的开始位置。我们需要将其包装在IFERROR
函数中,以处理TargetStatus未显示在[Status]值中的情况。然后,我们只是检查结果是否大于0,表明TargetStatus在[Status]值中。
VAR IDsWithMoreThanOneStatus1 =
FILTER(
'Data',
COUNTROWS(
FILTER(
'Data',
IFERROR(SEARCH(TargetStatus, [Status]), -1) > 0 &&
[ID] = EARLIER([ID])
)
) > 1
)
第三个变量从第二个变量中过滤列表,以捕获每个ID的最后一个“状态1”。这使用与第二个变量相同的思维过程:我们要过滤状态为“ Status 1”且[DateTime]大于或等于所有“ DateTime”最大值的表(来自第二个变量)状态1”用于指定的ID。
VAR LastStatus =
FILTER(
IDsWithMoreThanOneStatus1,
IFERROR(SEARCH(TargetStatus, [Status]), -1) > 0 &&
[DateTime] >= MAXX(
FILTER(
'Data',
IFERROR(SEARCH(TargetStatus, [Status]), -1) > 0 &&
[ID] = EARLIER([ID])
),
[DateTime]
)
)
RETURN
关键字只是在告诉Power BI我们已经完成了定义变量的工作,公式中的所有其他内容都定义了为此度量返回的实际值。
RETURN
最后是平均值本身。在这种情况下,我们将使用SUMX
对第三个变量的所有[Percent]求和,然后将其除以第三个变量的行数。我总是建议使用DIVIDE
函数,因为该函数可用于除以0和其他错误。
DIVIDE(
SUMX(
LastStatus,
[Percent]
),
COUNTROWS(LastStatus),
BLANK()
)
说完所有步骤后,您的测量将得到想要的结果。