Thep Excel

Tables.GetRelationshipsดึงข้อมูลความสัมพันธ์ระหว่างตาราง

Tables.GetRelationships ดึงข้อมูลความสัมพันธ์ (Relationships) ระหว่างตารางต่างๆ จาก Navigation Table เพื่อวิเคราะห์โครงสร้างข้อมูล

fx
=Tables.GetRelationships(tables, [dataColumn]) as table

ความนิยม5/10
ความยาก4/10
ประโยชน์6/10

อัปเดต 6 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
tables table ตารางที่มีโครงสร้างคล้าย Navigation Table (มีคอลัมน์ที่อ้างถึงตาราง Data ตัวจริง)
[dataColumn]ไม่บังคับ nullable text null ชื่อคอลัมน์ที่ใช้บ่งชี้ตาราง Data ตัวจริง หากไม่ระบุ จะใช้ค่า Default

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

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 เพื่อแสดงให้ทีมอื่นเห็นว่าข้อมูลเชื่อมต่อกันยังไง ช่วยให้ทุกคนเข้าใจโครงสร้างข้อมูลได้ดี 😎

How it works

Data Model Inspection

Data Model Inspection

Metadata Analysis

Metadata Analysis

Examples

ดึงความสัมพันธ์จาก Navigation Table พื้นฐานlet NavTable = #sections, Relationships = Tables.GetRelationships(NavTable, "Data") in Relationships

ใช้ Tables.GetRelationships เพื่อดึงข้อมูลความสัมพันธ์จาก Navigation Table โดยระบุ "Data" เป็นคอลัมน์ที่บ่งชี้ตาราง Data ตัวจริง

fx
let
NavTable = #sections,
Relationships = Tables.GetRelationships(NavTable, "Data")
in
Relationships

ผลลัพธ์ตารางแสดงข้อมูลความสัมพันธ์ระหว่างตารางต่างๆ เช่น FromTable, ToTable, FromColumn, ToColumn, Kind
สร้าง Relationship Metadata Report ที่อ่านง่ายlet Source = #sections, RelationshipInfo = Tables.GetRelationships(Source, "Data"), ExpandedFromTable = Table.ExpandTableColumn( RelationshipInfo, "FromTable",…

ขยาย FromTable เพื่อได้ชื่อตารางจริง แล้วเลือกคอลัมน์ที่สำคัญเพื่อให้ Report อ่านง่ายและเข้าใจความสัมพันธ์ได้ชัดเจน

fx
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…

นับจำนวน Row ในตาราง Relationships เพื่อบอกว่าข้อมูลมีการเชื่อมต่อกันหรือเป็น Orphan Tables

fx
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…

กรองเฉพาะความสัมพันธ์ที่ Active เพื่อหลีกเลี่ยง Inactive Relationships ที่อาจทำให้ Report สับสน

fx
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

FAQs

Tables.GetRelationships จะทำงานได้ดีกับตาราง input ประเภทไหน?+

ฟังก์ชันนี้ออกแบบมาสำหรับ Navigation Table หรือตารางที่มีคอลัมน์อ้างถึง Data Table ตัวจริง ผมแนะนำให้ตรวจสอบก่อนว่า Table structure มีคอลัมน์ที่เก็บ Table references ไว้หรือเปล่า ถ้าไม่มี ฟังก์ชันอาจคืนค่าว่างหรือข้อผิดพลาดได้

ความแตกต่างระหว่าง Tables.GetRelationships กับการเขียน Relationship ด้วยตนเอง คืออะไร?+

Tables.GetRelationships อ่าน Metadata ของความสัมพันธ์ที่มีอยู่แล้วโดยอัตโนมัติ ซึ่งสะดวกกว่าการต้องเขียน Hard-code แต่ถ้าต้องการสร้างความสัมพันธ์ใหม่ ก็ต้องใช้วิธีอื่น เช่น Table.AddColumn หรือการสร้าง Custom Relationship

ถ้าไม่ระบุ dataColumn parameter จะเกิดอะไรขึ้น?+

ฟังก์ชันจะพยายามใช้ค่า Default ของคอลัมน์ที่ระบุถึง Data Table โดยทั่วไปจะเป็น "Data" ถ้าหากไม่พบคอลัมน์ที่ถูกต้อง อาจคืนค่าว่างหรือ Error โดยปลอดภัยก็เลย

ฟังก์ชันนี้ใช้งานได้กับ Power BI Model Metadata ไหม?+

ส่วนใหญ่ Tables.GetRelationships ใช้กับ Navigation Tables ใน Power Query นะครับ สำหรับการอ่าน Relationship Metadata จากตัว Power BI Model เอง ต้องใช้ API หรือ Tools อื่นๆ แทน

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ Tables.GetRelationships จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้Tables.GetRelationshipsTable functions
Table functions (5)
Table.ExpandTableColumn

Table.ExpandTableColumn ใช้แตกข้อมูลจากคอลัมน์ที่เป็น nested table ออกมาเป็นคอลัมน์และแถวปกติในตารางหลัก โดยรักษาข้อมูลคอลัมน์อื่นไว้ และทำซ้ำแถวหลักสำหรับแต่ละแถวในตารางซ้อน มักใช้คู่กับ Table.NestedJoin หลัง join ตาราง หรือใช้ขยายข้อมูลจากแหล่งที่มีโครงสร้างแบบ hierarchical เช่น JSON หรือ API

Table.FromRows

Table.FromRows สร้างตารางจาก List ของ List โดยแต่ละ List ย่อยแทนข้อมูลในแถวหนึ่ง คล้ายกับการ transpose ข้อมูลแบบแถว-คอลัมน์ แต่ทำให้เป็นตารางจริงในทันที

Table.RowCount

ฟังก์ชันสำหรับนับจำนวนแถวทั้งหมดในตาราง โดยคืนค่าเป็นตัวเลขครับ

Table.SelectColumns

Table.SelectColumns ใช้สำหรับเลือกคอลัมน์เฉพาะจากตารางและสร้างตารางใหม่ที่มีเฉพาะคอลัมน์เหล่านั้น

Table.SelectRows

Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่