我是Power BI Desktop的新手,来自Excel。
在查询编辑器中,我想通过单独的分组列(设备)在表中创建一个新列,其中时间/日期与一个记录之间存在差异。一个例子更好地解释了它。这是数据的起点,一列为设备ID,另一列为事件的日期。
Device Date
A 5/1/2016
B 5/1/2016
C 5/2/2016
A 5/4/2016
B 5/5/2016
A 5/10/2016
B 5/9/2016
C 5/12/2016
我想按设备分组并按日期排序,然后计算差异,制作如下内容:
Device Date Lag
A 5/1/2016 (null)
A 5/4/2016 3
A 5/10/2016 6
B 5/1/2016 (null)
B 5/5/2016 4
B 5/9/2016 4
C 5/2/2016 (null)
C 5/12/2016 10
在Power BI查询编辑器中执行此操作的最佳方法是什么?
感谢您的帮助!
答案 0 :(得分:3)
这是一个解决方案。但它不涉及查询编辑。
我们将创建一个计算列并以dax方式执行。
1)在“字段”窗格中,右键单击表格,然后选择“新建” 柱"
2)在公式栏中,输入以下公式。将TableName替换为您的表名
LagColumn = DATEDIFF(TableName[Date]
, CALCULATE(MAX(TableName[Date]),
FILTER(TableName,
TableName[Device] = EARLIER(TableName[Device]) &&
TableName[Date] < EARLIER(TableName[Date])
)
)
, DAY
)
3)立即在报告中选择设备,日期和LagColumn。选择&#34;表&#34;可视化面板中的选项。
公式说明 -
1)新的lagColumn是两个实体的DATEDIFF天数。
2)第一个参数是当前行的DATE字段
3)第二个参数是小于当前行的日期且属于的所有日期的最大日期值与当前行相同的设备。 (EARLIER可帮助您检索上一个上下文中当前行的值。)
在这里阅读更多
1)早期 - https://msdn.microsoft.com/en-us/library/ee634551.aspx
2)行上下文和过滤器上下文 - https://www.sqlbi.com/articles/row-context-and-filter-context-in-dax/
类似用例的屏幕截图:
在这里,
注意 - 对于每个组,第一列的延迟是第一列本身。如果您希望它为NULL,则可以检查ISBLANK(CALCULATE ....)是否为true,然后将其设为null。这只会给公式增加一点点复杂性。
提出DAX解决方案,因为我不认为有一种查询方式可以解决这个问题,AFAIK。
如果您还有其他问题,请与我们联系。