如何使用DAX函数转换日期?

时间:2014-05-02 15:32:18

标签: sql-server excel ssas powerpivot dax

我正在开发一个PowerPivot项目,我需要将日期转换为另一种格式。 我的SQL Server Analysis Cube为我提供了一个包含日期属性的时间维度。 我想将其转换为dd / mm / yyyy格式以创建对其他数据源(Excel文件)的引用。

enter image description here

我试图通过使用标准DAX日期函数来转换它,但它不被识别为日期,它似乎是由于添加为前缀的日期名称。 如何将其转换为dd / mm / yyyy格式?如何在逗号后提取子字符串?

谢谢!

3 个答案:

答案 0 :(得分:2)

我使用以下数据来测试我的解决方案。

enter image description here

您可以使用SEARCH函数查找字符串的第一个实例。所以我可以使用以下公式解析日期部分:

=right([Datefield],(LEN([Datefield])-SEARCH(",",[Datefield])-1))

从逗号到字符串结尾后的字符处开始获取子字符串。

DATEVALUE函数采用表示日期的字符串并将其转换为日期。我可以将它与我以前的功能结合起来:

=datevalue(right([Datefield],(LEN([Datefield])-SEARCH(",",[Datefield])-1)))

在下图中,第一列是原始数据。第二列是解析日期的子字符串的函数。第三列采用第二列中该日期字符串的日期值。第四列是包含子字符串和日期值的一体化公式。

enter image description here

答案 1 :(得分:1)

如果您要定期从数据库加载数据,我建议您使用Power Query将数据加载到PowerPivot模块中。

以下是可以为您完成结果的示例代码。

数据看起来像这样(表2):

Date
Monday, January 12, 2014
Tuesday, January 13, 2014
Wednesday, January 14, 2014
let  
    Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    #"Split Column by Delimiter" = Table.SplitColumn(Source,"Date",Splitter.SplitTextByEachDelimiter({","}, null, false),{"Date.1", "Date.2"}),
    #"Change to Date Format" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Date.1", type text}, {"Date.2", type date}}),
    #"Removed Columns" = Table.RemoveColumns(#"Change to Date Format",{"Date.1"})
in 
    #"Removed Columns"

答案 2 :(得分:0)

正如@mmarie解释的那样,以下公式运作良好(需要进行一些更改):

= datevalue(right([Datefield];(LEN([Datefield]) - SEARCH(“,”; [Datefield]) - 1)))