计数和不同计数度量(或计算列)的dax代码

时间:2017-12-03 21:14:47

标签: powerbi dax

我希望有人可以帮我提供以下分析的一些提示。学生可以为某些课程(注册,加入,授予......)做一些操作,反之亦然 - 取消最新的操作。 第一个指标是计算两个日期之间系统中发生的所有操作 - 这些操作像过滤器/切片器一样暴露。 一些样本数据:

person-id,person-name,course-name,event,event-rank,startDT,stopDT
11, John, CS101, enrol,1,2000-01-01,2000-03-31
11, John, CS101, grant,2,2000-04-01,2000-04-30
11, John, CS101, cancel,3,2000-04-01,2000-04-30
11, John, PHIL, enrol, 1, 2000-02-01,2000-03-31
11, John, PHIL, grant, 2, 2000-04-01,2000-04-30

数据集(ds)在上面,我为计数指标添加了以下代码:

       evaluate 
 sumx(
   addcolumns( ds
        ,"z+", if([event] <> "cancel",1,0)
        ,"z-", if([event] = "cancel",-1,0)
        )
    ,[z+] + [z-])
  }

指标应显示:3个订阅(John-CS101 = 1,John-PHIL = 2)。

还有一些其他规则,但我不知道如何将它们添加到DAX代码,取消日期与上述操作(非取消)相同,取消操作的等级=非取消行动+ 1.

此外,还需要为不同的学生和课程添加复合键。请问如何将其添加到代码中? (通过总结,排名x)

此致 Q

1 个答案:

答案 0 :(得分:0)

这在技术上并不是一个答案,而是更多的建议。

听起来你的挑战是你有可能被取消的行动。有一个特定的逻辑可以确定某个操作是否被取消(即取消必须是下一行并且日期必须匹配)。

我建议,不能回答您的具体问题,是调整数据模型而不是将取消逻辑放在DAX中。

例如,如果您可以向数据模型添加一个列,该列标记随后取消的行,那么所有DAX必须检查该标志以确定是否取消了某个操作。一个CALCULATE语句。您不必拥有大量逻辑来确定事件是否已取消。您完全不需要SUMX,因为它可以逐行工作,因此在处理大量行时可能会很慢。

是否取消操作的逻辑移动到源系统(例如SQL或甚至是Excel中的计算列),或移动到您的ETL(例如Power BI中的查询编辑器),它们更适合执行此类任务。逻辑应用一次,然后存在于数据模型中以用于所有度量,而不是每次使用度量时都需要应用逻辑。

我知道这并不能帮助你解决你的逻辑问题,但我提出这个建议的原因是DAX基本上是一个巨大的计算器。它增加了一些东西。它在过滤器方面很出色(添加一些内容而不是其他内容),但是当所有内容都缩减为可以求和或计数的列时,它效果最佳。一旦你超越了它(例如想要查看下面的行以调整当前行的某些内容),DAX将变得非常复杂(和慢),而源系统或查询编辑器可能会处理这样的要求更容易。