创建基于上下文SSAS表格DAX更改值的计算列(非聚合)

时间:2015-12-10 12:26:54

标签: ssas dax ssas-tabular

数据:我有一行代表产品的年度订阅,它有一个整体的startDate和endDate,还有第三个日期,即startdate + 1个月,名为endDateNew。我还有一个不相关的日期表(称为表X)。

输出我正在寻找:我需要一个名为Categorization的新列,它将返回' New'如果表X中选择的日期在startDate和endDateNew之间,并且'现有'如果日期在startDate和endDate之间。

问题:该列似乎立即评估,而没有考虑来自非相关日期表的日期上下文 - 我有点希望这发生在visual studio中(假设上下文是所有记录?)但是在Excel中预览时,它会通过相同的值传递。

正在运行的位:我有一个聚合(一个活跃的订阅者计数),它在表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 个答案:

答案 0 :(得分:1)

计算列仅在模型刷新/处理时评估。这是设计的。根据数据透视表中过滤器上下文中的运行时更改,无法进行计算列更改。

答案 1 :(得分:0)

罗斯

计算列的工作方式与Excel不同。当记录首次添加到模型时,最佳值是已知的。 你的例子有点类似于缓慢变化的维度。

有几种可能的解决方案。这是两个半:

每次处理订阅表时,过去32天的数据都会完整处理(可能效率低得令人无法接受)。

OR

创建一个新表&#39; Subscription scd&#39;使用订阅表中的主键和您的单个计算列“订阅年龄天数”。像一个支腿。可以比重新处理订阅表更有效地重新处理此表,因此仅将订阅表作为增量处理,并在此表上针对过去32天内的数据执行完整处理。

OR

确定哪些措施在新的/现有的&#39;中有用。上下文并使用度量

中日期列的动态过滤器为它们写明确的度量

例如。定义

'Sum of Sales - New Subscriptions',
'Sum of Sales - Existing Subscriptions', 
'Distinct Count of New Subscriptions - Last 28 Days', etc