বাংলাদেশে ডেটা অ্যানালাইসিসের জগতে, Power BI ব্যবহারকারীদের জন্য DAX (Data Analysis Expressions) ফাংশনগুলো যেন এক জাদুর কাঠি। এর মধ্যে USERELATIONSHIP ফাংশনটি একটু ভিন্ন, অনেকটা লুকানো মণির মতো। যারা Power BI-তে ডেটা মডেলিং নিয়ে কাজ করেন, তাদের কাছে এই ফাংশনটি খুবই গুরুত্বপূর্ণ। আপনি যদি ডেটা অ্যানালাইসিসের মাধ্যমে আপনার ব্যবসাকে আরও গতিশীল করতে চান, তাহলে USERELATIONSHIP ফাংশনটি কীভাবে সঠিকভাবে ব্যবহার করতে হয়, তা জানা আপনার জন্য অত্যন্ত জরুরি। চলুন, এই ফাংশনটির খুঁটিনাটি জেনে নিই এবং দেখি কীভাবে এটি আপনার ডেটা অ্যানালাইসিসকে এক নতুন মাত্রা দিতে পারে।
USERELATIONSHIP DAX ফাংশন কী এবং কেন এটি গুরুত্বপূর্ণ?
USERELATIONSHIP DAX ফাংশনটি Power BI-তে ডেটা মডেলিংয়ের একটি শক্তিশালী টুল। সহজ ভাষায় বলতে গেলে, এটি আপনাকে দুটি টেবিলের মধ্যে একটি নিষ্ক্রিয় (inactive) সম্পর্ককে সাময়িকভাবে সক্রিয় করতে সাহায্য করে, যখন আপনি একটি নির্দিষ্ট গণনা (calculation) করছেন।
আপনি হয়তো ভাবছেন, কেন আমাদের একটি নিষ্ক্রিয় সম্পর্ক সক্রিয় করার প্রয়োজন হবে? ধরুন, আপনার ডেটা মডেলে দুটি টেবিলের মধ্যে একাধিক সম্পর্ক আছে। উদাহরণস্বরূপ, একটি Sales টেবিল এবং একটি Date টেবিল। Date টেবিলটি Sales টেবিলের Order Date কলামের সাথে সক্রিয়ভাবে যুক্ত, কিন্তু Delivery Date কলামের সাথে নিষ্ক্রিয়ভাবে যুক্ত। এখন, আপনি যদি Delivery Date অনুযায়ী বিক্রয় বিশ্লেষণ করতে চান, তাহলে আপনাকে USERELATIONSHIP ব্যবহার করতে হবে।
এই ফাংশনটি ব্যবহার করে আপনি একই ডেটা মডেলের মধ্যে বিভিন্ন দৃষ্টিকোণ থেকে ডেটা বিশ্লেষণ করতে পারবেন, যা ডেটা মডেলকে অপ্রয়োজনীয়ভাবে জটিল না করেই সম্ভব। এটি আপনার ডেটা মডেলকে পরিষ্কার এবং কার্যকরী রাখতে সাহায্য করে।
কেন USERELATIONSHIP আপনার জন্য অপরিহার্য?
১. ফ্লেক্সিবিলিটি: এটি আপনাকে ডেটা মডেলের মধ্যে একাধিক সম্পর্ককে কার্যকরভাবে পরিচালনা করতে সাহায্য করে, যা বিভিন্ন দৃষ্টিকোণ থেকে ডেটা বিশ্লেষণের সুযোগ করে দেয়।
২. দক্ষতা: এটি ডেটা মডেলকে অপ্রয়োজনীয়ভাবে জটিল করা থেকে বিরত রাখে, কারণ আপনাকে একই ডেটার জন্য একাধিক টেবিল তৈরি করতে হয় না।
৩. সঠিক বিশ্লেষণ: এটি নিশ্চিত করে যে আপনার গণনাগুলি সঠিক সম্পর্কের উপর ভিত্তি করে হচ্ছে, যা বিশ্লেষণের নির্ভুলতা বাড়ায়।
USERELATIONSHIP এর ব্যবহারিক প্রয়োগ: একটি বাস্তব উদাহরণ
চলুন, একটি বাস্তব জীবনের উদাহরণ দিয়ে USERELATIONSHIP এর ব্যবহার দেখি। imagine করুন, আপনি একটি ই-কমার্স ব্যবসা চালান, যেখানে আপনি পণ্য বিক্রি করেন। আপনার কাছে Orders এবং Dates নামে দুটি টেবিল আছে।
Orders টেবিল:
OrderIDOrderDateDeliveryDateProductIDQuantityRevenue
Dates টেবিল:
DateYearMonthDay
আপনার Dates টেবিলটি Orders টেবিলের OrderDate কলামের সাথে সক্রিয়ভাবে যুক্ত। কিন্তু আপনি DeliveryDate অনুযায়ীও মোট রাজস্ব (Total Revenue) দেখতে চান। এই ক্ষেত্রে, Dates টেবিলের Date কলাম এবং Orders টেবিলের DeliveryDate কলামের মধ্যে একটি নিষ্ক্রিয় সম্পর্ক তৈরি করতে হবে।

