Monitor Azure Data Factory with Power BI – Part 2

ใน บทความที่แล้ว เราได้อธิบายถึงขั้นตอนในการดึง authentication token เพื่อเข้าถึง Azure Data Factory REST API. ในบทความนี้ เราจะสร้างสิ่งนี้เพื่อดึงข้อมูลที่เป็นประโยชน์สำหรับการตรวจสอบข้อมูลจาก Azure Data Factory Pipleines โดยใช้ queryPipelineRuns endpoint.

โดยเริ่มจากการสร้าง  parameters เพิ่มเติมเพื่อจัดเก็บ Azure Resource Group Name ของคุณ โดยต้องเป็นที่กลุ่มที่ Data Factory instsance ที่ต้องการใช้งานอยู่ และ ระบุชื่อ Data Factory ที่ต้องการ

1. เปิดไฟล์ Power BI Desktop ของคุณแล้วคลิก Transform Transform

2. จากนั้นคลิกขวาที่บานหน้าต่าง Queries, เลือก New Parameter จากนั้นเพิ่มชุดพารามิเตอร์ต่อไปนี้: resourceGroupName, dataFactoryName. 

ตัวอย่าง:​​​​

ตอนนี้คุณควรมีทั้งหมด 5 parameters:

ลำดับต่อมา สร้าง query โดยคลิกขวาที่บนหน้าต่าง Queries ทางด้านซ้ายมือแล้วเลือก Blank Query , และเลือก Advanced Editor.

จากนั้นวาง Code ต่อไปนี้:

?

123456789101112131415161718192021222324252627282930313233343536373839404142let    tenantId = tenantId,  subscriptionId = subscriptionId,  resourceGroupName = resourceGroupName,  factoryName = dataFactoryName,  apiVersion = "2018-06-01",      today = DateTime.LocalNow() as datetime,  prev = Date.AddMonths(today, - 1),  startDt = DateTime.Date(prev),  startDtText    = "'"& Text.From(Date.Year(startDt)) & "-"& Text.From(Date.Month(startDt)) & "-"& Text.From(      Date.Day(startDt)    )      & "T00:00:00.0000000Z'",  endDt = DateTime.Date(today),  endDtText    = "'"& Text.From(Date.Year(endDt)) & "-"& Text.From(Date.Month(endDt)) & "-"& Text.From(      Date.Day(endDt)    )      & "T00:00:00.0000000Z'",    token = getAuthToken("https://management.azure.com/"),  //Build request URL & Body using variables  url    = "https://management.azure.com/subscriptions/"& subscriptionId & "/resourceGroups/"      & resourceGroupName      & "/providers/Microsoft.DataFactory/factories/"      & factoryName      & "/queryPipelineRuns?api-version="      & apiVersion,    reqBody = "{ ""lastUpdatedAfter"": "& startDtText & ", ""lastUpdatedBefore"": "& endDtText    & " } ] }",    //Make API Call to query Data Factory  reqHeaders = [#"Content-Type" = "application/json", #"Authorization" = "Bearer " & token],  result = Json.Document(    Web.Contents(url, [Headers = reqHeaders, Content = Text.ToBinary(reqBody)])  )in  result

หลังจากคลิก Done คุณจะได้รับแจ้งให้ตั้งค่าระดับความเป็นส่วนตัว (privacy levels) สำหรับข้อมูลในรายงานนี้ คุณต้องเลือกตัวเลือกที่เหมาะสมตามนโยบายองค์กรของคุณ สำหรับการสาธิตเราจะเลือกละเว้นระดับความเป็นส่วนตัว:

หากป้อนค่าพารามิเตอร์ทั้งหมดของคุณอย่างถูกต้องและ query ได้รับการรับรองความถูกต้อง (authenticated) แล้ว query ควรส่งคืนการตอบสนองที่คล้ายกับตัวอย่างด้านล่าง:

ขั้นตอนต่อไป เราจะต้องทำการขั้นตอนการปรับปรุงเพื่อวิเคราะห์แยกข้อมูลที่ตอบสนองมาในรูปแบบ JSON ไปเป็นรูปแบบตาราง:

1. คลิก Into Table

5. Transform 1.png

2. คลิกบน List

5. Transform 2.png

3. คลิกไปที่ปุ่ม expand

5. Transform 4.png

4. จากนั้นตรวจสอบให้แน่ใจว่าได้ยกเลิกการเลือก “Use original column name as prefix” แล้ว หลังจากนั้นคลิก ok.

