按当前状态计算订单(用户、设备或员工)

Count orders (users, devices or employees) by current status

提问人:mark fitzpatrick 提问时间:8/1/2023 最后编辑:mark fitzpatrick 更新时间:8/2/2023 访问量:56

问:

我有一个问题,几个星期以来一直困扰着我。我发现了非常相似的问题和相关的解决方案,但没有一个能真正给我必要的洞察力来实现我的目标,所以我正在联系 SO。

这篇文章接近于抓住这个问题,但我需要这个问题的变体。

使用原始 OP 的表,我有一个订单表(库存):

编号 时间戳 地位
1 20/08/2018 一个
1 21/08/2018 B
1 24/08/2018 C
2 19/08/2018 一个
2 20/08/2018 B
2 22/08/2018 C
2 24/08/2018 D
3 18/08/2018 一个
3 21/08/2018 B
4 15/08/2018 一个
4 17/08/2018 B
4 24/08/2018 D

我需要显示每天每个状态中的项目数。输出如下所示:

日期 一个 B C D
15/08/2018 1 - - -
16/08/2018 1 - - -
17/08/2018 - 1 - -
18/08/2018 1 1 - -
19/08/2018 2 1 - -
20/08/2018 2 2 - -
21/08/2018 - 4 - -
22/08/2018 - 3 1 -
23/08/2018 - 3 1 -
24/08/2018 - 1 1 2

亚历克西斯·奥尔森(Alexis Olsen)提供的解决方案仅用于计算状态B中的项目。

CountB = 
VAR CurrDay = MAX(Inventory[TimeStamp])
VAR Summary = SUMMARIZE(
                  FILTER(
                      ALL(Inventory),
                      Inventory[TimeStamp] <= CurrDay
                  ),
                  Inventory[ID],
                  "LastTimeStamp",
                  MAX(Inventory[TimeStamp])
              )
VAR LookupStatus = ADDCOLUMNS(
                       Summary,
                       "Status",
                       LOOKUPVALUE(Inventory[Status],
                           Inventory[ID], Inventory[ID],
                           Inventory[TimeStamp], [LastTimeStamp]
                       )
                   )
RETURN SUMX(LookupStatus, IF([Status] = "B", 1, 0))

但是,我需要一个可以计算任何可能状态的项目的度量。当然,我可以为每个可能的状态创建单独的度量值,但这永远行不通。

就我而言,我不是试图通过库存状态来跟踪项目:我试图按应用程序版本号按天跟踪用户。因此,当我们看到状态 A、B、C 和 D 时,我会有版本 2.1.1、2.1.2、...2.3.0 无限期,并不断添加新的版本号。我需要知道有多少用户使用最新版本,有多少人仍在使用旧版本。每次用户使用应用时,日志都会记录他们拥有的版本。因此,我的真实表将称为 Log,它将具有 User_ID、Date、App_Version,而不是 ID、TimeStamp 和 Status。

我可以创建一个固定的版本号列表,但显然,我不能为每个版本号创建一个度量值。有什么想法吗?


改用 Power Query 的附录。

我编写了一个 PQ 脚本,将数据转换为如下所示的表:

1 2 3 4
15/08/2018 一个
16/08/2018 一个
17/08/2018 B
18/08/2018 一个 B
19/08/2018 一个 一个 B
20/08/2018 一个 B 一个 B
21/08/2018 B B B B
22/08/2018 B C B B
23/08/2018 B C B B
24/08/2018 C D B D

现在。显然,对于 10 年内的 3k 用户来说,这可能是个问题,所以我想知道 DAX 是否会提供其他东西(当有人向我指出它时,我不会看起来像一个彻头彻尾的小丑)。

PowerBI DAX 数据操作 PowerBI-Desktop

评论

0赞 Niels Lucas 8/1/2023
复制它,但将值更改为 A,其他状态相同?还是我现在想得太简单了?
0赞 mark fitzpatrick 8/1/2023
谢谢,但不,这才是重点。我当然可以对每个状态进行衡量,但这并不能很好地扩展,并且随着软件发布版本的数量每年攀升到数十个,这将是地狱般的。可以完全抛弃亚历克西斯的解决方案并使用不同的东西。我尝试了几种这样的方法,但都失败了。亚历克西斯的方法说明了简化问题形成的有效解决方案。
1赞 Niels Lucas 8/1/2023
啊,现在我明白了。

答:

1赞 TM01 8/1/2023 #1

尝试透视Power Query中的状态列

评论

0赞 mark fitzpatrick 8/1/2023
谢谢。我尝试过 ETL 解决方案,但数据规模相当大。数百天内数以千计的用户。这张桌子很快就达到了组合爆炸。
1赞 Davide Bacci 8/2/2023 #2

如果需要将其作为基表,通常会在 Power Query 中创建它。在 DAX 中,您绝对不会这样做。但是,如果您只需要根据预期结果进行分析,那么以下操作就可以了。

桌子:

enter image description here

创建度量值:

Measure = COUNTROWS('Table')

将字段添加到矩阵中,如下所示:

enter image description here

最终结果:

enter image description here

评论

0赞 mark fitzpatrick 8/2/2023
嗨,@DavideBacci。谢谢你。我想知道是否是这样 - 将其放入 DAX 会产生与 ETL 相同的组合爆炸。我将添加一个关于在 PQ 中执行此操作的符号。我会试一试你的方法。
0赞 mark fitzpatrick 8/6/2023
不是真的 - 但我现在已经接近了。我一直在使用 Radacad 的一种方法,它允许我计算每个用户的状态,而不必在 PQ 中煮沸海洋。它也有一些有用的副产品,例如促进 sankey 的从到转换表以及其他可以用作 KPI 的度量(例如,新版本发布后的平均升级时间)。