Tables.GetRelationships ดึงข้อมูลความสัมพันธ์ (Relationships) ระหว่างตารางต่างๆ จาก Navigation Table เพื่อวิเคราะห์โครงสร้างข้อมูล
=Tables.GetRelationships(tables as table, optional dataColumn as nullable text) as table
=Tables.GetRelationships(tables as table, optional dataColumn as nullable text) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| tables | table | Yes | ตารางที่มีโครงสร้างคล้าย Navigation Table (มีคอลัมน์ที่อ้างถึงตาราง Data ตัวจริง) | |
| dataColumn | nullable text | Optional | null | ชื่อคอลัมน์ที่ใช้บ่งชี้ตาราง Data ตัวจริง หากไม่ระบุ จะใช้ค่า Default |
Data Model Inspection
Metadata Analysis
let NavTable = #sections, Relationships = Tables.GetRelationships(NavTable, "Data") in Relationshipslet
NavTable = #sections,
Relationships = Tables.GetRelationships(NavTable, "Data")
in
Relationships
ตารางแสดงข้อมูลความสัมพันธ์ระหว่างตารางต่างๆ เช่น FromTable, ToTable, FromColumn, ToColumn, Kind
let Source = #sections, RelationshipInfo = Tables.GetRelationships(Source, "Data"), ExpandedFromTable = Table.ExpandTableColumn( RelationshipInfo, "FromTable",…let
Source = #sections,
RelationshipInfo = Tables.GetRelationships(Source, "Data"),
ExpandedFromTable = Table.ExpandTableColumn(
RelationshipInfo,
"FromTable",
{"Name"},
{"FromTableName"}
),
FinalReport = Table.SelectColumns(
ExpandedFromTable,
{"FromTableName", "ToTable", "FromColumn", "ToColumn", "Kind"}
)
in
FinalReport
ตาราง Metadata ที่เรียบเรียง มีคอลัมน์: FromTableName, ToTable, FromColumn, ToColumn, Kind
let Source = #sections, Relationships = Tables.GetRelationships(Source, "Data"), RelationshipCount = Table.RowCount(Relationships), HasRelationships = Relations…let
Source = #sections,
Relationships = Tables.GetRelationships(Source, "Data"),
RelationshipCount = Table.RowCount(Relationships),
HasRelationships = RelationshipCount > 0
in
HasRelationships
true (ถ้ามีความสัมพันธ์) หรือ false (ถ้าไม่มี)
let Source = #sections, AllRelationships = Tables.GetRelationships(Source, "Data"), ActiveOnly = Table.SelectRows( AllRelationships, each [Kind] = "1:1" or [Kin…let
Source = #sections,
AllRelationships = Tables.GetRelationships(Source, "Data"),
ActiveOnly = Table.SelectRows(
AllRelationships,
each [Kind] = "1:1" or [Kind] = "1:*"
)
in
ActiveOnly
ตารางที่มีเฉพาะความสัมพันธ์ Active ประเภท 1:1 หรือ 1:* ไม่มี Inactive Relationships
ฟังก์ชันนี้ออกแบบมาสำหรับ Navigation Table หรือตารางที่มีคอลัมน์อ้างถึง Data Table ตัวจริง ผมแนะนำให้ตรวจสอบก่อนว่า Table structure มีคอลัมน์ที่เก็บ Table references ไว้หรือเปล่า ถ้าไม่มี ฟังก์ชันอาจคืนค่าว่างหรือข้อผิดพลาดได้
Tables.GetRelationships อ่าน Metadata ของความสัมพันธ์ที่มีอยู่แล้วโดยอัตโนมัติ ซึ่งสะดวกกว่าการต้องเขียน Hard-code แต่ถ้าต้องการสร้างความสัมพันธ์ใหม่ ก็ต้องใช้วิธีอื่น เช่น Table.AddColumn หรือการสร้าง Custom Relationship
ฟังก์ชันจะพยายามใช้ค่า Default ของคอลัมน์ที่ระบุถึง Data Table โดยทั่วไปจะเป็น “Data” ถ้าหากไม่พบคอลัมน์ที่ถูกต้อง อาจคืนค่าว่างหรือ Error โดยปลอดภัยก็เลย
ส่วนใหญ่ Tables.GetRelationships ใช้กับ Navigation Tables ใน Power Query นะครับ สำหรับการอ่าน Relationship Metadata จากตัว Power BI Model เอง ต้องใช้ API หรือ Tools อื่นๆ แทน
Tables.GetRelationships คือฟังก์ชันที่ช่วยให้คุณอ่าน Metadata ของความสัมพันธ์ระหว่างตารางจาก Navigation Table โดยไม่ต้องเขียน Hard-code
ที่เจ๋งคือ ฟังก์ชันนี้จะอ่าน Relationship Information โดยอัตโนมัติ ซึ่งประกอบด้วย FromTable, ToTable, FromColumn, ToColumn, และ Kind ทำให้เราสามารถสร้าง Data Lineage Report หรือทำ Model Validation ได้ง่าย
ส่วนตัวผมใช้ Tables.GetRelationships ตอนต้องจัดการกับ Navigation Table ที่ซับซ้อนๆ หรือต้องสร้าง Metadata Documentation เพื่อแสดงให้ทีมอื่นเห็นว่าข้อมูลเชื่อมต่อกันยังไง ช่วยให้ทุกคนเข้าใจโครงสร้างข้อมูลได้ดี 😎