使用计算和IF进行总和测量,如果在bi中未正确显示总和,

问题描述 投票:0回答:1

我在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,如下图所示。任何帮助,不胜感激。

enter image description here

powerbi dax powerbi-desktop measure
1个回答
0
投票

您总共得到0,因为第二个公式中的SELECTEDVALUE('DATE'[DATE])返回空白,因此您的IF表达式显示为“ IF BLANK = [开始日期]”,始终为false。

SELECTEDVALUE是以下代码的语法糖:如果HASONEVALUE(DATE’[DATE])然后返回Date [Date],否则返回空白。由于总计中有很多值(所有日期),因此您将获得空白。

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

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”,因此代码要快得多。总数将相同,仅订单项将显示空白而不是零。

© www.soinside.com 2019 - 2024. All rights reserved.