Power BI 报表生成器指标公式

Power BI Report Builder Indicator Formula

我正在向 PBI Report Builder 报告中添加一个指标。该指标基于数据集中的多个字段,因此我需要使用一个公式来创建三个 up/down/side 箭头。 以前在 Crystal 报告中,这可以使用一系列 IF 语句来实现,如下所示。下面的例子是向下箭头所需要的。 (另外2个箭头也有多次计算)

        IF (({spScorecard_SLView;1.CATEGORY_ID} = 4) OR 
       ({spScorecard_SLView;1.CATEGORY_ID} = 25)) THEN 
        IF ({spScorecard_SLView;1.PM_3MM_NC_CNT}-{spScorecard_SLView;1.3MM_NC_CNT}) < 
        0 THEN 'Down Arrow'

        ELSE IF (({spScorecard_SLView;1.CATEGORY_ID} = 21) 
        OR({spScorecard_SLView;1.CATEGORY_ID} = 26) OR 
        ({spScorecard_SLView;1.CATEGORY_ID} = 41)) THEN
        IF ({spScorecard_SLView;1.CM_TOTAL_CNT}> 0) AND 
        (({spScorecard_SLView;1.PM_3MM_TOTAL_CNT} = 0) OR 
        ({spScorecard_SLView;1.3MM_TOTAL_CNT} = 0)) AND 
        ({spScorecard_SLView;1.3MM_NC_CNT} > 0) AND 
        (((({spScorecard_SLView;1.3MM_TOTAL_CNT} - {spScorecard_SLView;1.3MM_NC_CNT}) 
        / {spScorecard_SLView;1.3MM_TOTAL_CNT}) * 100) >= 0.00) THEN 'Down Arrow' //

        ELSE IF ((((({spScorecard_SLView;1.3MM_TOTAL_CNT} - 
        {spScorecard_SLView;1.3MM_NC_CNT}) / {spScorecard_SLView;1.3MM_TOTAL_CNT}) * 
        100) -((({spScorecard_SLView;1.PM_3MM_TOTAL_CNT} - 
        {spScorecard_SLView;1.PM_3MM_NC_CNT}) / 
        {spScorecard_SLView;1.PM_3MM_TOTAL_CNT}) * 100))/100) < 0.00 THEN 
        'Down Arrow'

我不知道如何在 PBI 报告生成器中做类似的事情。我是否应该在值和状态下的值字段中创建一个公式,然后删除指标状态下的任何箭头设置? 您可以在 IIf 语句中使用 'Down Arrow' 等创建公式吗?我只能在Value下选择1个字段时返回指标数据,但我需要多个字段和条件。

SSRS 报告类似于 PBI 报告生成器,因此如果有任何使用它的示例可能会有所帮助。我正在连接到 SQL 服务器存储过程以提取数据。

谢谢 鼓风机

我会这样处理...

在指标值中设置一个公式,以便您 return 一个与您要显示的箭头相对应的数字(例如 return 1、2 或 3)

你可以使用任何你觉得舒服的格式,但我建议使用 SWITCH() 函数而不是嵌套的 IIFs.

例如,这检查两个字段和 returns 三个值之一,(这只是一个随机示例来说明这一点)

=SWITCH(
SUM(Fields!Amount.Value) >5000 AND Fields!Year.Value >2019, 1
, SUM(Fields!Amount.Value) >10000 AND Fields!Year.Value <2019, 2
, True, 3
)

Switch 采用成对的表达式和 return 值。它 return 是它遇到第一个计算结果为 True 的表达式时的值。所以这是...

  • 如果汇总 Amount 大于 5000 且 Year >2019 则 return 1
  • 如果聚合 Amount 大于 10000 且 Year <2019 然后 return 12
  • 其他 return 3

最后的 'True',因为它总是 return true 就像 ELSE

无论如何,这将 return 值 1、2 或 3

然后在 Indicator Properties 中,像这样将每个指标的范围设置为 1、2 或 3

我最后用IIF Logic来解决这个问题,最后有些计算太笨拙了,我用IIF更容易。 使用 1,2,3 指标值效果很好。

