Power BI 根据 What-If 参数对符合条件的记录实例进行计数

Power BI count instances of records that match criteria based on What-If parameter

我在尝试计算 Power BI table 中的行数时遇到问题,其中标准因假设参数而异。 table 大约有 1100 万行,但我将尝试举一个简单的例子来说明我正在尝试做的事情。请原谅 post 的长度,但实际上并没有太多。

来自 SQL 服务器的数据看起来像这样(为清楚起见进行了简化)

Item    Category    Price    AvgCatPrice    Variance
Dog     Pet         20.00    15.00          33.33
Cat     Pet         12.00    15.00          20.00
Goat    Pet         18.00    15.00          20.00
Maggot  Pet         05.00    15.00          66.67
Apple   Fruit       01.00    01.20          16.67
Orange  Fruit       01.20    01.20          00.00
Mango   Fruit       01.30    01.20          08.33

方差只是该类别的价格与平均值之间的绝对差异百分比,但这与问题无关

所以我将数据加载到 Power Bi 中,一切看起来都像上面那样。

然后我添加一个简单的计算列作为 Count =1

如果我将这些值放在 table 上,Category 作为行,Count 作为值,我得到

Category  Count
Fruit       3
Pet         4

这符合预期。

然后我添加了一个名为 VarPc 的假设参数,它是 0 到 100 之间的十进制数,增量为 5。我选择了自动为参数添加切片器的选项。

然后我像这样添加一个新列。

OverVarPc = IF(SOTestDat[Variance] > VarPc[VarPc Value],1,0)

如果我将这个添加到 table 我得到

Category  Count  OverVarPc
Fruit       3      2
Pet         4      4

..假设 VarPc 为零,这是正确的。

现在第一期如果我通过滑块或输入框调整参数,OverVarPc列不会重新计算

下一个方法我添加了第二个table,这次显示了所有细节(没有刻意聚合)。 然后,我向 VarPc table 添加了一个新度量,称为 SumIfGt 并以此作为定义

SumIFGt = IF((sum(SOTestDat[Variance]) - sum(VarPc[VarPc])) >0,1,0)

table 看起来像这样,滑块位于 0%

Item    Price   Variance    Count   OverVarPc   SumIFGt
Apple   1       16.67       1       1           1
Cat     12      20          1       1           1
Dog     20      33.33       1       1           1
Goat    18      20          1       1           1
Maggot  5       66.67       1       1           1
Mango   1.3     8.33        1       1           1
Orange  1.2     0           1       0           0

如果我将其设置为 25%,那么 table 现在看起来像这样。

Item    Price   Variance    Count   OverVarPc   SumIFGt
Apple   1       16.67       1       1           0
Cat     12      20          1       1           0
Dog     20      33.33       1       1           1
Goat    18      20          1       1           0
Maggot  5       66.67       1       1           1
Mango   1.3     8.33        1       1           0
Orange  1.2     0           1       0           0

两个结果都符合预期。

所以我觉得我可以走了.... 下一期 我将这个新度量放到我原来的聚合 table 上,但 table 现在显示了。

Category  Count  SumIfGt
Fruit       3     0
Pet         4     1

我有点理解它为什么这样做,它聚合了 VarianceSUM 和(对于水果)得到 75,然后聚合了每一行的 VarPc(3 行 x 25 ) = 75 然后返回 0,因为它不大于。

问题终于来了!如何简单的统计一下measure的结果。我想在最后table中看到的是类别,类别中的总项目数以及方差大于What-IF参数的项目数。

还有很多事情我想做,但我想如果我破解了这个,剩下的就很容易了。

感谢阅读到这里!

我认为您可能会发现长 运行 中的事情更容易,如果不是向 'SOTestDat' 添加计算列:Count = 1 而是向 [=26] 添加一个度量=]:

Count = COUNTROWS(SOTestData)

完成此操作后,如果将其添加为 measure,您的 OverVarPc 将正确评估,如下所示:

OverVarPc = CALCULATE([Count], FILTER(SOTestDat, SOTestDat[Variance] > VarPc[VarPc Value]))

这将在过滤 [Variance] 大于 [VarPc Value] 度量的当前值的行后计算 SOTestDat table 中的行。