首页 > 解决方案 > 无法识别 3 字节二进制日期获取变量的 Power Query 转换

问题描述

日期显示为 3 字节十六进制值示例 = 72, 02, 11 将 72 转换为十进制 = 114 + 1900 = 2014, 02 = 02, 11 = 17 所以日期是 02/17/2014

Bdate 以三字节字段的形式出现,二进制定义为第 1 字节 = 年,第 2 字节 = 第 m,第 3 字节 = 日。

构建一个要调用的函数,因为数据库中的几个日期都是这种格式。将十六进制转换为十进制的辅助函数是库中的 fnhex2Dec。这是 FixDateBn 的代码

    let
        FixDateBn = (Bdate as binary) =>
    
        let
        FixDateBn = BinaryFormat.ByteOrder(
        BinaryFormat.Record ([
                Yr= BinaryFormat.Byte,       //<- the Yr variable is getting Name Yr wasn't recognized.
                Mth = BinaryFormat.Byte,
                Day = BinaryFormat.Byte ]),
            ByteOrder.LittleEndian),
                Yrnum = fnhex2Dec(Yr,16)+1900,
                Mthnum = fnhex2Dec(Mth,16),
                Daynum = fnhex2Dec(Day,16),
            Gooddate = #date(Yrnum,Mthnum,Daynum) as date
        in 
            if Bdate is null then null else Gooddate
    in
        FixDateBn

感谢任何帮助。

这是从十六进制转换为常规日期的 sql。不知道如何在 Power Query M 语言中执行此操作。

CREATE FUNCTION "GetDateFromWDate" (:wDate CHAR(3)) RETURNS DATE AS
BEGIN
    DECLARE :tmpdate DATE
    SET :tmpdate = '1900-01-01';   
    IF (:wDate <> null) and (:wDate <> '') THEN
        SET :tmpdate = DATEFROMPARTS (ascii(substring(:wDate, 1, 1)) + 1900, ascii(substring(:wDate, 2, 1)), ascii(substring(:wDate, 3, 1)));
    END IF;   
    RETURN :tmpdate;
END

谢谢萨米

标签: powerbi

解决方案


推荐阅读