Power Bi - 相交函数返回数量

问题描述 投票:0回答:1

考虑下面的原始数据

opptyID 账户ID 产品 关闭 开始 结束 数量
12 1 A 23 年 1 月 1 日 23 年 1 月 1 日 23 年 2 月 1 日 10.00
13 1 A 23 年 2 月 1 日 23 年 2 月 1 日 23 年 9 月 10 日 2.00
17 2 A 23 年 2 月 1 日 23 年 2 月 1 日 23 年 9 月 10 日 100.00
14 1 A 23 年 1 月 1 日 23 年 2 月 1 日 23 年 5 月 1 日 4.00
15 1 A 12 月 22 日 12 月 22 日 23 年 3 月 1 日 40.00
16 1 A 23 年 3 月 1 日 23 年 3 月 1 日 23 年 8 月 1 日 39.00

我想知道续订数量是多少。

  • 续订机会 – 当许可证到期时。例如,第二季度(2 月至 4 月)续订机会为 50 Lic
  • 续订 – 根据此选项,每个帐户将启动多少个许可证。例如,对于 Q2,有 45 个正在续订(opptyID 17 不计算在内,因为其帐户 ID 为 2,而帐户 ID 1 在 Q2 中即将到期)

探索了几种方法后,我正在考虑实现这个逻辑

  1. 到期表:创建一个按给定季度到期的许可证的帐户 ID 进行汇总的表
  2. 起始表:创建一个按指定季度开始的 lic 账户 ID 汇总的表
  3. 找到两者之间的交集
    • 如果ID存在,则表示正在过期并续订->续订数量来自起始表
    • 如果ID仅出现在到期表中,则表示没有续订
    • 如果 ID 仅出现在起始表中,则意味着没有续订机会 – 我们卖出了更多,仅此而已。

为了实现上述内容,我尝试了以下两种方法

方式1:将到期和开始表分配给变量,每个表包含帐户和数量(按帐户汇总)
问题 – 我在引用变量中的 ID 时无法使用 intersect 函数。 (我只需要使用 ID 列,否则相交也会匹配数量列)

方法 2:仅使用帐户 ID 创建到期和启动表,因此相交很容易编码。
问题 – 如何从起始表中返回常见 ID 的数量?

这是代码

Renewal via Tables = 
//to find the IDs with lic expiring in period
VAR lic_expire =
    CALCULATETABLE (
        FILTER (
            ALL ( Sheet1 ),
            Sheet1[Start] <= MAX ( fiscaldate[Date] )
                && Sheet1[End] >= MIN ( fiscaldate[Date] )
                && Sheet1[End] <= MAX ( fiscaldate[Date] )
        ),
        Sheet1[Account ID]
    )
//to find the IDs with lic starting in period   
VAR lic_start =
    CALCULATETABLE (
        FILTER (
            ALL ( Sheet1 ),
            Sheet1[End] > MAX ( fiscaldate[Date] )
                && Sheet1[Start] >= MIN ( fiscaldate[Date] )
                && Sheet1[Start] <= MAX ( fiscaldate[Date] )
        ),
        Sheet1[Account ID]
    )

VAR commonIDs = INTERSECT(lic_expire, lic_start)

RETURN 
CALCULATE(
    SUMX (
        SUMMARIZE (
            CALCULATETABLE (
                FILTER (
                    ALL ( Sheet1 ),
                    Sheet1[End] > MAX ( fiscaldate[Date] )
                        && Sheet1[Start] >= MIN ( fiscaldate[Date] )
                        && Sheet1[Start] <= MAX ( fiscaldate[Date] )
                        && Sheet1[Account ID] IN {INTERSECT(lic_expire,lic_start)} *//This fails. I need to filter only common IDs to get the total start qty*
                ),
                Sheet1[Account ID]
            ),
            "start qty", SUM ( Sheet1[Qty] )
        ),
        [start qty]
    )
)

这是pib的链接https://www.dropbox.com/scl/fi/07hw6ofvtsd53jtclhnaf/playarea.pbix?rlkey=nil13kag9crh7zwxlw29fdap5&dl=0

powerbi powerbi-desktop intersect
1个回答
0
投票

尝试以下操作:

Qty Renewal = 
  var minD = MIN(fiscaldate[Date])
  var maxD = MAX(fiscaldate[Date])
  var curIds = DISTINCT(Sheet1[Account ID])
  var accountIdsExpire =
    CALCULATETABLE(
      DISTINCT(Sheet1[Account ID]),
      ALL(Sheet1),
      Sheet1[Start] <= maxD
      && Sheet1[End] >= minD
      && Sheet1[End] <= maxD
    )

  RETURN 
    CALCULATE(
      SUM(Sheet1[Qty]),
      ALL(Sheet1),
      Sheet1[Account ID] IN INTERSECT(curIds, accountIdsExpire),
      Sheet1[End] > maxD
      && Sheet1[Start] >= minD
      && Sheet1[Start] <= maxD
    )
© www.soinside.com 2019 - 2024. All rights reserved.