0

对于我目前在模型中遇到的一个问题,我几乎已经走到了尽头......基本上,我有一个“时间”多对多映射表,它随着时间的推移映射经理的佣金率......这些可以每天改变, (但很少这样做),所以我试图避免只是有一个巨大的表,尽管在不同的特定日期重复相同的值,如果我无论如何都这样做,我最终会得到一个 2 亿条记录表,但至关重要的是超过一位经理可以获得销售某种产品​​类型的佣金:s

注意有些佣金只给一个经理,有些给多个,这可以随着时间的推移而切换。

我所做的是在映射表中保留 ValidFrom 和 ValidTo 日期......

我想出的每个解决方案都非常缓慢,我只是不知道此时是否有解决方案......这是一个非常小的示例的链接:- http://1drv.ms/1gOr7uw

我认为最麻烦的领域实际上是在给定的一天为给定的经理获得正确的“费率”......我似乎能够做到这一点的唯一方法是嵌套的 SUMX,但必须有一些东西滑溜溜的我失踪了?!

我想到的一件事(但未能实际实施)就是保持一个生效日期,并使用它进行过滤并利用 LASTNONBLANK() 或其他什么?

也许有一些新鲜的眼睛可以帮助我?把我的头发拉在这里!

编辑:有人可能会说我为什么不在 ETL 中这样做,我在这里没有显示的是我有其他不需要由经理拆分的措施,而是应该报告全部金额每个...但总数不是所有经理的总和(又名,默认的 M2M 行为)

也许我需要两个事实表?也许有人可以在 Excel 中对我的数据进行建模,以实现事实的“拆分”,正如我所看到的,无论以何种方式解决问题,都需要在运行时完成一些计算。我认为?!

泰。

4

1 回答 1

2

试试看,我没有检查性能,但我不希望它们超级......不过,至少它看起来很优雅:)

Amount := 
SUMX (
    SUMMARIZE (
        Mapping,
        Mapping[Manager],
        Mapping[Rate],
        Mapping[ValidFrom],
        Mapping[ValidTo],
        Products[Products],
        "SalesInPeriod", Mapping[Rate]
            * CALCULATE (
                SUM ( Sales[Amount] ),
                VALUES ( 'Date'[Date] ),
                DATESBETWEEN (
                    'Date'[Date],
                    Mapping[ValidFrom],
                    Mapping[ValidTo]
                )
            )
    ),
    [SalesInPeriod]
)

如果你想计数,仍然保持时间 M2M 工作,这应该可以解决问题:

Count := 
CALCULATE (
    COUNTROWS ( Sales ),
    GENERATE (
        SUMMARIZE (
            Mapping,
            Mapping[ValidFrom],
            Mapping[ValidTo],
            Products[Products]
        ),
        DATESBETWEEN (
            'Date'[Date],
             Mapping[ValidFrom],
             Mapping[ValidTo]
        )   
    ),
    VALUES ( 'Date'[Date] )
)

后一个版本更容易,因为它不需要速率和管理器(或者,它需要管理器,但它已经在过滤器上下文中并且不需要 SUMX,因为您正在使用规范 M2M 进行聚合)

于 2015-07-22T17:25:32.960 回答