5. Transform 5.png

ตอนนี้สามารถดึงข้อมูลจากการรันไปป์ไลน์ได้เรียบร้อยแล้ว อย่างไรก็ตาม วิธีนี้จะส่งคืนข้อมูลเพียง 100 รายการตามค่าเริ่มต้น ตามข้อจำกัดของ API ที่สามารถส่งคืนได้เพียง 100 รายการต่อการเรียก API 1 ครั้ง 

ในการดึงบันทึกทั้งหมด เราจะต้องสร้างฟังก์ชันที่จะใช้ประโยชน์จากฟังก์ชันการแบ่งหน้าของ API (pagination functionality) และให้ดำเนินการวนเรียกใช้งานซ้ำทีละหน้าจนครบ

ในการทำเช่นนี้ ให้คลิกขวาที่ New Query และ เลือก Duplicate and rename the new Query ไปเป็น getPipelineRuns.

เลือก query ​​​​​​​getPipelineRuns ​​​​​​​จากนั้นเลือก Advanced Editor และวาง code ดังต่อไปนี้:

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061let  getPipelineRuns = (optional contText astext) aslist => let    tenantId = tenantId,  subscriptionId = subscriptionId,  resourceGroupName = resourceGroupName,  factoryName = dataFactoryName,  apiVersion = "2018-06-01",      today = DateTime.LocalNow() asdatetime,  prev = Date.AddMonths(today, - 1),  startDt = DateTime.Date(prev),  startDtText    = "'"& Text.From(Date.Year(startDt)) & "-"& Text.From(Date.Month(startDt)) & "-"& Text.From(      Date.Day(startDt)    )      & "T00:00:00.0000000Z'",  endDt = DateTime.Date(today),  endDtText    = "'"& Text.From(Date.Year(endDt)) & "-"& Text.From(Date.Month(endDt)) & "-"& Text.From(      Date.Day(endDt)    )      & "T00:00:00.0000000Z'",    token = getAuthToken("https://management.azure.com/"),  //Build request URL & Body using variables  url    = "https://management.azure.com/subscriptions/"& subscriptionId & "/resourceGroups/"      & resourceGroupName      & "/providers/Microsoft.DataFactory/factories/"      & factoryName      & "/queryPipelineRuns?api-version="      & apiVersion,    reqBody =         if contText = null        then"{ ""lastUpdatedAfter"": "& startDtText          & ", ""lastUpdatedBefore"": "& endDtText          & " }"        else"{ ""lastUpdatedAfter"": "& startDtText          & ", ""lastUpdatedBefore"": "& endDtText          & ", ""continuationToken"": '"          & contText          & "' }",       //Make API call toquery Data Factory      reqHeaders = [#"Content-Type"= "application/json", #"Authorization"= "Bearer "& token],      result = Json.Document(        Web.Contents(url, [Headers = reqHeaders, Content = Text.ToBinary(reqBody)])      ),      //Get continuation token fromprevious call if available      contToken = try Record.Field(result, "continuationToken") otherwise null,      //Run functionforeach new continuation token      CombinedResults =         if contToken = null        then{result}        elseList.Combine({{result}, getPipelineRuns(contToken)})    in      CombinedResultsin  getPipelineRuns

คลิกถัดไป คลิกขวาที่ query ตั้งต้นและAdvanced Editor แล้ววาง code ต่อไปนี้ จากนั้นคลิกเสร็จสิ้น:

?

1234let    Source = getPipelineRuns(null)in    Source

คุณจะต้องแปลงที่ JSON response เป็นตารางอีกครั้ง ซึ่งตอนนี้ควรได้รับบันทึกข้อมูลรายการทั้งหมดของการใช้งาน Data Factory ของคุณ

เมื่อเสร็จแล้ว ให้คลิก Close & Apply.

ตอนนี้คุณควรมีทุกสิ่งที่จำเป็นในการเริ่มสร้างแดชบอร์ดการตรวจติดตาม Data Factory ของคุณ!

หากคุณอยากได้รับคำปรึกษาเพิ่มเติมเกี่ยวหรือมีข้อสงสัย โปรดติดต่อเราเพื่อรับคำปรึกษาฟรีโดยกรอกข้อมูลด้านล่าง หรือติดต่อเราโดยตรงที่ +66 (0) 2 117 4344

Dela artikeln på sociala medier