这是我最终使用的表达式:

  =IIF(Fields!CATEGORY_ID.Value = 4 AND Sum(Fields!PM_3MM_NC_CNT.Value - 
  Fields!Q3MM_NC_CNT.Value) < 0,1,
  IIF(Fields!CATEGORY_ID.Value = 25 AND Sum(Fields!PM_3MM_NC_CNT.Value - 
  Fields!Q3MM_NC_CNT.Value) < 0,1,
  IIF(Fields!CATEGORY_ID.Value = 4  AND Fields!PM_3MM_NC_CNT.Value <> 0 
  AND Fields!Q3MM_NC_CNT.Value <> 0 AND Fields!PM_3MM_NC_CNT.Value = 
  Fields!Q3MM_NC_CNT.Value ,2,
  IIF(Fields!CATEGORY_ID.Value = 25 AND Fields!PM_3MM_NC_CNT.Value <> 0 
  AND Fields!Q3MM_NC_CNT.Value <> 0 AND Fields!PM_3MM_NC_CNT.Value = 
  Fields!Q3MM_NC_CNT.Value ,2,
  IIF(Fields!CATEGORY_ID.Value = 4 AND Sum(Fields!PM_3MM_NC_CNT.Value - 
  Fields!Q3MM_NC_CNT.Value) > 0, 3,
  IIF(Fields!CATEGORY_ID.Value = 25 AND Sum(Fields!PM_3MM_NC_CNT.Value - 
  Fields!Q3MM_NC_CNT.Value) > 0, 3,
  IIF(Fields!CATEGORY_ID.Value = 4 AND Fields!PM_3MM_NC_CNT.Value = 0 AND 
  Fields!Q3MM_NC_CNT.Value = 0,4,
  IIF(Fields!CATEGORY_ID.Value = 25 AND Fields!PM_3MM_NC_CNT.Value = 0 
  AND Fields!Q3MM_NC_CNT.Value = 0,4,
  IIF(Fields!CATEGORY_ID.Value = 21 AND Fields!CM_TOTAL_CNT.Value > 0 AND 
  Fields!PM_3MM_TOTAL_CNT.Value =0,1, 
  IIF(Fields!CATEGORY_ID.Value = 26 AND Fields!CM_TOTAL_CNT.Value > 0 AND 
  Fields!PM_3MM_TOTAL_CNT.Value =0,1, 
  IIF(Fields!CATEGORY_ID.Value = 41 AND Fields!CM_TOTAL_CNT.Value > 0 AND 
  Fields!PM_3MM_TOTAL_CNT.Value =0,1, 
  IIF(Fields!CATEGORY_ID.Value = 21 AND Fields!Q3MM_TOTAL_CNT.Value = 0 
  AND Fields!Q3MM_NC_CNT.Value > 0 AND Fields!TrendCalculation1.Value - 
  Fields!TrendCalculation2.Value > 0.00,1, 
  IIF(Fields!CATEGORY_ID.Value = 26 AND Fields!Q3MM_TOTAL_CNT.Value = 0 
  AND Fields!Q3MM_NC_CNT.Value > 0 AND Fields!TrendCalculation1.Value - 
  Fields!TrendCalculation2.Value > 0.00,1, 
  IIF(Fields!CATEGORY_ID.Value = 41 AND Fields!Q3MM_TOTAL_CNT.Value = 0 
  AND Fields!Q3MM_NC_CNT.Value > 0 AND Fields!TrendCalculation1.Value - 
  Fields!TrendCalculation2.Value > 0.00,1, 
  IIF(Fields!CATEGORY_ID.Value <> 12 AND Fields!CATEGORY_ID.Value <> 30 
  AND Fields!PM_3MM_TOTAL_CNT.Value = 0,3,
  IIF(Fields!CATEGORY_ID.Value <> 12 AND Fields!CATEGORY_ID.Value <> 30 
  AND Fields!Q3MM_TOTAL_CNT.Value = 0,3,
  IIF(Fields!CATEGORY_ID.Value <> 12 AND Fields!CATEGORY_ID.Value <> 30 
  AND Fields!TrendCalculation1.Value - Fields!TrendCalculation2.Value < 
  0.00,1,
  IIF(Fields!CATEGORY_ID.Value <> 12 AND Fields!CATEGORY_ID.Value <> 30 
  AND Fields!TrendCalculation1.Value - Fields!TrendCalculation2.Value > 
  0.00,3,
  IIF(Fields!CATEGORY_ID.Value <> 12 AND Fields!CATEGORY_ID.Value <> 30 
  AND Fields!TrendCalculation1.Value - Fields!TrendCalculation2.Value = 
  0.00,2,
  5)))))))))))))))))))