30% off automatic replica cartiers. best swiss iwc replicas is a truly classic and tasty watch. cheap iwcwatch.to sale. approximately four decades might be https://www.audemarspiguetwatches.to/ for sale in usa pioneer. audemarspiguetwatch usa needs superior artistry as well as engineering science. high end https://franckmullerwatches.to/ from replicamaker. each and every high quality https://www.franckmuller.to/ is truly a understand masterpiece of design. absolute hand and wrist in making is actually a leading benefit from luxury movadowatch.to watches. highest quality and absolutely movadowatches.to. have to choose the right store to buy a good luxuryreplicawatch.to,in here you can rest assured.

Tìm hiểu về Power Query / M Language (Part 8): Kiểu dữ liệu – Logical, Null, Binary

Tiếp theo với các bài viết về kiểu dữ liệu, chúng ta sẽ tìm hiểu về cách xử lý đúng và sai (logical: true/false), khám phá nghich lý của null (giá trị đại diện cho việc không có giá trị) và hệ nhị phân.

Kiểu lôgic ( Logical )

Kiểu logic lưu trữ các giá trị Boolean là một kiểu dữ liệu có chỉ có thể nhận một trong hai giá trị như đúng/sai (true/false). Nói về mặt kỹ thuật thì không mấy thú vị, nhưng cũng rất quan trọng.

true
false

Kiểu dữ liệu này rất đơn giản, không có nhiều điều để nói về nó. Ngoài ra, khi chuyển đổi giá trị sang kiểu logic, chuỗi “false” chuyển thành false và “true” chuyển thành true. Về mặt số, số 0 chuyển thành sai trong khi bất kỳ số nào khác được chuyển thành đúng.

Logical.FromText("true") // true
Logical.FromText("false") // false
Logical.FromText("something else") // lỗi - không được phép 
Logical.From(0) // false
Logical.From(1) // true
Logical.From(-199) // true

Các giá trị khác có thể dễ dàng được chuyển đổi thành lôgic bằng phép so sánh đơn giản hoặc câu lệnh if.

value = "T"  // chuyển đổi "T" -> true và tất cả các giá trị khác -> false
if value = "T" then true else if value = "F" then false else null 
// chuyển đổi "T" -> true, "F" -> false và tất cả các giá trị khác -> null

Đôi khi, các giá trị Boolean không rõ ràng như true / false. Các cặp giá trị như 1/0, yes / no, Y / N và is something / not something, về bản chất, là tất cả các giá trị Boolean. Nếu bạn thấy một cột được tạo thành từ các giá trị như thế này, có lẽ tốt nhất bạn nên chuyển đổi cột đó thành giá trị thực sự của nó: là kiểu lôgic. Cả Power Query và Microsoft Power BI, Microsoft Excel, v.v. đều có xu hướng hoạt động tốt nhất khi kiểu dữ liệu của cột khớp với kiểu dữ liệu được lưu trữ trong cột. Hãy loại bỏ lớp vỏ ngụy trang và biến nó thành lôgic thực sự.

Kiểu không có giá trị ( Null )

Kiểu null là một điều kỳ lạ thật khó để diễn tả hết nghĩa của nó. Đó là một kiểu luôn giữ cùng một giá trị: null.

null

null đại diện cho sự vắng mặt của một giá trị (hoặc một giá trị không xác định hoặc một giá trị không rõ ràng). Nếu null đại diện cho một giá trị chưa được biết, thì cuối cùng thì null có thực sự là một giá trị không? (thật khó để diễn tả).

Chúng ta có thể để lại những suy ngẫm sâu sắc như vậy cho các nhà triết học và các nhà lý thuyết ngôn ngữ máy tính. Tuy nhiên, có một khía cạnh thực tế cho sự khó khăn này. Các toán tử nên xử lý null như thế nào? Ví dụ: nếu hai giá trị null được so sánh với nhau (null = null), kết quả có phải là true không, bởi vì các giá trị giống hệt nhau đang được so sánh, hoặc null. Bởi vì các giá trị đó đại diện cho điều chưa biết và so sánh chưa biết với chưa biết được cho là kết quả chưa biết?

Vậy bạn có thể thấy, có ít nhất một vài cách hợp lý mà một toán tử có thể xử lý null. Vì một toán tử không thể hỗ trợ nhiều hành vi đồng thời, các nhà thiết kế ngôn ngữ phải chọn giữa các hành vi có thể có khác nhau khi quyết định cách một toán tử cụ thể sẽ hoạt động.

Trong M, các phép so sánh bình đẳng trực tiếp (toán tử = và <>) khi một đối số là null được đánh giá thành true hoặc false:

null = null // true
null <> null // false
1 = null // false
null <> 1 // true

So sánh null với toán tử and sẽ trả về null, trừ khi đối số khác là false, sẽ trả về false. Khi so sánh or được sử dụng với giá trị null, giá trị null được trả về, trừ khi đối số khác là true, trong trường hợp này kết quả là true.

null and null    // null
null and true    // null
null and false   // false
null or null     // null
null or true     // true
null or false    // null

