تكامل Data Explorer في Discourse مع Power BI

تكامل مستكشف بيانات Discourse مع Power BI

لقد قمت مؤخرًا بإنشاء دالة Power BI رائعة تجلب بيانات مستكشف البيانات مباشرة إلى Power BI بأقل قدر من التكلفة الإضافية.

لذلك، إذا كنت مثلي وتود أن يتم سحب البيانات وتحديثها تلقائيًا عبر تطبيق Power BI، فإليك كود الدالة التي يجب عليك وضعها في محرر Power BI المتقدم:

(queryID) = let
        resultCount = 1000,
        otherNameForPage = 0,

        GetPage = (otherNameForPage) =>
            let
                content1 = "params={""page":""" & Number.ToText(otherNameForPage) & """}",
                RawData = Json.Document(Web.Contents(
                    "https://forumURL/admin/plugins/explorer/queries",
                    [RelativePath=Number.ToText(queryID) & "/run",
                        Query=
                        [
                            params="{"page":""" & Number.ToText(otherNameForPage) & """}"
                        ],

                        Headers = [ 
                        #"api-username"="yourAPIUsername",
                        #"api-key"="yourAPIKey",
                        #"Content-Type" = "application/x-www-form-urlencoded"],
                        Content = Text.ToBinary(content1)
                    ]
                    
                ) ),
                resultCount = RawData[result_count]
            in
                if RawData[result_count] = 0 then null else RawData,
            Pages = List.Generate(
                () => [i = 0, RawData = GetPage(i)],
                each [RawData] <> null,
                each [i=[i]+1, RawData = GetPage(i)],
                each Table.Combine(let raw = [RawData] in List.Transform(raw[rows], each Table.FromRows({_}, raw[columns])))),
            Output = Table.Combine(Pages)
in
    Output

وهنا استعلام عينة من مستكشف البيانات. يتضمن الترقيم المطلوب لكي تعمل الدالة أعلاه بشكل صحيح (وهو مطلوب حتى لو كان استعلامك يعيد صفحة واحدة فقط):

--[params]
-- integer :page = 0

SELECT count(*) from badges

OFFSET :page * 1000
LIMIT 1000

(يمكنك بسهولة تكييف استعلاماتك الحالية عن طريق تضمين السطرين الأول والأخير من المثال أعلاه)

ستستمر هذه الدالة تلقائيًا في التكرار عبر الصفحات حتى لا يتم العثور على نتائج أخرى.

كيفية جعلها تعمل؟

بعد تحميل الدالة إلى Power BI، ستحتاج إلى تعيين شيئين:

  1. اسم المستخدم الخاص بـ API ومفتاح API (راجع الدالة أعلاه لمعرفة العناصر النائبة):

                         Headers = [ 
                         #"api-username"="yourAPIUsername",
                         #"api-key"="yourAPIKey",
    
  2. رقم معرف الاستعلام (Query ID).

    لجلب بياناتك، كل ما عليك تقديمه هو معرف الاستعلام الذي يسهل العثور عليه في عنوان URL للاستعلام:
    image

    يجب أن يبدو الأمر هكذا في Power BI بعد النقر على الدالة:

مخرجات العينة

هذه هي مخرجات استعلام العينة:

image

هذا كل شيء! يمكنك الآن تشكيل بياناتك بالطريقة التي تريدها.

11 إعجابًا

كان لديك وقت فراغ زائد عن الحاجة. :laughing:

شكرًا لك على أي حال :slight_smile: مفيد جدًا.

إعجابَين (2)

لأشخاص مثلي، الذين يرون Power BI ويشعرون بالارتباك.

https://powerbi.microsoft.com/en-us/what-is-power-bi/

5 إعجابات

شكرًا لك @loginerror على توفير ذلك! سأحاول تحقيق نفس الشيء في Tableau. لست متأكدًا مما إذا كان يحتوي على محرر متقدم مشابه لما يقدمه Power BI، لكنني سأرى.

إعجاب واحد (1)

بالنسبة للآخرين مثلي الذين لا يعرفون شيئًا عن Tableau.

https://www.tableau.com/

احصل على صورة كاملة عن عملك، من الداخل والخارج.
اربط جميع بياناتك بمصادر خارجية حاسمة مثل حالة الصحة العامة، والمؤشرات الاقتصادية، والسياسات الحكومية.


من ويكيبيديا

تستفسر منتجات Tableau من قواعد البيانات العلائقية، ومكعبات التحليلات عبر الإنترنت، وقواعد البيانات السحابية، وجداول البيانات لتوليد تصورات بيانات من نوع الرسوم البيانية. كما يمكن للمنتجات استخراج البيانات، وتخزينها، واسترجاعها من محرك بيانات في الذاكرة.

إعجاب واحد (1)

مرحبًا @loginerror، شكرًا لك على تقديم هذا!

أنا في بداية رحلتي مع PowerBI، وكان من الممتع العمل على لوحة تحكم لـ Discourse، وبفضلك قد أتمكن من إتمام الخطوات الأولية والوصول إلى الجزء الممتع بسرعة أكبر.

لكن قبل ذلك، أود طرح سؤال…
لقد حاولت تشغيل الاستعلام المقترح باستخدام مفتاح API تم إنشاؤه حديثًا (مخصص لاسم المستخدم الخاص بي)، لكنني لم أستطع جعله يعمل لسبب ما.

أرى أن هناك نشاطًا يحدث في Discourse - حيث يشير النظام إلى أن مفتاح API قد تم استخدامه، لكن PowerBI يستمر في تشغيل الاستعلام بشكل لا نهائي ولا يعرض أي بيانات.

أنا لست خبيرًا في الاستعلامات على الإطلاق، لذا قد يكون هناك شيء واضح أفتقده… هل يمكنك مساعدتي من فضلك؟

يجب أن يعمل ببساطة عند توصيله.

هل جربت تشغيله باستخدام استعلام العينة الذي يعيد قيمة واحدة فقط؟

--[params]
-- integer :page = 0

SELECT count(*) from badges

OFFSET :page * 1000
LIMIT 1000

وإلا، إذا كان لديك عدد أكبر من الصفحات (ونحن محدودون بـ 1000 سجل لكل صفحة)، فقد يستغرق تحميل جميع البيانات وقتًا أطول.

لقد جربت الكود للتو من خلال إنشاء مشروع Power BI سريع باستخدام الكود من المنشور الأصلي، وقد عمل بشكل جيد (يبدو أنه يعمل بشكل جيد سواء باستخدام مفتاح واجهة برمجة التطبيقات للنظام أو مفتاح مستخدم مع صلاحيات المسؤول).

4 إعجابات

أوه، لم أدرك أنك أجبت بهذه السرعة - شكرًا لك!
قد أبدو مبتدئًا تمامًا، وربما يكون ذلك لأنني كذلك. لكن أين أستخدم هذا الجزء من الكود؟ عذرًا، أنا حقًا جديد في Power BI..

إعجاب واحد (1)

هذا استعلام Data Explorer نموذجي يجب حفظه في برنامج إضافة Data Explorer. تم تصميمه لإعادة سجل واحد فقط، مما يسمح باختبار الدالة دون إجبارها على تحميل كمية كبيرة من البيانات.

بعد ذلك، استخرج المعرف (ID) من عنوان URL واستخدمه في دالة Power BI التي تم إنشاؤها من الكود الموجود في المنشور الأول:

/admin/plugins/explorer?id=260
إعجاب واحد (1)

آه، فهمت الآن! شكرًا جزيلاً. كنت أنظر إلى الأمور من منظور Power BI فقط.. كم كان ذلك غبيًا :slight_smile:

سأرى كيف تسير الأمور من هنا.

شكرًا مرة أخرى، عمل رائع.

إعجاب واحد (1)

تحديث سريع، في حال رغب أحدكم في تحسين السكربت من المنشور الأول.

في الواقع، من الممكن سحب جميع البيانات دفعة واحدة، ويبدو أن ذلك مستقل عن حجم البيانات :sweat_smile:
(لقد خضعت هذا الاختبار على جدول posts كبير يحتوي على أعمدة id و raw وقد نجح في ذلك!)

استعلام نموذجي:

SELECT      'id'
            || string_agg(E'\n' || case when posts.id::text is null then '-1' else posts.id::text end
            ,''
            ORDER BY posts.id asc) as value
FROM        posts

عند تشغيله، سيُطبع ملفك شبه CSV كقيمة واحدة، وبالتالي على صفحة واحدة. ستحتاج بعد ذلك إلى قص value" وعلامة " أخرى في النهاية ليصبح ملف CSV مفيدًا:

يمكنك بطبيعة الحال إضافة المزيد من البيانات إليه بإضافة عمود جديد لملف CSV وبيانات جديدة لذلك العمود:

SELECT      'id,newcolumn'
            || string_agg(E'\n' || case when posts.id::text is null then '-1' else posts.id::text end
            || string_agg(E'\n' || case when posts.newcolumn::text is null then '-1' else posts.newcolumn::text end
            ,''
            ORDER BY posts.id asc) as value
FROM        posts

عند تحديثه لدعم مثل هذا الاستعلام، لن يحتاج Power BI إلى التنقل عبر صفحات متعددة، مما يؤدي إلى استرجاع أسرع للبيانات.

4 إعجابات

مرحبًا! جديد نسبيًا على Power BI، وجديد جدًا على Discourse Data Explorer، لذا أرجو أن تتحملوا معي.

أحاول الاتصال؛ لقد أدخلت رابط المنتدى واسم المستخدم وكلمة المرور في السكربت في الأعلى. لقد قمت بتشغيل سكريبت شارات الاختبار في Data Explorer. ومع ذلك، عندما أحاول الاتصال عبر Power BI، أواجه هذه الرسالة:

أقوم بالاتصال بشكل مجهول لأن أي محاولة لاستخدام أذونات أخرى في Power BI تُظهر رسالة تفيد بأنه يجب جمع البيانات بشكل مجهول.

هل لديكم أي نصائح؟

في النهاية، أحاول ربط عدد كبير من منتدياتنا (مئات المنتديات) بـ Power BI للحصول على التحليلات. وإذا كانت هناك طريقة أسهل للقيام بذلك بدلًا من الطريقة اليدوية مثل هذه، فسأكون سعيدًا أيضًا لاستقبال أي اقتراحات!

تحرير: أنا أيضًا مرتبك قليلاً بشأن الاستعلام المحدث لاستخراج جميع البيانات. هل يجب عليّ التصدير إلى ملف CSV أولاً؟ هل هذا ليس رابطًا مباشرًا؟

إعجاب واحد (1)

لا يجب أن تستخدم بيانات اعتماد مستخدم المنتدى، بل مفتاح API يمكنك الحصول عليه من لوحة الإدارة → API

لا أنصحك بالبدء بهذه الطريقة قبل فهم الطريقة الأصلية، لأنها في الأساس حل بديل ضخم للحصول على كمية كبيرة من البيانات دفعة واحدة.

3 إعجابات

حسناً، هذا منطقي!

عذراً، لا أعرف لماذا كتبت كلمة ‘كلمة المرور’، كنت أقصد ‘مفتاح API’ وكنت أفكر في ‘مفتاح API’! لقد اتبعت تلك الخطوات للحصول عليه وأدرجته في المنطقة التي أشرت إليها في سكريبت PowerBI.

إعجابَين (2)

سأجرب أولاً استخدام Postman للتأكد من نجاح استدعاء واجهة برمجة التطبيقات بشكل صحيح.

يمكنك العثور على استدعاء واجهة برمجة التطبيقات نفسه عند الانتقال إلى صفحة استعلام مستكشف البيانات في متصفحك، وفتح وحدة تحكم الشبكة (Network console) وتشغيل الاستعلام. سيعرض لك فلتر XHR جميع المعلمات المطلوبة التي يمكنك استخدامها بعد ذلك في Postman للتحقق من نجاح العملية.

إعجابَين (2)

اتضح أن هناك خطأ مطبعيًا في Power BI، وهو ما تسبب في المشكلة. يا لي من ساذج! الآن يعمل كل شيء بشكل صحيح في Power BI، وأبدأ عملية محاولة سحب جميع البيانات أو أجزاء منها لأبدأ في الفرز والتحليل.

إعجابَين (2)

@loginerror - أتساءل ما إذا كنت أفتقد شيئًا تافهًا. (جديد جدًا في PowerBI، لكنني قمت ببعض عمل لوحات المعلومات الأساسية باستخدام Excel)…

تواجهني باستمرار مشاكل في بيانات الاعتماد. أعرف أنها صحيحة. لقد قمت بالتحقق منها عبر Postman. أتساءل في استعلامك عما إذا كان عليّ إزالة علامات # أو علامات الاقتباس حول أسماء المعاملات بطريقة ما (جربت ذلك وحصلت على أخطاء نحوية عديدة).

أعتقد أنني أقوم بتحميل كل شيء بشكل صحيح على الرغم من أن أيقونة الاستعلام لديك تبدو مختلفة قليلاً عن أيقونتي.



إذا حاولت إدخال بيانات الاعتماد يدويًا، فإن (PowerBI) يخبرني باستمرار أنني يجب أن أدخل اسمًا في حقل لم يقدموه لي أبدًا ؛). أنا متأكد من أن هذه ليست الطريقة الصحيحة لاستخدام هذا على أي حال، حيث أن هذا لا يظهر في أمثلتك أعلاه.

قد يكون الأمر أنني محظور في شبكتي في مكان آخر، لكنني أردت استبعاد الأخطاء التافهة أولاً. يرجى التحقق مما إذا كان هناك أي شيء خاطئ هنا وأخبرني برأيك. شكرًا.

مرحبًا @mattyoung

بالنسبة إلى Power BI، يجب عليك استخدام بيانات اعتماد مجهولة. والسبب في ذلك هو أن مفتاح الـ API مُدمج بالفعل في الدالة.

3 إعجابات

تمكنت من جعل الأمر يعمل الآن مع استعلام العينة الخاص بك ومفتاح API جديد ومستخدم واحد فقط باستخدام هذا المفتاح.

سأذكر بعض الأخطاء التي ارتكبتها وبعض النقاط المحيرة التي لم تكن واضحة بالنسبة لي… مما قد يساعد الآخرين بالإضافة إلى الخطوات التي نجحت فعليًا بالنسبة لي:

في Discourse، كان عليّ فعليًا إنشاء API واستخدام “مستخدم واحد” وليس “جميع المستخدمين” وتحديد اسم مستخدم فعلي.

في PowerBI، لاستخدام نظام الاستعلام عند الدخول إلى PowerBI، اختر “تحويل البيانات” للدخول إلى منطقة Power Query. اختر مصدر جديد > استعلام فارغ. ثم عندما يظهر المؤشر في حقل جديد بجانب fx، من الصف العلوي من الأزرار اختر “محرر متقدم” والصق الاستعلام الكبير المذكور في بداية هذا الموضوع مع اسم مستخدم Discourse ومفتاح API الخاصين بك بعد استبدلهما بالفعل. اختر “تم”. سيظهر حقل يطلب منك رقم معرف استعلام Discourse. أدخل الرقم… ثم اضغط على “تنفيذ”.

ستظهر تحذير أولي يطلب منك تحديد كيفية المصادقة:

اختر “تحرير بيانات الاعتماد”.

سترى أن هذا مُدرج كاتصال “مجهول”، وهو ما تريده. اترك الرابط كما هو (طالما أنه عنوان URL واحد فقط دون سرد مجلدات فرعية). في السابق، كنت أدخل عنوان URL الكامل المذكور في الاستعلام. من الواضح أن هذا كان تعقيدًا زائدًا من جهتي وخطأ كبير. :wink:

يجب أن ترى مخرجات مُولَّدة مشابهة لهذا، وستعرف أن هذا الاستعلام الأساسي يعمل الآن!

3 إعجابات

مرحباً! أنا مرة أخرى!

لقد فهمت الطريقة الأصلية لاستخراج البيانات. لقد أنشأت بنجاح عدة عروض وقمت باستيرادها إلى Power BI. رائع!

ومع ذلك، أواجه الآن مشكلة في السرعة. أحاول استخراج البيانات الخام فقط، على سبيل المثال، أستخدم “Select * from user_visits/users/topics” وما إلى ذلك. لدي أيضاً عدة منتديات. حالياً، أقوم بالاختبار مع حوالي 15 منتدى، لكن عملية التحديث أصبحت طويلة جداً، على سبيل المثال مع “User Visits”. أنا حالياً بانتظار التحديث منذ ساعة، على سبيل المثال. سأقوم في النهاية باستيراد البيانات من مئات المنتديات، لذا من الواضح أن هذا لن يكون عملياً على المدى الطويل.

أنا حقا في حيرة من أمري بشأن حلك البديل. حاولت تعديله، لكنه لم ينجح (وذلك بشكل رئيسي لأنني ضعيف في كتابة استعلامات SQL). هل يمكنك مساعدتي في إعادة صياغة حلّك البديل للسماح لي، على سبيل المثال، باستخدام “Select * From User_visits” بطريقة أسرع؟