首页 > 解决方案 > 使用计算和如果未在 power bi 中正确显示总计的总和进行测量

问题描述

我要求power bi仅显示用户在slicer. 因此创建了以下措施..

  1. 用于捕获最小选定范围

    StartDate = CALCULATE(min('DATE'[DATE]),ALLSELECTED('DATE'[DATE]))

  2. 仅显示最短日期的金额。

    OP = if(SELECTEDVALUE('DATE'[DATE]) = [StartDate], CALCULATE(sum(MEASUREMENTS[OPENING_BASE_VAL]),DATESBETWEEN('DATE'[DATE],[StartDate],[StartDate])),0)

我得到了想要的输出,但是grand-total这个度量值变成了 0,如下图所示。非常感谢任何帮助。

在此处输入图像描述

标签: powerbidaxpowerbi-desktopmeasure

解决方案


您的总数为 0,因为您的第二个公式中的 SELECTEDVALUE('DATE'[DATE]) 返回空白,因此您的 IF 表达式读取为“IF BLANK = [开始日期]”,这始终是错误的。

SELECTEDVALUE 是以下代码的语法糖: IF HASONEVALUE(DATE'[DATE]) then return Date[Date] else return blank。由于总共有许多值(所有日期),因此您得到一个空白。

要解决此问题,您需要按日期迭代。

OP =
VAR StartDate = [StartDate]
RETURN
SUMX(
  VALUES(Date[Date]),
  IF(Date[Date] = StartDate, CALCULATE(SUM(MEASUREMENTS[OPENING_BASE_VAL])), 0))

在这里,我们首先将开始日期保存到一个变量中,以避免多次计算。然后我们使用 VALUES 函数创建一个日期列表,并使用 SUMX 逐个日期地迭代这个列表。如果当前迭代的日期是开始日期,则将值相加,否则将得到零。

如果您可以使用空白代替零,则可以使用更优化/更快的代码:

OP =
VAR StartDate = [StartDate]
RETURN
  CALCULATE(SUM(MEASUREMENTS[OPENING_BASE_VAL]), KEEPFILTERS(Date[Date] = StartDate) )

在这里,我们只计算日期等于开始日期的总和。由于没有迭代,也没有“IF”,所以代码要快得多。总数将相同,只有行项目将显示空白而不是零。


推荐阅读