Nếu null được sử dụng làm đối số cho bất kỳ toán tử nào khác, bao gồm nhỏ hơn hoặc bằng (<=) và lớn hơn hoặc bằng (>=), kết quả là null.

1 > null      // null
1 >= null     // null
null < null   // null
null <= null  // null
10 + null     // null
null - 16.3   // null
null * 25     // null
8 / null      // null
"abc" & null & "def"   // null

Ngoại lệ đối với “hầu hết mọi toán tử khác” là is meta — toán tử nâng cao liên quan đến việc nhận thông tin về một giá trị so với làm việc trực tiếp với giá trị.

Đôi khi, cách M làm việc với null có thể không như bạn muốn. Việc M xử lý null theo một cách nhất định không có nghĩa là bạn không thể để nó hoạt động theo cách khác, chỉ là bạn sẽ phải làm thêm để đạt được hiệu quả mong muốn.

Giả sử bạn muốn nối một vài chuỗi và một biến sao cho các chuỗi vẫn được kết hợp ngay cả khi biến là null. Một cách để làm điều này là kiểm tra xem biến có giá trị null hay không. Nếu có, hãy thay thế null bằng một chuỗi trống trước khi nối nó.

let
    value = null,
    NullToBlank = (input) => if (input = null) then "" else input
in
    "abc" & NullToBlank(value) & "def"     // "abcdef"

Một trường hợp khác liên quan đến các so sánh nhỏ hơn và lớn hơn. Trong M, nếu một giá trị rỗng được so sánh bằng toán tử quan hệ (>, >=, <, <=), kết quả là giá trị null. Điều này có nghĩa rằng không thể biết liệu một giá trị không xác định lớn hơn hay nhỏ hơn một giá trị khác vì một giá trị không xác định. Tuy nhiên, một cách hợp lệ khác để xử lý tình huống này là xếp hạng các giá trị null nhỏ hơn tất cả các giá trị không phải null.

Chúng ta có thể sử dụng Value.Compare để so sánh. Hàm thư viện này trả về 0 nếu các giá trị được so sánh bằng nhau, -1 nếu giá trị đầu tiên nhỏ hơn giá trị thứ hai và 1 nếu giá trị đầu tiên lớn hơn giá trị thứ hai. Không giống như các toán tử quan hệ, với phương pháp này, null được xếp hạng là nhỏ hơn tất cả các giá trị không phải null.

Value.Compare(1, 1)        // 0 (bằng nhau)
Value.Compare(10, 1)       // 1 (giá trị đầu lớn hơn giá trị thứ 2)
Value.Compare(10, 100)     // -1 (giá trị đầu nhỏ hơn giá trị thứ 2)
null > 1                   // null
Value.Compare(null, 1)     // -1
null = null                // true
Value.Compare(null, null)  // 0
"a" < null                 // null
Value.Compare("a", null)   // 1

Chúng ta xem xét thêm một khả năng nữa. Ngoài null = null kết quả là true. Nếu, bạn muốn null = null kết quả thành null, hãy thử hàm thư viện Value.NullableEquals.

null = null     // true
Value.NullableEquals(null, null)     // null

Hệ nhị phân ( Binary )

Chúng ta thường thấy loại nhị phân khi làm việc với các tệp tin (files). Thông thường, bạn sẽ sử dụng phương thức thư viện (hoặc một chuỗi phương thức) để chuyển đổi giá trị nhị phân thành thứ gì đó thuận tiện hơn để xử lý, chẳng hạn như bảng.

Nếu vì lý do nào đó, chúng ta muốn nhập một giá trị nhị phân theo đúng nghĩa. Cả hai danh sách số (số nguyên hoặc thập lục phân) và giá trị văn bản được mã hóa cơ sở base64 đều được hỗ trợ.

#binary({ 0x00, 0x10 })     // danh sách các ký tự thập lục phân
#binary({ 0, 16 })          // danh sách các ký tự thập phân
#binary("ABA=")             // chuỗi được mã hóa cơ sở base64

Ví dụ trên chúng ta thấy hai byte giống nhau được viết ra bằng cách sử dụng ba cú pháp.

Thư viện chuẩn chứa một số hàm để làm việc với các giá trị nhị phân. Có những phương pháp chuyển đổi giá trị sang và từ hệ nhị phân. Bạn có thể nén và giải nén bằng cách sử dụng gzip và deflate. Ngoài ra còn có một phương pháp trích xuất loại dung và trong một số trường hợp. Thậm chí còn có một nhóm hàm có thể được sử dụng để xác định phân tích cú pháp định dạng tùy chỉnh, đối với một vài trường hợp phức tạp (định dạng kỳ quặc) khi bạn cần phân tích cú pháp một giá trị nhị phân mà không hàm thư viện nào hiểu được.

Kết luận

Trong khi các kiểu giá trị đơn là nền tảng để làm việc với dữ liệu, chúng ta thường muốn làm việc với các giá trị được nhóm lại với nhau theo cách này hay cách khác, có thể là dạng danh sách, có thể là bản ghi, có thể được tập hợp thành bảng. M có một kiểu cho mỗi nhóm này. bài tới, chúng ta sẽ bắt đầu tìm hiểu chúng.

Leave a Reply

Your email address will not be published. Required fields are marked *