Data: 我有一行代表产品的年度订阅,它有一个整体的startDate和endDate,还有第三个日期,即startdate 1个月,名为endDateNew . 我还有一个不相关的日期表(称为表X) .
Output I'm looking for: 我需要一个名为Categorization的新列,如果表X中选择的日期在startDate和endDateNew之间,则返回'New',如果日期在startDate和endDate之间,则返回'Existing' .
Problem: 列似乎立即评估而没有考虑来自非相关日期表的日期上下文 - 我有点期望这发生在visual studio中(假设上下文是所有记录?)但是在Excel中进行预览时它会进行通过这个相同的 Value .
正在运行的位:我有一个聚合(活动订阅者计数),可以在表X中选择的月份内正确地将订阅计为活动状态 .
单个日期的SQL等效项:
case
when '2015-10-01' between startDate and endDateNew then 'New'
when '2015-10-01' < endDate then 'Existing'
end as Category
其中将为表X中的每个日期计算值
谢谢!
罗斯
2 回答
计算列仅在模型刷新/处理时评估 . 这是设计的 . 无法根据数据透视表中过滤器上下文中的运行时更改来进行计算列更改 .
罗斯,
计算列的工作方式与Excel不同 . 当记录首次添加到模型时,最佳值是已知的 . 你的例子有点类似于缓慢变化的维度 .
有几种可能的解决方案 . 这是两个半:
每次处理订阅表时,过去32天的数据都会完整处理(这可能是无法接受的低效率) .
要么
使用订阅表中的主键和“订阅年龄天数”的单个计算列创建一个新表'Subscription scd' . 像一个支腿 . 可以比重新处理订阅表更有效地重新处理此表,因此仅将订阅表作为增量处理,并在此表上对最近32天内的数据执行完整处理 .
要么
确定哪些度量在“新/现有”上下文中是有意义的,并使用度量中日期列的动态过滤器为它们编写明确的度量
例如 . 限定