表格 DAX 每日多对多关联
Tabular DAX Daily Many To Many Association
我几乎无法解决我目前在模型中遇到的问题...基本上,我有一个 'temporal' 多对多映射 table 映射佣金率随着时间的推移对于管理人员来说......这些可能每天都在变化,(但很少这样做),所以我试图避免只是有一个巨大的 table 重复相同的值,尽管对于不同的特定日期,如果我这样做无论如何,我最终获得了 2 亿的记录 table,重要的是,尽管不止一位经理可以获得某种产品类型的销售佣金 :s
注意:有些佣金只给一个经理,有些给多个,这可以随着时间的推移而切换..
我所做的是在映射中保留 ValidFrom 和 ValidTo 日期 table...
我想出的每一个解决方案都非常慢,我只是不知道此时是否有解决方案...这里是一个 link 非常小的样本:- http://1drv.ms/1gOr7uw
我认为最麻烦的领域实际上是在给定的一天为给定的经理获取正确的 "rate"...我似乎能够做到这一点的唯一方法是嵌套SUMX,但一定有我遗漏的东西?!
我考虑过(但未能真正实施)的一件事就是保持有效日期,并使用该日期进行过滤并利用 LASTNONBLANK() 或其他东西?
也许有新眼光的人可以帮助我?把我的头发扯出来!
编辑:有人可能会说为什么我不在ETL中这样做,我在这里没有展示的是我有其他不需要的措施由经理拆分,而是应该报告每个人的全部金额......但总数不是所有经理的总和(也就是默认的 M2M 行为)
也许我需要两个事实 table?也许有人可以在 Excel 中对我的数据进行建模,以实现 'split' 的事实,正如我所看到的,无论以何种方式解决问题 some 计算需要在 运行 时完成。我觉得?!
Ty.
试一试,我没有检查过性能,但我不希望它们是超级的......不过,至少它看起来很优雅:)
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 进行聚合)
我几乎无法解决我目前在模型中遇到的问题...基本上,我有一个 'temporal' 多对多映射 table 映射佣金率随着时间的推移对于管理人员来说......这些可能每天都在变化,(但很少这样做),所以我试图避免只是有一个巨大的 table 重复相同的值,尽管对于不同的特定日期,如果我这样做无论如何,我最终获得了 2 亿的记录 table,重要的是,尽管不止一位经理可以获得某种产品类型的销售佣金 :s
注意:有些佣金只给一个经理,有些给多个,这可以随着时间的推移而切换..
我所做的是在映射中保留 ValidFrom 和 ValidTo 日期 table...
我想出的每一个解决方案都非常慢,我只是不知道此时是否有解决方案...这里是一个 link 非常小的样本:- http://1drv.ms/1gOr7uw
我认为最麻烦的领域实际上是在给定的一天为给定的经理获取正确的 "rate"...我似乎能够做到这一点的唯一方法是嵌套SUMX,但一定有我遗漏的东西?!
我考虑过(但未能真正实施)的一件事就是保持有效日期,并使用该日期进行过滤并利用 LASTNONBLANK() 或其他东西?
也许有新眼光的人可以帮助我?把我的头发扯出来!
编辑:有人可能会说为什么我不在ETL中这样做,我在这里没有展示的是我有其他不需要的措施由经理拆分,而是应该报告每个人的全部金额......但总数不是所有经理的总和(也就是默认的 M2M 行为)
也许我需要两个事实 table?也许有人可以在 Excel 中对我的数据进行建模,以实现 'split' 的事实,正如我所看到的,无论以何种方式解决问题 some 计算需要在 运行 时完成。我觉得?!
Ty.
试一试,我没有检查过性能,但我不希望它们是超级的......不过,至少它看起来很优雅:)
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 进行聚合)