温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - SSAS DAX query.... how to show totals against attribute values that match calc conditions
dax ssas

其他 - SSAS DAX查询...。如何根据与计算条件匹配的属性值显示总计

发布于 2020-05-08 16:28:53

在我们的公司多维数据集中,我们经常使用CALCULATION函数进行度量。我们还会定期遇到这样一种情况:即使在“计算”中应用了过滤器,返回的总数在多个行中也会显示相同的值,而不是在满足条件的行中显示相同的值。

下面的屏幕截图是一个示例。

在此处输入图片说明

我们希望只在Attribute =“ Y”的行上显示总计

计算

=
CALCULATE (
    DISTINCTCOUNT ( 'Sales'[Transaction_Header_ID] ),
    'Sales'[Is_Named_Sale] = "Y",
    'Member'[Member_Has_Email_Flag] = "Y"
)

我对DAX相当陌生,仍然不了解在计算中使用过滤器时如何发生这种情况。我们追求的结果更像

Member_Has_Email_Flag Total

Y                     249239

N

如果有人可以解释这一点,将不胜感激。

干杯

查看更多

提问者
larsheavy
被浏览
15
RADO 2020-02-20 14:37

想想报表单元格中“ Member” [Member_Has_Email_Flag]为“ N”时会发生什么。

从该报告中,我们得到一个过滤器'Member'[Member_Has_Email_Flag] =“ N”。然后,在CALCULATE函数中,将“ Y” 覆盖此过滤器。因此,您的公式将忽略来自报表的过滤器,并将其替换为“ Y”,从而为您提供相同的数字,而与外部过滤器无关。这就是CALCULATE的工作方式-它通过将外部过滤器替换为函数内部提供的过滤器来修改外部过滤器。

要解决此问题,请使用KEEPFILTERS函数:

=
CALCULATE (
    DISTINCTCOUNT ( 'Sales'[Transaction_Header_ID] ),
    'Sales'[Is_Named_Sale] = "Y",
    KEEPFILTERS('Member'[Member_Has_Email_Flag] = "Y")
)

在这里,您告诉CALCULATE保留外部过滤器('N“)并将其与新过滤器(” Y“)结合使用,由于没有记录同时显示该字段为Y和N,因此该公式现在将返回空白。