ধাপে ধাপে USERELATIONSHIP ব্যবহার
১. সম্পর্ক তৈরি: Power BI-এর Model View-তে যান। Dates টেবিলের Date কলাম এবং Orders টেবিলের DeliveryDate কলামের মধ্যে একটি সম্পর্ক তৈরি করুন। এই সম্পর্কটি ডিফল্টভাবে নিষ্ক্রিয় (dotted line) থাকবে, কারণ OrderDate এর সাথে সম্পর্কটি ইতিমধ্যেই সক্রিয় আছে।
২. মেজার তৈরি: এখন, DeliveryDate অনুযায়ী মোট রাজস্ব গণনা করার জন্য একটি DAX মেজার তৈরি করুন:
Total Revenue by Delivery Date =
CALCULATE(
SUM(Orders[Revenue]),
USERELATIONSHIP(Dates[Date], Orders[DeliveryDate])
)
এই মেজারটিতে CALCULATE ফাংশনটি SUM(Orders[Revenue]) কে একটি নতুন ফিল্টার কনটেক্সটে মূল্যায়ন করছে। USERELATIONSHIP(Dates[Date], Orders[DeliveryDate]) অংশটি সাময়িকভাবে Dates এবং Orders টেবিলের মধ্যে DeliveryDate সম্পর্কটিকে সক্রিয় করে দিচ্ছে।
উদাহরণের মাধ্যমে আরও বিস্তারিত বিশ্লেষণ
ধরুন, আপনার ডেটা মডেল দেখতে এমন:
Orders Table

| OrderID | OrderDate | DeliveryDate | Revenue |
|---|---|---|---|
| 101 | 2023-01-05 | 2023-01-10 | 1500 |
| 102 | 2023-01-06 | 2023-01-12 | 2000 |
| 103 | 2023-01-08 | 2023-01-15 | 1200 |
| 104 | 2023-02-01 | 2023-02-05 | 1800 |
| 105 | 2023-02-03 | 2023-02-08 | 2500 |
Dates Table
| Date | Year | Month |
|---|---|---|
| 2023-01-01 | 2023 | 1 |
| 2023-01-02 | 2023 | 1 |
| … | … | … |
| 2023-02-28 | 2023 | 2 |
যদি আপনি শুধু SUM(Orders[Revenue]) ব্যবহার করেন এবং Dates টেবিলের Month অনুযায়ী ডেটা দেখেন, তবে এটি OrderDate কলামের উপর ভিত্তি করে ফলাফল দেবে।
সাধারণ মেজার (OrderDate-ভিত্তিক):
Total Revenue (Order Date) = SUM(Orders[Revenue])
| Month | Total Revenue (Order Date) |
|---|---|
| Jan | 4700 |
| Feb | 4300 |
এখন, USERELATIONSHIP ব্যবহার করে DeliveryDate অনুযায়ী মেজার তৈরি করলে:

Total Revenue by Delivery Date =
CALCULATE(
SUM(Orders[Revenue]),
USERELATIONSHIP(Dates[Date], Orders[DeliveryDate])
)
| Month | Total Revenue by Delivery Date |
|---|---|
| Jan | 4700 |
| Feb | 4300 |
এখানে, জানুয়ারিতে 4700 (1500+2000+1200) এবং ফেব্রুয়ারিতে 4300 (1800+2500) এসেছে। এর কারণ, DeliveryDate অনুযায়ী ডেটা ফিল্টার হচ্ছে। প্রথম তিনটি অর্ডারের ডেলিভারি জানুয়ারিতে এবং পরের দুটি অর্ডারের ডেলিভারি ফেব্রুয়ারিতে হয়েছে।
এইভাবে, আপনি একই ডেটা মডেলের মধ্যে বিভিন্ন তারিখের উপর ভিত্তি করে আপনার রাজস্ব বিশ্লেষণ করতে পারেন।
গুরুত্বপূর্ণ বিষয়াবলী এবং টিপস
- একক সক্রিয় সম্পর্ক: দুটি টেবিলের মধ্যে শুধুমাত্র একটি সক্রিয় সম্পর্ক থাকতে পারে। যদি আপনি একাধিক সম্পর্ক ব্যবহার করতে চান, তবে নিষ্ক্রিয় সম্পর্কগুলোর জন্য
USERELATIONSHIPব্যবহার করা আবশ্যক। - পারফরম্যান্স:
USERELATIONSHIPফাংশনটি ব্যবহারের ফলে পারফরম্যান্সে সামান্য প্রভাব পড়তে পারে, বিশেষ করে যদি আপনার ডেটা মডেল অনেক বড় হয়। তবে, বেশিরভাগ ক্ষেত্রেই এটি নগণ্য। - ডাইনামিক মডেলিং: এটি ডাইনামিক মডেলিংয়ের জন্য খুবই উপযোগী। আপনি বিভিন্ন পরিস্থিতিতে বিভিন্ন সম্পর্ক সক্রিয় করে ডেটা বিশ্লেষণ করতে পারেন।
- অন্যান্য DAX ফাংশনের সাথে ব্যবহার:
CALCULATE,SUMX,AVERAGEXএর মতো অন্যান্য DAX ফাংশনের সাথেUSERELATIONSHIPব্যবহার করা হয়। এটি একটি 'filter modifier' হিসেবে কাজ করে।
USERELATIONSHIP এর সীমাবদ্ধতা
USERELATIONSHIP একটি চমৎকার টুল হলেও এর কিছু সীমাবদ্ধতা আছে:
- ১:১ বা ১:অনেক সম্পর্ক: এটি শুধুমাত্র ১:১ (one-to-one) বা ১:অনেক (one-to-many) সম্পর্কগুলির জন্য কাজ করে। অনেক:অনেক (many-to-many) সম্পর্কের ক্ষেত্রে এটি সরাসরি ব্যবহার করা যায় না।
- একবারে একটি সম্পর্ক:
USERELATIONSHIPএকবারে শুধুমাত্র একটি নিষ্ক্রিয় সম্পর্ককে সক্রিয় করতে পারে। যদি আপনার একাধিক নিষ্ক্রিয় সম্পর্ক সক্রিয় করার প্রয়োজন হয়, তবে আপনাকে একাধিকUSERELATIONSHIPস্টেটমেন্ট ব্যবহার করতে হতে পারে, যাCALCULATEএর মধ্যে নেস্টেড করা যেতে পারে। - পারফরম্যান্স ওভারহেড: যদিও সাধারণত নগণ্য, তবে খুব বড় ডেটা মডেল এবং জটিল গণনার ক্ষেত্রে এটি পারফরম্যান্সের উপর কিছুটা প্রভাব ফেলতে পারে।
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ)
প্রশ্ন ১: USERELATIONSHIP কি শুধু তারিখের কলামের জন্য ব্যবহার করা হয়?
উত্তর: না, USERELATIONSHIP শুধুমাত্র তারিখের কলামের জন্য ব্যবহৃত হয় না। এটি যেকোনো দুটি কলামের মধ্যে নিষ্ক্রিয় সম্পর্ক সক্রিয় করতে ব্যবহার করা যেতে পারে, যতক্ষণ না সেই সম্পর্কটি ১:১ বা ১:অনেক হয়। উদাহরণস্বরূপ, আপনি একটি Employee টেবিলের ManagerID এবং EmployeeID কলামের মধ্যে নিষ্ক্রিয় সম্পর্ক সক্রিয় করতে এটি ব্যবহার করতে পারেন।
প্রশ্ন ২: Power BI-তে কীভাবে একটি নিষ্ক্রিয় সম্পর্ক তৈরি করব?
উত্তর: Power BI Desktop-এর Model View-তে গিয়ে দুটি টেবিলের সংশ্লিষ্ট কলামগুলো টেনে এনে সম্পর্ক তৈরি করতে পারেন। যদি দুটি কলামের মধ্যে ইতিমধ্যেই একটি সক্রিয় সম্পর্ক থাকে, তবে নতুন সম্পর্কটি স্বয়ংক্রিয়ভাবে নিষ্ক্রিয় (ডটেড লাইন) হয়ে যাবে। আপনি সম্পর্কের উপর ডাবল ক্লিক করে এর প্রোপার্টিজ পরিবর্তন করতে পারেন এবং "Make this relationship active" অপশনটি আনচেক করে এটিকে নিষ্ক্রিয় করতে পারেন।
প্রশ্ন ৩: USERELATIONSHIP ব্যবহার না করলে কী হবে?
উত্তর: যদি আপনি USERELATIONSHIP ব্যবহার না করেন, তাহলে Power BI শুধুমাত্র আপনার ডেটা মডেলের সক্রিয় সম্পর্কের উপর ভিত্তি করে গণনা করবে। এর ফলে আপনার ডেটা বিশ্লেষণ অসম্পূর্ণ বা ভুল হতে পারে, বিশেষ করে যখন আপনি ভিন্ন দৃষ্টিকোণ থেকে ডেটা দেখতে চান (যেমন OrderDate এর পরিবর্তে DeliveryDate অনুযায়ী ডেটা)।
প্রশ্ন ৪: USERELATIONSHIP কি ফিল্টার কনটেক্সট পরিবর্তন করে?
উত্তর: হ্যাঁ, USERELATIONSHIP একটি ফিল্টার মডিফায়ার হিসেবে কাজ করে। এটি CALCULATE ফাংশনের মধ্যে বিদ্যমান ফিল্টার কনটেক্সটকে সাময়িকভাবে পরিবর্তন করে, যাতে নির্দিষ্ট নিষ্ক্রিয় সম্পর্কটি সক্রিয় হয়ে যায় এবং গণনা সেই সম্পর্কের উপর ভিত্তি করে হয়।
প্রশ্ন ৫: USERELATIONSHIP এবং CROSSFILTER এর মধ্যে পার্থক্য কী?
উত্তর: USERELATIONSHIP একটি নির্দিষ্ট নিষ্ক্রিয় সম্পর্ককে সাময়িকভাবে সক্রিয় করে। অন্যদিকে, CROSSFILTER ফাংশনটি ফিল্টার ডিরেকশন (একক বা উভয়মুখী) পরিবর্তন করে অথবা সম্পূর্ণরূপে একটি সম্পর্ককে নিষ্ক্রিয় করে। USERELATIONSHIP মূলত নিষ্ক্রিয় সম্পর্ক সক্রিয় করার জন্য, আর CROSSFILTER ফিল্টার প্রবাহের দিক নিয়ন্ত্রণে ব্যবহৃত হয়।
প্রশ্ন ৬: Power BI-তে একাধিক নিষ্ক্রিয় সম্পর্ককে একসাথে সক্রিয় করা যায় কি?
উত্তর: সরাসরি USERELATIONSHIP ফাংশন দিয়ে একসাথে একাধিক নিষ্ক্রিয় সম্পর্ককে সক্রিয় করা যায় না। তবে, আপনি CALCULATE ফাংশনের মধ্যে একাধিক USERELATIONSHIP স্টেটমেন্ট ব্যবহার করে এটি অর্জন করতে পারেন।
উদাহরণস্বরূপ:
Measure with Multiple Inactive Relationships =
CALCULATE(
SUM(Orders[Revenue]),
USERELATIONSHIP(Dates[Date], Orders[OrderDate]),
USERELATIONSHIP(Customers[CustomerID], Orders[CustomerID]) // যদি এটিও নিষ্ক্রিয় থাকে
)
তবে, সাধারণত একটি CALCULATE স্টেটমেন্টে একটি USERELATIONSHIP ব্যবহার করাই ভালো, কারণ এটি কোডকে আরও পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য রাখে। যদি আপনার একাধিক নিষ্ক্রিয় সম্পর্ক সক্রিয় করার প্রয়োজন হয়, তবে আপনার ডেটা মডেল ডিজাইন বা আপনার বিশ্লেষণের উদ্দেশ্য পুনর্বিবেচনা করা উচিত।
মূল বিষয়বস্তু (Key Takeaways)
USERELATIONSHIPDAX ফাংশনটি Power BI-তে নিষ্ক্রিয় সম্পর্কগুলোকে সাময়িকভাবে সক্রিয় করতে ব্যবহৃত হয়।- এটি ডেটা মডেলকে অপ্রয়োজনীয়ভাবে জটিল না করে বিভিন্ন দৃষ্টিকোণ থেকে ডেটা বিশ্লেষণের সুযোগ করে দেয়।
CALCULATEফাংশনের সাথেUSERELATIONSHIPএকটি শক্তিশালী কম্বিনেশন, যা ডেটা ফিল্টারিংয়ে অসাধারণ ফ্লেক্সিবিলিটি দেয়।- সঠিকভাবে ব্যবহার করলে এটি আপনার ডেটা অ্যানালাইসিসকে আরও নির্ভুল এবং কার্যকরী করে তোলে।
- এটি বিশেষত তারিখ টেবিল এবং ফ্যাক্ট টেবিলের মধ্যে একাধিক তারিখ কলামের সাথে কাজ করার সময় অত্যন্ত কার্যকর।
USERELATIONSHIP DAX ফাংশনটি Power BI-তে আপনার ডেটা অ্যানালাইসিসের ক্ষমতাকে অনেক বাড়িয়ে দিতে পারে। এটি আপনাকে আপনার ডেটা মডেলের সম্পূর্ণ সম্ভাবনা অন্বেষণ করতে সাহায্য করবে। তাই, আজই আপনার Power BI প্রজেক্টে এই ফাংশনটি ব্যবহার করা শুরু করুন এবং দেখুন এটি কীভাবে আপনার ডেটা অ্যানালাইসিসের পদ্ধতিকে বদলে দেয়! আপনার যদি এই ফাংশনটি নিয়ে আরও কোনো প্রশ্ন থাকে, তাহলে নিচে কমেন্ট করে জানাতে ভুলবেন না। আমরা আপনার প্রশ্নের উত্তর দিতে প্রস্তুত!


Comments