在叶级评估Dax表达式然后总结结果

时间:2018-01-10 22:32:22

标签: sql sql-server dax ssas-tabular

我试图基本上模仿在子查询中执行T-SQL计算的行为,并在DAX中的外部查询中总结该计算的结果。

在叶级别,我有以下简单的计算:

ROUND((SUMX('Profile Category Views',  'Profile Category Views'[Visit]) * 1.52 ) , 0)

每行'Profile Category Views'[Visit] = 1

此计算在叶级别上是正确的,但是当我汇总总和的结果时,计算将在运行时应用,在更高的级别上,使结果倾斜。

Example

如上图所示 - 计算已应用于细节行。但是,总计= 43,表示在对细节行的原始总和求和之后再次应用计算,而不是在应用初始计算后所有细节行的总和,即= 44。

2 个答案:

答案 0 :(得分:0)

如果你想总计四舍五入的总数,但仍然是总计的总和,比如

(SUMX('Profile Category Views',  ROUND('Profile Category Views'[Visit] * 1.52,0) ))

,即在最低级别详细说明。

答案 1 :(得分:0)

它有点难看,但这可能适合你:

= SUMX(VALUES('Profile Category Views'[Geography]),
       ROUND(
           SUMX(
               FILTER('Profile Category Views',
                   'Profile Category Views'[Geography] = EARLIER('Profile Category Views'[Geography])),
               'Profile Category Views'[Visit] * 1.52)
          ,0))

对于每个[Geography]值,我们采用小计并将其舍入。 (FILTER是为了确保内部SUMX一次增加一个[Geography]值。EARLIER将从外部SUMX返回过滤器上下文,即当前的[Geography]值。)