我在一个模特儿身上遇到的问题几乎要解决了.基本上,我有一个“时态”多到多个映射表,用来映射经理的佣金随时间的变化。这些情况每天都会发生变化(但很少改变),所以我尽量避免让一个大表重复使用相同的值,尽管日期不同,但如果我这样做,我最终会得到2亿张记录表,但关键的是,一个以上的经理可以通过销售某一种产品获得佣金:s
备注:有些佣金只交给一位经理,有些则转到多家公司,这会随着时间的推移而改变。
我所做的是将ValidFrom和ValidTo日期保存在映射表中.
我想出的每一个解决方案都是非常缓慢的,我只是不知道在这一点上是否有一个解决方案。下面是指向一个非常小的示例的链接:- http://1drv.ms/1gOr7uw
我认为最麻烦的地方实际上是在某一天,为某一位经理获得正确的“薪酬”。唯一能做到这一点的方法是嵌套SUMX,但是一定有更漂亮的东西我错过了?!
我想过的一件事(但实际上没有实现)就是保持一个有效日期,并使用它进行过滤,并利用LASTNONBLANK()或其他什么工具?
也许一个有新眼睛的人能帮我解决问题?把我的头发拔出来!
编辑:可能有人会说为什么我不在ETL中这样做,我在这里没有显示的是,我有其他不需要被经理分割的度量,但是应该报告每个人的全部金额.但是总数并不是所有经理的总和(也就是默认的M2M行为)。
也许我需要两张事实表?也许有人可以在Excel中对我的数据进行建模,以实现事实的“分割”,在我看来,无论问题是如何解决的,都需要在运行时完成一些 calc。我想?!
泰。
发布于 2015-07-22 17:25:32
试试看,我没有检查过他们的表现,但我不认为他们会是超级.尽管如此,至少它看起来很优雅:)
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进行聚合)
https://stackoverflow.com/questions/31568241
复制相似问题