【问题标题】:DAX calculate values for each subgroup without applied values filtersDAX 计算没有应用值过滤器的每个子组的值
【发布时间】:2018-10-09 21:30:03
【问题描述】:

我有一个带有 2 个切片器的数据透视表来管理人口(早上/下午;访问类型),3 个子组,ID 和名称作为行,3 个计算度量作为列:
1.基本计数公式:
=COUNTROWS(Visit)
2. 长中位数公式:

=(MINX (FILTER (VALUES (Visit[Colum1]),  
  CALCULATE (COUNT (Visit[Colum1]), Visit[Colum1]   
<= EARLIER (Visit[Colum1])) > COUNT ( Visit[Colum1]) / 2), Visit[Colum1]...

3。查找/求和公式:
=IF(CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)) < 30, BLANK(), CALCULATE(SUM(PE_new[NumeratorNBR2]), RELATEDTABLE(Visit)) / CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)))

我试图找到解决方案的问题是仅显示 C 列中值等于或大于 10 的行(度量 1(总和))。 我可以对 ID 或 Names 列使用“值过滤器”来做到这一点,但在这种情况下,小计也会发生变化(减少记录数),但我需要显示每个组作为一个整体的小计,而不仅仅是那些行的计算超过 10 个值。

有没有办法编写/更改小计的 DAX 公式,它将计算整个组的值,而不考虑“值过滤器”? 或者也许还有其他选项可以仅显示值等于或大于 10 的行,但以小计的形式计算整个组的值?

将不胜感激!

这是原始表格:

这是我现在得到的(小计基于当前/过滤的数据透视记录:C 列中等于或大于 10 的值(度量 1(总和))):

寻找这个结果(每个组作为一个整体显示小计):

带有“值过滤器”过滤器的屏幕截图:

【问题讨论】:

    标签: excel dax powerpivot


    【解决方案1】:

    您可以使用HASONEVALUEISFILTERED 等函数将度量设置为不同的计算方式,具体取决于它是否是小计。因此,如果您使用“值过滤器”来限制您看到的行,您仍然可以通过使用适当的过滤器上下文来获得包括所有行的小计。

    例如,对于基本计数,您可以编写类似这样的内容

    CountMeasure = 
    IF(HASONEVALUE(Visit[ID]),
        COUNT(Visit[Column1]),
        CALCULATE(COUNT(Visit[Column1]), ALLEXCEPT(Visit, Visit[Group]))
    )
    

    ALLEXCEPT 函数会删除除您指定的列之外的所有筛选上下文。同样的模式也应该适用于其他措施:

    SubtotalMeasure = 
    IF(HASONEVALUE(Visit[ID]),
        [Measure],
        CALCULATE([Measure], ALLEXCEPT(Visit, Visit[Group]))
    )
    

    编辑:为了响应您的 cmets,从值过滤中获得单独的切片器选择有点棘手,因为 DAX 度量对它们的处理方式类似。但是,如果他们在不同的列上进行切片/过滤,那么应该是可能的。

    例如,如果您在ID 上有一个切片器,那么您可以将该列作为另一个参数传递给您的ALLEXCEPT 函数:ALLEXCEPT(Visit, Visit[Group], Visit[ID])。这将阻止它删除ID 上的切片器过滤。

    在保留切片器选择的同时删除过滤器上下文的标准方法是使用ALLSELECTED。但是,这也会保留过滤值。

    您可能能够使用这些类型的组合来获得您想要的特定过滤器上下文。例如,

    SubtotalMeasure =
    VAR CurrentGroup = MAX(Visit[Group])
    RETURN
    IF(HASONEVALUE(Visit[ID]),
        [Measure],
        CALCULATE([Measure],
            ALLSELECTED(Visit),
            ALL(Visit[Name]),
            Visit[Group] = CurrentGroup
        )
    )
    

    将以AND 的方式组合所有这些参数。 ALLSELECTED(Visit) 将保留所有切片器和值过滤(但不包括数据透视表上下文),ALL(Visit[Name]) 将删除 Name 列上的值过滤(以及该列上的任何切片器选择),以及 @987654336 @ 会将Group 列的过滤上下文设置为仅由上面的变量定义的当前表中当前行的Group 值。

    我不能保证这种特定组合适用于您的特定设置,因为我不知道您拥有的所有列和切片器等,但它应该让您了解可以尝试哪些类型的东西.

    【讨论】:

    • 谢谢@Alexis Olson。它奏效了,我设法从小计中删除了所有过滤器,但现在我所有的切片器选择都不起作用,无论我是否使用切片器,我总是得到每个组的总人口数。有没有办法只删除一个“值过滤器”过滤器(大于或等于..)并让所有切片器的选择负责?我在帖子中附上了我正在使用的“值过滤器”过滤器的屏幕截图。
    • 谢谢@Alexis Olson。它奏效了,我设法从小计中删除了所有过滤器,但现在我所有的切片器选择都不起作用,无论我是否使用切片器,我总是得到每个组的总人口数。有没有办法只删除一个“值过滤器”过滤器(大于或等于..)并让所有切片器的选择负责?这个想法是不显示少于 30 个计数的 ID(将它们计入小计),而是根据切片器的选择更改小计(以获得不同的总体)。我附上了我正在使用的“值过滤器”过滤器的屏幕截图。
    • 太好了,非常感谢@Alexis Olson!我通过在 ALLEXCEPT 函数中添加列来使用您的第一个建议,效果很好!唯一我不知道如何使用你的最后一个公式和 VAR 来创建一个度量。我总是收到此错误:“计算的字段公式必须以等号开头”或“'CurrentGroup' 的语法不正确”...
    • 您必须拥有不允许变量的旧版本。
    猜你喜欢
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多